Roll back to a published snapshot
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`.
/bots/{botId}/config/rollbackAuthorization
ApiKeyAuth An external API key, sent as Authorization: Bearer mflo_…. Scopes are checked per route; see each operation’s description.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/bots/497f6eca-6276-4993-bfeb-53cbbbba6f08/config/rollback" \ -H "Content-Type: application/json" \ -d '{ "snapshotId": "09520abc-01e6-4da1-8fa5-f10e3883c861" }'{ "data": { "botId": "58ed41f0-04bf-402f-9853-7143ef7dd5ce", "updatedAt": "2019-08-24T14:15:22Z", "agentPromptText": "string", "remarksPromptText": "string", "remarksLlmModelId": "61dba459-df9c-4002-a591-7e86bec83d9b", "remarksFallbackLlmModelIds": [ "25cd54b2-ac54-4f0d-8bb9-3cdcb88f159c" ], "remarksTemperature": 0, "remarksOutputSchemaJson": null, "toolsConfig": null, "guardrailsConfig": null, "greetingConfig": null, "channelSettings": null, "sessionInitConfig": null, "turnTakingMode": "string", "promptVariableMetadata": null, "modelConfig": null, "currentConfigSnapshotId": "c9e4146c-56e5-412d-a7c1-86311b72b35e", "entryProcedureId": "2fd6edee-ae37-4588-8083-09bfb58841c3" }, "skillRefWarnings": [ { "nodeId": "string", "skillRef": "d5966267-b8b3-44e7-97e2-c36acfa06892" } ]}Publish the draft as an immutable snapshot POST
Freezes the draft and points the bot at it, including channelSettings. Required before the bot can be dispatched. Returns 400 `BOT_CONFIG_INCOMPLETE` with `missingFields` when the draft is not publishable — when `remarksLlmModelId` is among them, `details.hint` names the endpoint the id comes from. Procedure problems come back as 400 `BOT_CONFIG_PROCEDURES_INVALID` with `details.blockers`; a SUCCESSFUL publish may still carry `procedureWarnings` — read them. They include procedure findings and also chat prompt warnings, Terminarz/booking warnings (including WEB_CHAT_BOOKING_WIDGET_MISSING and WEB_CHAT_BOOKING_SMS_MISSING) and AI_DISCLOSURE_NOT_FOUND. None of those block the publish. Required scope: `bots.write`.
Get a short-lived URL to the call recording GET
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`.