Ask the clinic to call the patient back
Filing a contact request books nothing, so it sits on the read scope: an integration that may only browse can still escalate to a human. Required scope: `scheduling.read`.
/scheduling/callback-requestsAuthorization
ApiKeyAuth An external API key, sent as Authorization: Bearer mflo_…. Scopes are checked per route; see each operation’s description.
In: header
Request 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
curl -X POST "https://example.com/scheduling/callback-requests" \ -H "Content-Type: application/json" \ -d '{ "reason": "string" }'{ "data": { "contactRequestId": "15863e0e-4087-455e-9e29-012ab5b41edf" }}Book an appointment POST
Pass `slotToken` or `holdId`, and `patientRef` (from /patients/lookup) or `patient`. **202** means the outcome is not yet known: the body carries an `operationId` — poll GET /scheduling/booking-operations/{operationId} and do NOT re-POST, which risks a second appointment. `idempotencyKey` is optional and exists for retries: reusing a key MUST repeat the identical request — a different body under a used key is refused with `SCHEDULING_IDEMPOTENCY_MISMATCH` (409) and books nothing. Booking with a `holdId` REQUIRES the same `X-Mediflo-Scheduling-Session` value you created the hold with: a hold belongs to the request that made it, so without the header this request is a different owner and the booking answers `SLOT_TAKEN` on the slot you are holding. Booking straight from a `slotToken` needs no hold and no header. Required scope: `scheduling.book`.
Hold a slot for a few minutes POST
A hold belongs to the REQUEST that created it, and only the same owner can book it or release it. Send `X-Mediflo-Scheduling-Session` and repeat the SAME value on the POST /scheduling/appointments that consumes this hold and on DELETE /scheduling/holds/{holdId} — without the header each request is its own owner, so the hold you just created can neither be booked nor released and simply expires. Required scope: `scheduling.book`.