Bookings
Services, free times and booking, for salons, clinics and anything booked.
Shops with the Services add-on take bookings. GET /shop says so with sellsServices: true.
List the services
GET/v1/storefront/services{
"firstDay": "2026-11-02",
"lastDay": "2026-12-01",
"payOnline": false,
"items": [
{
"id": "756eb9a8-46e3-423c-8f2b-5979029ec77e",
"name": "Haircut",
"sellingPrice": 5000,
"priceMode": "fixed",
"durationMinutes": 45,
"places": ["shop"],
"askFirst": null,
"options": [
{ "variantId": "ec4a16a4-…", "name": "Short", "imageUrl": null, "sellingPrice": 5000 },
{ "variantId": "39fab80b-…", "name": "Long", "imageUrl": null, "sellingPrice": 6000 }
],
"priceTypes": [
{ "id": "cb5fee59-…", "name": "Adult" },
{ "id": "9badb858-…", "name": "Kids" }
],
"branches": [{ "id": "42bf0908-…", "name": "Osu Store", "workingHours": [] }],
"addonGroups": []
}
]
}Bookings are open from firstDay to lastDay (the next 30 days). places says where the service happens: shop, visit (at the customer's) or online. askFirst, when set, is a question the customer must answer.
Find a free time
GET/v1/storefront/services/timesProp
Type
{
"branchId": "42bf0908-…",
"date": "2026-11-03",
"durationMinutes": 45,
"slots": ["08:00", "08:45", "09:30", "11:00"],
"times": [
{ "time": "08:00", "booked": false },
{ "time": "10:15", "booked": true }
]
}Offer the slots. times also shows the booked ones, to draw a full day.
Book
POST/v1/storefront/bookingscurl https://api.cashiar.app/v1/storefront/bookings \
-H "Authorization: Bearer pk_live_your_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 9d2e1f30-booking-1" \
-d '{
"customerName": "Esi Owusu",
"customerPhone": "+233 24 555 0123",
"branchId": "42bf0908-f715-4915-a58f-0e5dfe083268",
"date": "2026-11-03",
"startTime": "09:30",
"services": [
{
"serviceId": "756eb9a8-46e3-423c-8f2b-5979029ec77e",
"variantId": "ec4a16a4-f42d-434b-827e-882782074158",
"priceListId": "cb5fee59-7ee7-4d59-b567-506948182a42"
}
]
}'{ "number": "B-0042", "status": "confirmed", "payUrl": null }status is confirmed, or new when the shop confirms bookings itself (or the time was taken meanwhile). With payNow: true and services that ask for payment, payUrl is where the customer pays.
Several services at once
A booking can hold up to 10 services, done one after the other from startTime. Ask for free times with the first service and withServiceIds for the rest, so the slot is long enough for all of them.