Create a procedure
FREE_FORM REQUIRES a `trigger`; DETERMINISTIC must have none (the model can never choose to run one). Procedures are part of the configuration snapshot: this reaches no call until POST /bots/{botId}/config/publish. To make a deterministic procedure the call flow, set `entryProcedureId` via PATCH /bots/{botId}/config afterwards. Required scope: `bots.write`.
/bots/{botId}/proceduresAuthorization
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/procedures" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "type": "FREE_FORM" }'{ "data": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "botId": "58ed41f0-04bf-402f-9853-7143ef7dd5ce", "name": "string", "type": "FREE_FORM", "trigger": "string", "content": null, "position": 0, "enabled": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }}Reorder a bot’s procedures POST
Pass EVERY non-deleted procedure id exactly once. A partial list is refused rather than merged: position also drives the node ids of the compiled call flow, so a duplicate position is a compile-level ambiguity. Order does not decide which free-form procedure the model reaches for — the trigger does. Required scope: `bots.write`.
Release a hold DELETE
Idempotent: releasing an already-expired hold succeeds, because the caller's goal is satisfied either way. Pass the same `X-Mediflo-Scheduling-Session` value you held the slot with — a hold is released only by its own owner, and without the header this request is a different owner, so the hold stays until it expires. Required scope: `scheduling.book`.