REST API
Build bookings into your own app
The Bewtee API lets your server read a business's services, staff and open time slots, and create or cancel bookings. It speaks plain JSON over HTTPS and is scoped to one business per API key.
- JSON over HTTPS
- 120 requests per minute
- Idempotent booking creation
Overview
A typical integration
-
Step 1
GET/services
Show what can be booked
-
Step 2
GET/availability
Offer times that are free
-
Step 3
POST/bookings
Book the chosen slot
-
Step 4
HOOKWebhooks
Hear when it is confirmed
Getting started
Base URL and authentication
All endpoints live under this base URL:
https://api.bewtee.com/api/v1
Create an API key in the Developers section of your business dashboard and send it as a bearer token on every request:
Authorization: Bearer bw_live_YOUR_API_KEY
Keep your key secret. API keys are for server-side use only. Never put a key in website JavaScript, a mobile app or a public repository. For a booking button on a website, use the booking widget instead.
Every response uses the same JSON envelope:
{
"status": true,
"message": "...",
"data": { }
}
Reference
Endpoints
-
GET /business
Business profile details for the key.
-
GET /services
Services the business offers, with prices.
-
GET /staff
Staff members who can be booked.
-
GET /availability
Open time slots. Query: date=YYYY-MM-DD, service_ids[], optional staff_id.
-
GET /bookings
List bookings.
-
POST /bookings
Create a booking. Body: date, time, service_ids, optional staff_id, customer {name, phone, email}.
-
GET /bookings/{id}
Fetch one booking.
-
POST /bookings/{id}/cancel
Cancel a booking.
Examples
Try it with curl
List services
curl https://api.bewtee.com/api/v1/services \
-H "Authorization: Bearer bw_live_YOUR_API_KEY" \
-H "Accept: application/json"
Check availability
Pass the date and the services the customer wants. Add staff_id to check one staff member.
curl -G https://api.bewtee.com/api/v1/availability \
-H "Authorization: Bearer bw_live_YOUR_API_KEY" \
-H "Accept: application/json" \
--data-urlencode "date=2026-11-15" \
--data-urlencode "service_ids[]=101"
Create a booking
A new booking starts as pending. It is confirmed automatically if the business auto-accepts bookings. Otherwise the business accepts or declines it. Send an optional Idempotency-Key header so a retried request does not create a second booking.
curl -X POST https://api.bewtee.com/api/v1/bookings \
-H "Authorization: Bearer bw_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Idempotency-Key: 6f1c2a9e-order-4821" \
-d '{
"date": "2026-11-15",
"time": "11:00",
"service_ids": [101],
"staff_id": 7,
"customer": {
"name": "Asha",
"phone": "98XXXXXXXX",
"email": "[email protected]"
}
}'
The response is the booking:
{
"status": true,
"message": "Booking created.",
"data": {
"id": 9812,
"status": "accepted",
"date": "2026-11-15",
"time": "11:00",
"amount": { "subtotal": 1200, "discount": 0, "total": 1200, "currency": "INR" },
"customer": { "id": 77, "name": "Asha", "phone": "98XXXXXXXX" },
"services": [
{ "service_id": 101, "name": "Haircut", "price": 1200, "duration_minutes": 45, "quantity": 1, "staff_id": 7 }
]
}
}
Limits
Limits and errors
120 requests per minute
Per API key. A 429 reply tells you how long to wait.
409 slot_unavailable
The time was taken. Fetch availability again and offer another slot.
422 validation_failed
A field is missing or wrong. The reply lists the fields.
To hear about booking changes without polling, use webhooks. Request and response fields, error codes and more examples are in the full API documentation.
Ready to connect Bewtee?
Everything is set up from the Developers section of your business dashboard. It is free for Bewtee businesses.
New to Bewtee? See what the salon software does