API reference/POST /v1/bookings/{hold_id}/confirm

POST /v1/bookings/{hold_id}/confirm

requires akidempotentP99 ~184 ms

Confirm a hold, promoting it to a committed booking.

Request


POST /v1/bookings/{hold_id}/confirm HTTP/1.1
Authorization: Bearer ak_01HX7QQM…
Content-Type: application/json

{
  "start": "2026-06-01T14:00:00Z",
  "end": "2026-06-01T14:00:00Z",
  "meeting_class": "recruiting_interview",
  "title": "…"
}
startreq
string
endreq
string
meeting_classreq
string
title
string
attendees
array

Response


Returns 200 OK with the response body below. Every successful arbitration also stamps an audit_row_id you can query against audit log.

200 OK · example

HTTP/1.1 200 OK
Content-Type: application/json

{
  "booking_id":     "bk_9f2a1c…",
  "state":          "committed",
  "audit_row_id":   "ar_7e4b3d…",
  "side_effects": [
    { "kind": "google.create", "status": "ok", "latency_ms": 412 }
  ]
}

Errors


CodeDescription
400Validation failed — body is malformed or missing required fields.
401Missing or invalid API key. Send the raw key as a Bearer token in the Authorization header.
403Agent does not hold the permission scope required for this call (e.g. preempt on a higher-priority class).
404Calendar owner or booking id not found.
409Conflict — the requested slot was already committed at higher priority. Inspect alternatives[] in the response body.
410Default Response
422Engine refused the request — a hard rule (working hours, daily limit, sacred meeting) fired. reason_code names the rule.