{"openapi":"3.1.0","info":{"title":"Cals API","version":"1.0.0","description":"Public agent API (no key; read /agents.md for guest verification) and the REST API v1 for workspace integrations (bearer API key; read /developers.md). v1 is server-to-server and sends no CORS headers."},"servers":[{"url":"https://cals.to"}],"tags":[{"name":"Public agent API"},{"name":"API v1","description":"Authenticate with Authorization: Bearer cals_live_…"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"cals_live_<32 base62 characters>","description":"Workspace API key from Dashboard → Developers. Scopes: availability:read, bookings:read, bookings:write, event_types:read, event_types:write. 120 requests/minute per key."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"EventType":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"duration":{"type":"integer"},"buffer":{"type":"integer"},"notice":{"type":"integer"},"horizon":{"type":"integer"},"mode":{"enum":["individual","round_robin","collective"]},"location":{"enum":["google_meet","microsoft_teams","in_person"]},"questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"required":{"type":"boolean"}}}},"hosts":{"type":"array","items":{"type":"string"}},"active":{"type":"boolean"},"booking_url":{"type":"string","format":"uri"},"created_at":{"type":"string","format":"date-time"}}},"Booking":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"event_type_id":{"type":"string","format":"uuid"},"title":{"type":"string"},"status":{"enum":["pending","confirmed","rescheduling","cancelling","cancelled","recovering","failed"]},"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"},"timezone":{"type":"string"},"attendee":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"}}},"answers":{"type":"object","additionalProperties":{"type":"string"}},"location":{"type":["string","null"]},"meeting_url":{"type":["string","null"]},"replaces":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"}}},"Slot":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"},"local_start":{"type":"string","description":"YYYY-MM-DD HH:mm in the requested timezone"}}}}},"paths":{"/api/public/agent":{"post":{"operationId":"callPublicTool","tags":["Public agent API"],"summary":"Discover meetings and request verified bookings","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["tool","input"],"properties":{"tool":{"const":"get_profile"},"input":{"type":"object","properties":{"profile":{"type":"string","minLength":3,"maxLength":60,"pattern":"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},"after":{"type":"string","minLength":3,"maxLength":60,"pattern":"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"}},"required":["profile"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},{"type":"object","additionalProperties":false,"required":["tool","input"],"properties":{"tool":{"const":"get_public_calendar"},"input":{"type":"object","properties":{"profile":{"type":"string","minLength":3,"maxLength":60,"pattern":"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},"event":{"type":"string","minLength":3,"maxLength":60,"pattern":"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}},"required":["profile","event","from","to"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},{"type":"object","additionalProperties":false,"required":["tool","input"],"properties":{"tool":{"const":"request_booking"},"input":{"type":"object","properties":{"profile":{"type":"string","minLength":3,"maxLength":60,"pattern":"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},"event":{"type":"string","minLength":3,"maxLength":60,"pattern":"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},"start":{"type":"string","format":"date-time"},"name":{"type":"string","minLength":2,"maxLength":100},"email":{"type":"string","format":"email","maxLength":254},"timezone":{"type":"string","maxLength":100},"answers":{"type":"object","additionalProperties":{"type":"string","maxLength":2000}},"requestId":{"type":"string","format":"uuid"},"requestToken":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["profile","event","start","name","email","timezone","answers","requestId","requestToken"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},{"type":"object","additionalProperties":false,"required":["tool","input"],"properties":{"tool":{"const":"get_booking_status"},"input":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid"},"requestToken":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["requestId","requestToken"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},{"type":"object","additionalProperties":false,"required":["tool","input"],"properties":{"tool":{"const":"complete_booking"},"input":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid"},"requestToken":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["requestId","requestToken"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}]}}}},"responses":{"200":{"description":"Tool result; check booking.status before claiming confirmation."},"400":{"description":"Invalid input"},"404":{"description":"Profile or request unavailable"},"409":{"description":"Verification, availability or request conflict"},"429":{"description":"Rate limited. Honor Retry-After.","headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"Required service unavailable; no availability is invented."}}}},"/api/v1/event-types":{"get":{"security":[{"bearerAuth":[]}],"x-required-scope":"event_types:read","tags":["API v1"],"operationId":"listEventTypes","summary":"List meeting types","parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"A page of meeting types","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventType"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input; the message names the first bad field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, malformed or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope (insufficient_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; honor Retry-After (seconds)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}},"post":{"security":[{"bearerAuth":[]}],"x-required-scope":"event_types:write","tags":["API v1"],"operationId":"createEventType","summary":"Create a meeting type","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":2,"maxLength":100},"slug":{"type":"string","minLength":3,"maxLength":60,"pattern":"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},"description":{"type":"string","maxLength":2000},"duration":{"type":"integer","minimum":15,"maximum":120},"buffer":{"type":"integer","minimum":0,"maximum":60},"notice":{"type":"integer","minimum":0,"maximum":10080},"horizon":{"type":"integer","minimum":1,"maximum":90},"mode":{"type":"string","enum":["individual","round_robin","collective"]},"location":{"type":"string","enum":["google_meet","microsoft_teams","in_person"]},"hosts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"minItems":1,"maxItems":20},"questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":3,"maxLength":60,"pattern":"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},"label":{"type":"string","minLength":1,"maxLength":160},"required":{"type":"boolean"}},"required":["id","label","required"],"additionalProperties":false},"maxItems":8},"price":{"type":"integer","minimum":0,"maximum":10000000},"currency":{"type":"string","enum":["usd","eur","gbp","inr","aud","cad","sgd"]},"asyncOffer":{"type":"boolean"},"waitlist":{"type":"boolean"},"deposit":{"type":"integer","minimum":0,"maximum":10000000},"depositFirstTime":{"type":"boolean"},"textReminders":{"type":"object","properties":{"channels":{"type":"array","items":{"type":"string","enum":["sms","whatsapp"]},"maxItems":2},"offsets":{"type":"array","items":{"type":"integer"},"maxItems":3}},"required":["channels","offsets"],"additionalProperties":false},"active":{"type":"boolean"}},"required":["title","slug","duration"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/EventType"}}}}}},"400":{"description":"Invalid input; the message names the first bad field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, malformed or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The workspace plan does not include this","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope (insufficient_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict: slot taken or expired, slug taken, calendar required, or idempotency mismatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Content-Type must be application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; honor Retry-After (seconds)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/v1/event-types/{id}":{"get":{"security":[{"bearerAuth":[]}],"x-required-scope":"event_types:read","tags":["API v1"],"operationId":"getEventType","summary":"Get a meeting type","parameters":[{"name":"id","in":"path","required":true,"description":"Meeting type ID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The meeting type","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/EventType"}}}}}},"401":{"description":"Missing, malformed or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope (insufficient_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found in this workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; honor Retry-After (seconds)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}},"patch":{"security":[{"bearerAuth":[]}],"x-required-scope":"event_types:write","tags":["API v1"],"operationId":"updateEventType","summary":"Update a meeting type (send only changed fields)","parameters":[{"name":"id","in":"path","required":true,"description":"Meeting type ID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":2,"maxLength":100},"slug":{"type":"string","minLength":3,"maxLength":60,"pattern":"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},"description":{"type":"string","maxLength":2000},"duration":{"type":"integer","minimum":15,"maximum":120},"buffer":{"type":"integer","minimum":0,"maximum":60},"notice":{"type":"integer","minimum":0,"maximum":10080},"horizon":{"type":"integer","minimum":1,"maximum":90},"mode":{"type":"string","enum":["individual","round_robin","collective"]},"location":{"type":"string","enum":["google_meet","microsoft_teams","in_person"]},"hosts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"minItems":1,"maxItems":20},"questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":3,"maxLength":60,"pattern":"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},"label":{"type":"string","minLength":1,"maxLength":160},"required":{"type":"boolean"}},"required":["id","label","required"],"additionalProperties":false},"maxItems":8},"price":{"type":"integer","minimum":0,"maximum":10000000},"currency":{"type":"string","enum":["usd","eur","gbp","inr","aud","cad","sgd"]},"asyncOffer":{"type":"boolean"},"waitlist":{"type":"boolean"},"deposit":{"type":"integer","minimum":0,"maximum":10000000},"depositFirstTime":{"type":"boolean"},"textReminders":{"type":"object","properties":{"channels":{"type":"array","items":{"type":"string","enum":["sms","whatsapp"]},"maxItems":2},"offsets":{"type":"array","items":{"type":"integer"},"maxItems":3}},"required":["channels","offsets"],"additionalProperties":false},"active":{"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/EventType"}}}}}},"400":{"description":"Invalid input; the message names the first bad field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, malformed or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The workspace plan does not include this","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope (insufficient_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found in this workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict: slot taken or expired, slug taken, calendar required, or idempotency mismatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Content-Type must be application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; honor Retry-After (seconds)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/v1/availability":{"get":{"security":[{"bearerAuth":[]}],"x-required-scope":"availability:read","tags":["API v1"],"operationId":"getAvailability","summary":"Open start times for a published meeting type (range up to 7 days)","parameters":[{"name":"event_type_id","in":"query","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"timezone","in":"query","required":false,"schema":{"type":"string","maxLength":100}}],"responses":{"200":{"description":"Open slots","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Slot"}},"next_cursor":{"type":"null"},"event_type_id":{"type":"string","format":"uuid"},"timezone":{"type":"string"}}}}}},"400":{"description":"Invalid input; the message names the first bad field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, malformed or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The workspace plan does not include this","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope (insufficient_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found in this workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict: slot taken or expired, slug taken, calendar required, or idempotency mismatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; honor Retry-After (seconds)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"A required dependency is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/bookings":{"get":{"security":[{"bearerAuth":[]}],"x-required-scope":"bookings:read","tags":["API v1"],"operationId":"listBookings","summary":"List bookings ordered by start time","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","confirmed","rescheduling","cancelling","cancelled","recovering","failed"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"A page of bookings","content":{"application/json":{"schema":{"type":"object","required":["data","next_cursor"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Booking"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Invalid input; the message names the first bad field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, malformed or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope (insufficient_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; honor Retry-After (seconds)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}},"post":{"security":[{"bearerAuth":[]}],"x-required-scope":"bookings:write","tags":["API v1"],"operationId":"createBooking","summary":"Book a guest into an open slot","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Caller-chosen key (1-255 printable ASCII). Retries with the same key and body return the original booking; a different body returns 409. Remembered for 24 hours per workspace.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"event_type_id":{"type":"string","format":"uuid"},"start":{"type":"string","format":"date-time"},"name":{"type":"string","minLength":2,"maxLength":100},"email":{"type":"string","format":"email","maxLength":254},"timezone":{"type":"string","maxLength":100},"answers":{"type":"object","additionalProperties":{"type":"string","maxLength":2000}}},"required":["event_type_id","start","name","email","timezone"],"additionalProperties":false}}}},"responses":{"200":{"description":"Idempotent replay of an earlier identical request (Idempotent-Replayed: true)","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Booking"}}}}}},"202":{"description":"Accepted; status is pending until the calendar event is written","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Booking"}}}}}},"400":{"description":"Invalid input; the message names the first bad field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, malformed or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The workspace plan does not include this","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope (insufficient_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found in this workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict: slot taken or expired, slug taken, calendar required, or idempotency mismatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Content-Type must be application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; honor Retry-After (seconds)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"A required dependency is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/bookings/{id}":{"get":{"security":[{"bearerAuth":[]}],"x-required-scope":"bookings:read","tags":["API v1"],"operationId":"getBooking","summary":"Get a booking","parameters":[{"name":"id","in":"path","required":true,"description":"Booking ID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The booking","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Booking"}}}}}},"401":{"description":"Missing, malformed or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope (insufficient_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found in this workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; honor Retry-After (seconds)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/v1/bookings/{id}/cancel":{"post":{"security":[{"bearerAuth":[]}],"x-required-scope":"bookings:write","tags":["API v1"],"operationId":"cancelBooking","summary":"Cancel an upcoming confirmed booking (safe to repeat)","parameters":[{"name":"id","in":"path","required":true,"description":"Booking ID","schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Cancellation queued; status is cancelling or cancelled","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Booking"}}}}}},"401":{"description":"Missing, malformed or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope (insufficient_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found in this workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict: slot taken or expired, slug taken, calendar required, or idempotency mismatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; honor Retry-After (seconds)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/v1/bookings/{id}/reschedule":{"post":{"security":[{"bearerAuth":[]}],"x-required-scope":"bookings:write","tags":["API v1"],"operationId":"rescheduleBooking","summary":"Move an upcoming confirmed booking to a new open time","parameters":[{"name":"id","in":"path","required":true,"description":"Booking ID","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Caller-chosen key (1-255 printable ASCII). Retries with the same key and body return the original booking; a different body returns 409. Remembered for 24 hours per workspace.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"type":"string","format":"date-time"}},"required":["start"],"additionalProperties":false}}}},"responses":{"200":{"description":"Idempotent replay","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Booking"}}}}}},"202":{"description":"The new booking (pending); the old one moves through rescheduling","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Booking"}}}}}},"400":{"description":"Invalid input; the message names the first bad field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, malformed or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The workspace plan does not include this","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope (insufficient_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found in this workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict: slot taken or expired, slug taken, calendar required, or idempotency mismatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Content-Type must be application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; honor Retry-After (seconds)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"A required dependency is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}