Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

API Endpoints

All endpoints are relative to: https://api.busybook.co/rest/v1/

See Authentication for required headers.

GET /appointments?therapist_id=eq.{id}&order=date.asc

Query Parameters:

ParameterTypeDescription
dateeq.YYYY-MM-DDFilter by date
statusin.(scheduled,confirmed,completed)Filter by status
client_ideq.{uuid}Filter by client
selectid,date,start_time,...Select specific columns
orderdate.ascSort order
limitnumberMax results

Response:

[
{
"id": "uuid",
"date": "2026-04-03",
"start_time": "14:00",
"end_time": "15:00",
"status": "scheduled",
"client_id": "uuid",
"client_name": "Rebecca Martinez",
"service_id": "uuid",
"therapist_id": "uuid",
"notes": "Prefers firm pressure"
}
]
POST /appointments

Request Body:

{
"date": "2026-04-03",
"start_time": "14:00",
"end_time": "15:00",
"status": "scheduled",
"client_id": "uuid",
"client_name": "Rebecca Martinez",
"service_id": "uuid",
"therapist_id": "uuid"
}
PATCH /appointments?id=eq.{id}
DELETE /appointments?id=eq.{id}
GET /clients?therapist_id=eq.{id}&order=name.asc

Response:

[
{
"id": "uuid",
"name": "Rebecca Martinez",
"email": "rebecca@email.com",
"phone": "214-555-0123",
"status": "active",
"total_visits": 12,
"therapist_id": "uuid",
"created_at": "2025-10-15T10:00:00Z"
}
]
POST /clients
PATCH /clients?id=eq.{id}
GET /clients?name=ilike.*Rebecca*&therapist_id=eq.{id}
GET /sessions?client_id=eq.{id}&order=created_at.desc
POST /sessions

Request Body:

{
"client_id": "uuid",
"therapist_id": "uuid",
"appointment_id": "uuid",
"subjective": "Reports lower back tension",
"objective": "Significant muscle guarding in lumbar region",
"assessment": "Chronic tension pattern, improving",
"plan": "Continue biweekly treatment, focus on lumbar"
}
GET /service_menu?therapist_id=eq.{id}

Response:

[
{
"id": "uuid",
"name": "Swedish Massage",
"duration": 60,
"price": 120.00,
"therapist_id": "uuid"
}
]
GET /business_hours?therapist_id=eq.{id}

Response:

[
{
"id": "uuid",
"day_of_week": "monday",
"open_time": "09:00",
"close_time": "17:00",
"therapist_id": "uuid"
}
]
GET /expenses?therapist_id=eq.{id}&order=date.desc
POST /expenses

Request Body:

{
"date": "2026-03-29",
"amount": 85.00,
"category": "supplies",
"description": "Massage oil and sheets",
"vendor": "Massage Warehouse",
"therapist_id": "uuid"
}
GET /conversation_log?client_id=eq.{id}&order=created_at.desc&limit=50

BusyBook uses the PostgREST query syntax. Common operators:

OperatorExampleMeaning
eq?status=eq.activeEquals
neq?status=neq.cancelledNot equals
gt / gte?date=gte.2026-04-01Greater than (or equal)
lt / lte?date=lte.2026-04-30Less than (or equal)
in?status=in.(scheduled,confirmed)In list
ilike?name=ilike.*sarah*Case-insensitive pattern match
order?order=date.descSort results
limit?limit=10Limit results
select?select=id,name,emailSelect specific columns