Stop recording

View as Markdown
**Rate limit: Per command** · **Burst:** 20 · **Refill:** 20 req/s Stop the active [Recording](/api/recording). The accepted [Operation](/api) is returned immediately. This bucket's high capacity lets a DTMF terminator press right after the recording-start beep end the recording without sharing `recording/start`'s independent bucket. **Triggered webhook:** `recording.ended` is emitted when stop is accepted; it carries `recording_uuid`, the signed public `pull_url`, the `operation_uuid` of the originating `recording/start` command, and `duration`. There is no post-stop reachability probe. A `recording.failed` emitted earlier because the start-liveness check timed out can coexist with this later `recording.ended`; consumers must not treat those events as mutually exclusive. The signed `pull_url` carried by `recording.ended` gets a fresh validity window at that event's emission (24 hours by default). After completion it supports HTTP Range requests. Treat the complete URL as opaque and use it exactly as emitted.

Authentication

AuthorizationBearer
Application auth. Send `Authorization: Bearer <app_uuid>:<api_key>`. See [Authentication](https://voice-platform.docs.buildwithfern.com/api/authentication) for details.

Path parameters

uuidstringRequired

Session UUID (format {5-char-prefix}-{uuid}).

Headers

Idempotency-KeystringOptionalformat: "^[a-zA-Z0-9._-]+$"<=128 characters
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.
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.

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.

Errors

400
Bad Request Error
401
Unauthorized Error
404
Not Found Error
409
Conflict Error
413
Content Too Large Error
415
Unsupported Media Type Error
422
Unprocessable Entity Error
429
Too Many Requests Error
500
Internal Server Error
503
Service Unavailable Error