GET/api/public/v1/listinglisting:read
Your listing as clients see it — name, city, status, verification, rating and headline price.
Response
{
"data": {
"id": "6f1c…", "name": "Nuru Counselling", "type": "therapist",
"headline": "Trauma-informed therapy in Nairobi",
"city": "Nairobi", "status": "approved", "verified": true,
"rating": 4.8, "review_count": 21, "price_per_session": 3500,
"specialties": ["Anxiety", "Trauma"],
"languages": ["English", "Kiswahili"],
"session_modes": ["in_person", "online"]
}
}GET/api/public/v1/servicesservices:read
Every session type on your listing, with price in KES and length in minutes.
Response
{
"data": [
{
"id": "b2a9…", "name": "Individual therapy (50 min)",
"description": "One-to-one session.", "price": 3500,
"duration_minutes": 50, "category": "therapy", "is_active": true
}
]
}GET/api/public/v1/availabilityavailability:read
Your weekly opening hours plus any current or future blocked periods, so an external diary can mirror them.
Response
{
"data": {
"hours": [
{ "id": "…", "day_of_week": 1, "start_time": "09:00", "end_time": "17:00" }
],
"blocks": [
{ "id": "…", "starts_at": "2026-10-02T06:00:00Z",
"ends_at": "2026-10-02T12:00:00Z", "reason": "Away" }
]
}
}GET/api/public/v1/bookingsbookings:read
Your bookings, earliest appointment first. Filter with from, to, status and limit (default 50, maximum 200).
Request
GET /api/public/v1/bookings?from=2026-09-01T00:00:00Z&status=confirmed&limit=100
Response
{
"data": [
{
"id": "d41f…", "listing_id": "6f1c…",
"service": { "id": "b2a9…", "name": "Individual therapy (50 min)",
"duration_minutes": 50 },
"scheduled_at": "2026-09-24T11:00:00Z",
"status": "confirmed", "payment_status": "paid",
"amount": 3500, "currency": "KES",
"session_mode": "online", "notes": null,
"client": { "name": "A. Wanjiru", "phone": "+2547…",
"email": "client@example.com" },
"created_at": "2026-09-20T08:14:00Z"
}
]
}GET/api/public/v1/bookings/{id}bookings:read
A single booking on your listing. Returns 404 if the booking belongs to someone else.
Response
{ "data": { "id": "d41f…", "status": "confirmed", … } }POST/api/public/v1/bookings/{id}/statusbookings:write
Move a visit through its lifecycle: pending, confirmed, completed or cancelled. Money, payment state and client ownership are never writable.
Request
POST /api/public/v1/bookings/d41f…/status
Content-Type: application/json
{ "status": "completed" }Response
{ "data": { "id": "d41f…", "status": "completed", … } }