Get a short-lived URL to the call recording
Separate from `/telemetry` on purpose, like `/transcript`: the audio is what the caller and the bot said — personal data, including sensitive data. Returns a presigned URL into the object store that expires after 15 minutes; the bytes are never proxied through the API. `available: false` means the session has no stored recording. A malformed or unknown `dispatchId` is a 404, identical to one that belongs to another tenant. The `bot_call.completed` webhook’s `links.recording` points here. Required scope: `bot-calls.read`.
/bot-sessions/{dispatchId}/recordingAuthorization
ApiKeyAuth An external API key, sent as Authorization: Bearer mflo_…. Scopes are checked per route; see each operation’s description.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/bot-sessions/497f6eca-6276-4993-bfeb-53cbbbba6f08/recording"{ "data": { "dispatchId": "a1a7028f-f483-4bbb-b8e5-fe878bddb1ae", "available": false }}Roll back to a published snapshot POST
Restores the snapshot onto the live bot and re-points the active snapshot at it — no follow-up publish needed. Conversation workflows are NOT rolled back (they are never snapshotted), but a workflow node’s `skillRef` resolves against the snapshot that is now current — so a SUCCESSFUL rollback may carry `skillRefWarnings` naming pins this older snapshot cannot serve. Those steps run without their playbook until you publish again or unpin them. Required scope: `bots.write`.
Get per-call diagnostics GET
Why the call closed, what errored, how the pipeline performed. Deliberately serves NO conversation content: the transcript is a separate call, so an integration that only debugs never receives caller speech. `other` carries a curated set of further diagnostics, and runtime error messages are summarised to their type — short classified messages such as SIP statuses pass as written, and Mediflo support sees the full text; treat the named fields as the contract. Required scope: `bot-calls.read`.