API reference
Appointments
Visits, calls and fittings. Appointments created through the API are marked with source "api".
Endpoints
GET
/api/v1/appointmentsList, newest firstPOST
/api/v1/appointmentsCreate · write keyGET
/api/v1/appointments/{id}Get onePATCH
/api/v1/appointments/{id}Change · write keyDELETE
/api/v1/appointments/{id}Delete · write key · owners, admins, managersFields
Every record also has object = "appointment".
| Field | Type | Description |
|---|---|---|
idread only | uuid | Unique ID. |
brand_idrequired on create set on create only | uuid | The brand this belongs to (see GET /brands). Required when creating; cannot be changed. |
client_id | uuid | The client it belongs to (optional). |
titlerequired on create | string, max 200 | What the appointment is. |
starts_atrequired on create | date-time | Start, ISO 8601 with time zone. |
ends_at | date-time | End, ISO 8601 with time zone. |
status | one of: active, cancelled, completed, no_show | Default: active. |
sourceread only | string | Where it came from: quilo, calendly, google or api. |
created_atread only | date-time | When it was created (UTC, ISO 8601). |
List filters
Add to GET /api/v1/appointments as query parameters. Also limit (1–200, default 50) and cursor. See Pagination.
| Parameter | Type | Meaning |
|---|---|---|
brand_id | uuid | Only this brand. |
client_id | uuid | Only this client. |
starts_after | date-time | Starts at or after this time. |
starts_before | date-time | Starts before this time. |
status | one of: active, cancelled, completed, no_show | Only this status. |
List
Terminal
curl "$QUILO_URL/api/v1/appointments?limit=20&status=active" \
-H "Authorization: Bearer $QUILO_API_KEY"JSON
{
"object": "list",
"data": [
{
"object": "appointment",
"id": "6f1c2a90-3b4d-4e5f-8a7b-9c0d1e2f3a4b",
"brand_id": "0b7e9a52-1c3d-4f6e-9a8b-7c6d5e4f3a2b",
"client_id": "5d2c1b0a-9e8f-4a7b-8c6d-5e4f3a2b1c0d",
"title": "Ring fitting",
"starts_at": "2026-10-20T14:00:00+02:00",
"ends_at": "2026-10-20T14:45:00+02:00",
"status": "active",
"source": null,
"created_at": "2026-10-17T09:30:00Z"
}
],
"has_more": false,
"next_cursor": null
}Create
Answers 201 Created with the new appointment. Send an Idempotency-Key to retry safely. Quilo sets source = "api".
Terminal
curl -X POST "$QUILO_URL/api/v1/appointments" \
-H "Authorization: Bearer $QUILO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: my-unique-id-123" \
-d '{
"brand_id": "0b7e9a52-1c3d-4f6e-9a8b-7c6d5e4f3a2b",
"client_id": "5d2c1b0a-9e8f-4a7b-8c6d-5e4f3a2b1c0d",
"title": "Ring fitting",
"starts_at": "2026-10-20T14:00:00+02:00",
"ends_at": "2026-10-20T14:45:00+02:00"
}'Get one
Terminal
curl "$QUILO_URL/api/v1/appointments/ID" -H "Authorization: Bearer $QUILO_API_KEY"JSON
{
"object": "appointment",
"id": "6f1c2a90-3b4d-4e5f-8a7b-9c0d1e2f3a4b",
"brand_id": "0b7e9a52-1c3d-4f6e-9a8b-7c6d5e4f3a2b",
"client_id": "5d2c1b0a-9e8f-4a7b-8c6d-5e4f3a2b1c0d",
"title": "Ring fitting",
"starts_at": "2026-10-20T14:00:00+02:00",
"ends_at": "2026-10-20T14:45:00+02:00",
"status": "active",
"source": null,
"created_at": "2026-10-17T09:30:00Z"
}Unknown IDs, IDs from other companies and records you cannot access all answer 404 not_found.
Change
Send only the fields to change. brand_id cannot be changed after creation.
Terminal
curl -X PATCH "$QUILO_URL/api/v1/appointments/ID" \
-H "Authorization: Bearer $QUILO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Ring fitting"}'Delete
Owners, admins and managers only, with a Read and write key. Deleting cannot be undone.
Terminal
curl -X DELETE "$QUILO_URL/api/v1/appointments/ID" -H "Authorization: Bearer $QUILO_API_KEY"JSON
{
"object": "appointment",
"id": "6f1c2a90-3b4d-4e5f-8a7b-9c0d1e2f3a4b",
"deleted": true
}