For the complete documentation index, see llms.txt. This page is also available as Markdown.

Bookings

post

Create many bookings at once, optionally tied together as a block booking. Supports per-row override (void/checkout an existing live booking on the same room).

Body
sitestringRequired
contract_startstringRequired
contract_endstringOptional
flagsstring[]Optional
notesstringOptional
Responses
200

Default Response

No content

post/bookings/bulk
POST /bookings/bulk HTTP/1.1
Host: api.kitehouse.co.uk
Content-Type: application/json
Accept: */*
Content-Length: 304

{
  "site": "text",
  "contract_start": "text",
  "contract_end": "text",
  "flags": [
    "text"
  ],
  "notes": "text",
  "block": {
    "name": "text",
    "notes": "text"
  },
  "assignments": [
    {
      "person_id": "text",
      "location_id": "text",
      "additional_people": [
        "text"
      ],
      "override": {
        "conflict_booking_id": "text",
        "action": "void",
        "cancellation_code": "text"
      }
    }
  ]
}
200

Default Response

No content

get

List bookings for a site.

Query parameters
sitestringRequired
personstringOptional
locationstringOptional
statusstringOptional
block_bookingstringOptional
qstringOptional
includestringOptional
limitnumberOptional
skipnumberOptional
sortstring · enumOptionalPossible values:
Responses
200

Default Response

No content

get/bookings
GET /bookings?site=text HTTP/1.1
Host: api.kitehouse.co.uk
Accept: */*
200

Default Response

No content

post

Create a booking.

Body
sitestringRequired
lead_personstringRequired
additional_peoplestring[]Optional
locationstringRequired
statusstring · enumOptionalPossible values:
contract_startstringOptional
contract_endstringOptional
vehicle_registrationstringOptional
parking_expiry_atstringOptional
departure_slot_atstringOptional
flagsstring[]Optional
notesstringOptional
block_bookingstringOptional
Responses
200

Default Response

No content

post/bookings
POST /bookings HTTP/1.1
Host: api.kitehouse.co.uk
Content-Type: application/json
Accept: */*
Content-Length: 375

{
  "site": "text",
  "lead_person": "text",
  "additional_people": [
    "text"
  ],
  "location": "text",
  "status": "checked_in",
  "contract_start": "text",
  "contract_end": "text",
  "vehicle_registration": "text",
  "parking_expiry_at": "text",
  "departure_slot_at": "text",
  "flags": [
    "text"
  ],
  "notes": "text",
  "block_booking": "text",
  "override": {
    "conflict_booking_id": "text",
    "action": "void",
    "cancellation_code": "text"
  }
}
200

Default Response

No content

get

Retrieve a single booking.

Path parameters
bookingIdstringRequired
Query parameters
sitestringRequired
includestringOptional
Responses
200

Default Response

No content

get/bookings/{bookingId}
GET /bookings/{bookingId}?site=text HTTP/1.1
Host: api.kitehouse.co.uk
Accept: */*
200

Default Response

No content

patch

Update a booking (metadata only — use /transitions to change status).

Path parameters
bookingIdstringRequired
Body
sitestringRequired
lead_personstringOptional
additional_peoplestring[]Optional
locationstringOptional
contract_startstring · nullableOptional
contract_endstring · nullableOptional
vehicle_registrationstring · nullableOptional
parking_expiry_atstring · nullableOptional
departure_slot_atstring · nullableOptional
flagsstring[]Optional
notesstring · nullableOptional
Responses
200

Default Response

No content

patch/bookings/{bookingId}
PATCH /bookings/{bookingId} HTTP/1.1
Host: api.kitehouse.co.uk
Content-Type: application/json
Accept: */*
Content-Length: 233

{
  "site": "text",
  "lead_person": "text",
  "additional_people": [
    "text"
  ],
  "location": "text",
  "contract_start": null,
  "contract_end": null,
  "vehicle_registration": null,
  "parking_expiry_at": null,
  "departure_slot_at": null,
  "flags": [
    "text"
  ],
  "notes": null
}
200

Default Response

No content

get

Export bookings as CSV.

Query parameters
sitestringRequired
statusstringOptional
sort_bystring · enumOptionalPossible values:
Responses
200

Default Response

No content

get/bookings/export
GET /bookings/export?site=text HTTP/1.1
Host: api.kitehouse.co.uk
Accept: */*
200

Default Response

No content

post

Preview a CSV import: resolves people, locations, status inference and conflicts without writing.

Body
sitestringRequired
Responses
200

Default Response

No content

post/bookings/import/preview
POST /bookings/import/preview HTTP/1.1
Host: api.kitehouse.co.uk
Content-Type: application/json
Accept: */*
Content-Length: 315

{
  "site": "text",
  "rows": [
    {
      "row_index": 1,
      "values": {
        "student_id": "text",
        "first_name": "text",
        "last_name": "text",
        "email": "text",
        "room": "text",
        "contract_start": "text",
        "contract_end": "text",
        "vehicle_registration": "text",
        "parking_expiry": "text",
        "departure_slot": "text",
        "notes": "text",
        "ANY_ADDITIONAL_PROPERTY": "anything"
      }
    }
  ]
}
200

Default Response

No content

post

Commit a previously-previewed CSV import with user decisions applied.

Body
sitestringRequired
idempotency_keystringRequired
Responses
200

Default Response

No content

post/bookings/import/commit
POST /bookings/import/commit HTTP/1.1
Host: api.kitehouse.co.uk
Content-Type: application/json
Accept: */*
Content-Length: 395

{
  "site": "text",
  "idempotency_key": "text",
  "rows": [
    {
      "row_index": 1,
      "values": {
        "student_id": "text",
        "first_name": "text",
        "last_name": "text",
        "email": "text",
        "room": "text",
        "contract_start": "text",
        "contract_end": "text",
        "vehicle_registration": "text",
        "parking_expiry": "text",
        "departure_slot": "text",
        "notes": "text",
        "ANY_ADDITIONAL_PROPERTY": "anything"
      }
    }
  ],
  "resolutions": [
    {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    }
  ]
}
200

Default Response

No content

post

Record a state transition / transaction on a booking.

Path parameters
bookingIdstringRequired
Body
sitestringRequired
typestring · enumRequiredPossible values:
occurred_atstringOptional
notesstringOptional
cancellation_codestringOptional
cancellation_reasonstringOptional
Responses
200

Default Response

No content

post/bookings/{bookingId}/transitions
POST /bookings/{bookingId}/transitions HTTP/1.1
Host: api.kitehouse.co.uk
Content-Type: application/json
Accept: */*
Content-Length: 125

{
  "site": "text",
  "type": "check_in",
  "occurred_at": "text",
  "notes": "text",
  "cancellation_code": "text",
  "cancellation_reason": "text"
}
200

Default Response

No content

get

List all transactions for a booking.

Path parameters
bookingIdstringRequired
Query parameters
sitestringRequired
Responses
200

Default Response

No content

get/bookings/{bookingId}/transactions
GET /bookings/{bookingId}/transactions?site=text HTTP/1.1
Host: api.kitehouse.co.uk
Accept: */*
200

Default Response

No content

Last updated

Was this helpful?