Stop recording room audio

View as Markdown
Stop the active room [Recording](/api/recording). A `202 Accepted` response confirms that the stop request was accepted. It does not mean the recording file is closed or final audio is available. The flat response includes the request acknowledgement and the same Recording identity. Exactly one of these outcomes applies: - If the room has an active Recording, the stop request is accepted. - If the room has no active Recording, the response is `409 recording_not_active`; no recording command is sent and no event is emitted. This operation does not support `Idempotency-Key`. **Triggered webhook:** - `recording.ended` is emitted immediately after the recording file is closed. - It carries a fresh signed public URL for the same `recording_uuid`. - A `media_url` request started at that boundary may briefly continue following the growing Recording until finalization completes. See [Recording lifecycle events](/api/recording#lifecycle-events) for complete payload schemas and examples.

Authentication

AuthorizationBearer
Application auth. Send `Authorization: Bearer <app_uuid>:<api_key>` using any active key in the app's collection. See [Authentication](https://voice-platform.docs.buildwithfern.com/api/authentication) for details.

Path parameters

room_idstringRequired

Case-sensitive room identifier.

Headers

Operation-IdstringOptionalformat: "uuid"

optional client-supplied lowercase RFC-4122 v4 UUID returned as operation_uuid; platform generates one when omitted; correlation metadata distinct from Idempotency-Key.

Response

Room recording stop accepted
operation_uuidstringformat: "uuid"
statusenum
recording_uuidstringformat: "^rec_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
Stable identifier for this Recording.
expires_atdatetime

Exact expiry instant of media_url, derived from the URL’s signed expiration.

media_urlstringformat: "uri"

Starts at byte zero and follows the growing Recording until EOF. After finalization, the same URL serves a finite, range-capable WAV. A boundary request may briefly wait for internal finalization. Validity defaults to 24 hours.

room_idstringOptional

Owning Room; mutually exclusive with session_uuid.

session_uuidstringOptional

Owning Session; mutually exclusive with room_id.

Errors

400
Bad Request Error
401
Unauthorized Error
404
Not Found Error
409
Conflict Error
429
Too Many Requests Error
500
Internal Server Error
503
Service Unavailable Error