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, then review an editable draft before testing the interview.

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 compare a guided conversational path with the current experience.

Old way

Static forms demand attention every screen

StepsOpen, read, scan, type, submit
DurationRespondent reads and types each answer
CompletionUse as the measured baseline
New way

Talkform carries the interview and writes the answers

StepsOpen, answer aloud, review draft
DurationEvaluate in a controlled pilot
CompletionCompare in an A/B test

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 locally, or use a configured HTTP API and CLI deployment.

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 schemas and templates to coding agents.

Hosted API boundary

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.

Canonical result

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

AudioformSessionResult

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"
  }
}

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"
        }
      }
    }
  }
}