Audio-first forms

Turn any form into a live audio interview

Talkform asks questions aloud, fills structured fields from the conversation, and exports clean JSON for your apps, workflows, and agents.

Import existing forms

Paste a public URL from Typeform, Google Forms, Jotform, or HubSpot and launch the audio version without rebuilding.

Developer-first integrations

MCP tools, a CLI, JSON schemas, and docs that explain exactly how to configure and consume Talkform.

Old way vs. new way

Import your existing form and give people a conversational path that's easier to finish.

Old way

Static forms demand attention every screen

StepsOpen, read, scan, type, submit
DurationLonger — easier to abandon
CompletionLower when the form feels like work
New way

Talkform carries the interview and writes the answers

StepsOpen, answer aloud, review draft
DurationShorter — the host keeps momentum
CompletionHigher when the flow feels guided

How it works

You keep the schema. Talkform owns the interview, extraction, and export.

1

Define the fields

Describe variables, prompt copy, options, and validation in your config.

2

Run the interview

Talkform asks one question at a time over live audio and writes the form.

3

Export the result

Download JSON, pull through the HTTP API, CLI, or MCP server.

The surface

Transcript on the left, live question flow in the middle, captured answers on the right.

Transcript
Prompt canvas
Lock the learner identity
Ask for the person's name first, confirm it, and keep the interview moving one question at a time.
NameRoleGoalsAI comfort
Form answers

Integrations

Use Talkform from a product UI, backend, terminal, or agent runtime.

R

React

Embed the widget in any React product.

API

HTTP API

Bootstrap sessions and pull exports.

CLI

CLI

Generate configs and export results.

MCP

MCP

Expose to coding agents.

Canonical result

One stable schema so downstream systems can adapt it into plans, CRM records, or onboarding flows.

AudioformSessionResult

Same shape across UI, HTTP API, CLI, and MCP.

{
  "schemaVersion": "1.0",
  "formId": "customer-intake",
  "sessionId": "session_3e2z1f0c",
  "status": "completed",
  "completion": {
    "required": 5,
    "captured": 5,
    "percent": 100,
    "missingFieldIds": []
  },
  "currentPrompt": null,
  "fields": {
    "fullName": "Avery Stone",
    "role": "Product Lead",
    "goal": [
      "upskill_current_job",
      "ship_ai_projects"
    ],
    "aiComfort": 4,
    "teamContext": "Leading a small product team at a B2B SaaS startup."
  },
  "transcript": [
    {
      "speaker": "assistant",
      "text": "What should I call you?",
      "timestamp": 1
    },
    {
      "speaker": "user",
      "text": "Avery Stone.",
      "timestamp": 2
    }
  ],
  "summary": "Avery leads product at a SaaS startup and wants to ship AI projects for the current role.",
  "metadata": {
    "model": "gpt-realtime",
    "voice": "marin",
    "startedAt": "2026-03-10T12:00:00.000Z"
  }
}

Schema availability

Published at /schemas/audioform-session-result.json

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "AudioformSessionResult",
  "type": "object",
  "required": [
    "schemaVersion",
    "formId",
    "sessionId",
    "status",
    "completion",
    "fields",
    "transcript",
    "summary",
    "metadata"
  ],
  "properties": {
    "schemaVersion": {
      "type": "string",
      "const": "1.0"
    },
    "formId": {
      "type": "string"
    },
    "sessionId": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "in_progress",
        "completed",
        "abandoned"
      ]
    },
    "completion": {
      "type": "object",
      "required": [
        "required",
        "captured",
        "percent",
        "missingFieldIds"
      ],
      "properties": {
        "required": {
          "type": "number"
        },
        "captured": {
          "type": "number"
        },
        "percent": {
          "type": "number"
        },
        "missingFieldIds": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "currentPrompt": {
      "anyOf": [
        {
          "type": "null"
        },
        {
          "type": "object",
          "required": [
            "fieldId",
            "title",
            "detail"
          ],
          "properties": {
            "fieldId": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "detail": {
              "type": "string"
            }
          }
        }
      ]
    },
    "fields": {
      "type": "object",
      "additionalProperties": true
    },
    "transcript": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "speaker",
          "text",
          "timestamp"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "speaker": {
            "type": "string",
            "enum": [
              "assistant",
              "user",
              "system"
            ]
          },
          "text": {
            "type": "string"
          },
          "timestamp": {
            "type": "number"
          }
        }
      }
    },
    "summary": {
      "type": "string"
    },
    "metadata": {
      "type": "object",
      "required": [
        "model",
        "voice",
        "startedAt"
      ],
      "properties": {
        "model": {
          "type": "string"
        },
        "voice": {
          "type": "string"
        },
        "startedAt": {
          "type": "string"
        },
        "completedAt": {
          "type": "string"
        }
      }
    }
  }
}