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.
Talkform asks questions aloud, fills structured fields from the conversation, and exports clean JSON for your apps, workflows, and agents.
Paste a public URL from Typeform, Google Forms, Jotform, or HubSpot, then review an editable draft before testing the interview.
MCP tools, a CLI, JSON schemas, and docs that explain exactly how to configure and consume Talkform.
Import your existing form and compare a guided conversational path with the current experience.
You keep the schema. Talkform owns the interview, extraction, and export.
Describe variables, prompt copy, options, and validation in your config.
Talkform asks one question at a time over live audio and writes the form.
Download JSON locally, or use a configured HTTP API and CLI deployment.
Transcript on the left, live question flow in the middle, captured answers on the right.
Use Talkform from a product UI, backend, terminal, or agent runtime.
Embed the widget in any React product.
Bootstrap sessions and pull exports.
Generate configs and export results.
Expose schemas and templates to coding agents.
Transient session APIs and public Realtime issuance are disabled in hosted production by default. Enable them only after adding a durable session store, a distributed rate limiter, and server authentication; the checked-in process-local implementations are for development and controlled evaluation.
One stable schema so downstream systems can adapt it into plans, CRM records, or onboarding flows.
One schema across the UI, HTTP API, CLI, and MCP resources.
{
"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-2.1",
"voice": "marin",
"startedAt": "2026-03-10T12:00:00.000Z"
}
}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"
}
}
}
}
}