For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
**Rate limit: Per command** · **Burst:** 4 · **Refill:** 0.8 req/s
This POST has its own bucket. The cancel DELETE is configured identically, but uses a separate bucket.
Play an audio prompt and collect DTMF digits from the caller.
**Single-shot:** the gateway runs exactly one prompt/collect cycle and
emits one `digits.collected` carrying a `status`. The gateway never
retries on its own — **the client owns the retry loop**: inspect the
`status` field and re-issue this command with whatever prompt fits
(e.g. an "invalid PIN" prompt on `status: invalid`).
**Triggered webhooks:** `digits.collected`. Individual `dtmf.received`
events also fire during collection. For every finite prompt source, the
gateway probes with HEAD first and falls back to a ranged GET. A prompt
that cannot be prepared returns a synchronous HTTP error and emits no webhook.
Authentication
AuthorizationBearer
Application auth. Send `Authorization: Bearer <app_uuid>:<api_key>`. See [Authentication](https://voice-platform.docs.buildwithfern.com/api/authentication) for details.
Optional client-generated key for a mutating endpoint. It identifies one method, route, query, content type, and exact raw body within the authenticated app. Reusing it for a different request returns 422. While its record exists, a retry replays the original accepted response when available. Keys are valid for 1 hour. Allowed characters: letters, digits, dot, hyphen, underscore; max 128 characters. See the Idempotency guide.
Request
This endpoint expects an object.
prompt_fileslist of stringsRequired
Audio URLs to play as the prompt (http(s) only).
operation_uuidstringOptionalformat: "uuid"
Optional caller-supplied per-command correlation id, a bare lowercase RFC-4122 v4 UUID (no prefix). Echoed back as `operation_uuid` in the 202 ack. A later lifecycle webhook carries it only when the gateway can unambiguously associate that event with this command; the field is correlation, not proof of causation. When omitted, the gateway mints one. Not an idempotency key — request deduplication is the `Idempotency-Key` header. Invalid input (not a v4 UUID) is rejected with `400 invalid_request`.
between_digits_timeout_msintegerOptional100-10000Defaults to 2000
Milliseconds to wait between digits before timing out.
first_digit_timeout_msintegerOptional1000-300000Defaults to 5000
Milliseconds to wait for the first digit before timing out.
max_digitsintegerOptional1-128Defaults to 10
Maximum digits to collect. Must be >= min_digits.
min_digitsintegerOptional0-128Defaults to 1
terminatorslist of enumsOptionalDefaults to ["#"]
DTMF terminator characters. Only # and * allowed.
Allowed values:
validationobjectOptional
Optional input validation.
Response
Command accepted for async execution
operation_uuidstringformat: "uuid"
statusenum
already_endedtrueOptional
Optional. Set to true on idempotent terminal commands when the session was already in a terminal state at the time the request was received. Absent otherwise.
This POST has its own bucket. The cancel DELETE is configured identically, but uses a separate bucket.
Play an audio prompt and collect DTMF digits from the caller.
Single-shot: the gateway runs exactly one prompt/collect cycle and
emits one digits.collected carrying a status. The gateway never
retries on its own — the client owns the retry loop: inspect the
status field and re-issue this command with whatever prompt fits
(e.g. an “invalid PIN” prompt on status: invalid).
Triggered webhooks:digits.collected. Individual dtmf.received
events also fire during collection. For every finite prompt source, the
gateway probes with HEAD first and falls back to a ranged GET. A prompt
that cannot be prepared returns a synchronous HTTP error and emits no webhook.
Application auth. Send Authorization: Bearer <app_uuid>:<api_key>. See Authentication for details.
Optional client-generated key for a mutating endpoint. It identifies one method, route, query, content type, and exact raw body within the authenticated app. Reusing it for a different request returns 422. While its record exists, a retry replays the original accepted response when available. Keys are valid for 1 hour. Allowed characters: letters, digits, dot, hyphen, underscore; max 128 characters. See the Idempotency guide.
Optional caller-supplied per-command correlation id, a bare lowercase RFC-4122 v4 UUID (no prefix). Echoed back as operation_uuid in the 202 ack. A later lifecycle webhook carries it only when the gateway can unambiguously associate that event with this command; the field is correlation, not proof of causation. When omitted, the gateway mints one. Not an idempotency key — request deduplication is the Idempotency-Key header. Invalid input (not a v4 UUID) is rejected with 400 invalid_request.