Bewtee

Developer docs

API reference

Every endpoint of the Bewtee developer API, with parameters and examples.

On this page (9)
  1. Get the business
  2. List services
  3. List staff
  4. Get free time slots
  5. List bookings
  6. Create a booking
  7. Get a booking
  8. Cancel a booking
  9. The booking object

Every endpoint lives under the base URL and needs your API key:

https://api.bewtee.com/api/v1
Authorization: Bearer bw_live_YOUR_API_KEY

Responses use the envelope { "status": true, "message": "...", "data": ... }. Errors are described in Errors, rate limits and retries. The machine-readable description of this API is available as an OpenAPI file, which you can import into Postman, Insomnia and similar tools.

Method Path Purpose
GET /business The business profile and opening hours
GET /services Bookable services with prices and durations
GET /staff Staff members customers can book
GET /availability Free start times for a date and a set of services
GET /bookings List bookings
POST /bookings Create a booking
GET /bookings/{id} Fetch one booking
POST /bookings/{id}/cancel Cancel a booking

Get the business

GET /business

Profile, booking settings and opening hours of the business that owns the API key.

curl https://api.bewtee.com/api/v1/business \
  -H "Authorization: Bearer $BEWTEE_API_KEY"
{
  "status": true,
  "message": "OK",
  "data": {
    "id": 123,
    "name": "Glow Salon",
    "tag_line": "Hair and beauty studio",
    "description": null,
    "address": { "line_1": "12 MG Road", "line_2": null, "city": "Jaipur", "pin_code": "302001" },
    "profile_url": "https://bewtee.com/glow-salon-123",
    "timezone": "Asia/Kolkata",
    "currency": "INR",
    "auto_accept_bookings": true,
    "working_hours": [
      { "day": "monday", "is_closed": false, "opens_at": "10:00", "closes_at": "20:00" }
    ]
  }
}
Field Description
auto_accept_bookings When true, new bookings are confirmed immediately.
working_hours[].day monday to sunday.
working_hours[].opens_at, closes_at 24-hour HH:MM, or null.

List services

GET /services

Services customers can book: active services that have a price. Up to 1000 are returned.

curl https://api.bewtee.com/api/v1/services \
  -H "Authorization: Bearer $BEWTEE_API_KEY"
{
  "status": true,
  "message": "OK",
  "data": [
    {
      "id": 10,
      "name": "Haircut",
      "description": null,
      "category": { "id": 1, "name": "Hair" },
      "price": 500,
      "currency": "INR",
      "duration_minutes": 45,
      "gender": "unisex"
    }
  ]
}
Field Description
id Use this in service_ids when checking availability or booking.
price In rupees.
gender Who the service is for: male, female, unisex or null.

List staff

GET /staff

Active staff members that customers can book with. An empty list means the business does not offer a choice of staff.

curl https://api.bewtee.com/api/v1/staff \
  -H "Authorization: Bearer $BEWTEE_API_KEY"
{
  "status": true,
  "message": "OK",
  "data": [
    { "id": 7, "name": "Meera", "designation": "Stylist", "photo_url": null }
  ]
}

Get free time slots

GET /availability

Start times on one day at which the selected services can be booked. Slots are 15 minutes apart. A slot is listed only when a staff member is free for the whole booking, the business is open, and the time is not in the past.

Query parameter Required Description
date Yes YYYY-MM-DD, today or up to 180 days ahead.
service_ids[] Yes One to 20 service IDs. Repeat an ID to book it more than once.
staff_id No Only return times when this staff member is free.
curl -G https://api.bewtee.com/api/v1/availability \
  -H "Authorization: Bearer $BEWTEE_API_KEY" \
  --data-urlencode "date=2026-11-16" \
  --data-urlencode "service_ids[]=10"
{
  "status": true,
  "message": "OK",
  "data": {
    "date": "2026-11-16",
    "timezone": "Asia/Kolkata",
    "duration_minutes": 45,
    "is_closed": false,
    "slots": [
      { "time": "14:00", "end": "14:45", "available_staff_ids": [7] },
      { "time": "14:15", "end": "15:00", "available_staff_ids": [7] }
    ]
  }
}
Field Description
duration_minutes Total length of the selected services.
is_closed true when the business is closed that day.
slots[].available_staff_ids Staff free for the whole booking. Empty when the business has no bookable staff list.

Errors: 422 validation_failed when the date is out of range or a service cannot be booked.

List bookings

GET /bookings

Bookings of the business, newest first.

Query parameter Required Description
status No pending, accepted, rejected, cancelled, completed, no_show or expired.
date_from No Only bookings on or after this appointment date (YYYY-MM-DD).
date_to No Only bookings on or before this appointment date.
page No Page number, starting at 1.
per_page No 1 to 100. Default 25.
curl -G https://api.bewtee.com/api/v1/bookings \
  -H "Authorization: Bearer $BEWTEE_API_KEY" \
  --data-urlencode "status=accepted" \
  --data-urlencode "date_from=2026-11-16"
{
  "status": true,
  "message": "OK",
  "data": [ { "id": 9812, "status": "accepted", "date": "2026-11-16", "time": "14:00" } ],
  "meta": { "page": 1, "per_page": 25, "has_more": false }
}

Each item is a full booking object. When meta.has_more is true, request the next page.

Create a booking

POST /bookings

Books the services at the given time for a customer. The booking starts as pending and is accepted straight away when the business accepts bookings automatically. Payment is at the salon. The customer is matched by phone number, or created if new. See the booking lifecycle.

Header Required Description
Idempotency-Key No Any string up to 255 characters. Repeating a request with the same key returns the original booking instead of creating another.
Body field Required Description
date Yes YYYY-MM-DD, today or up to 180 days ahead.
time Yes 24-hour start time HH:MM, in the business timezone.
service_ids Yes One to 20 service IDs. Repeat an ID to book it more than once.
staff_id No Book with this staff member. Leave out to let Bewtee assign someone who is free.
customer.name Yes Up to 100 characters.
customer.phone Yes 10-digit Indian mobile number, without country code.
customer.email No Email address.
customer.gender No male, female or other.
curl https://api.bewtee.com/api/v1/bookings \
  -H "Authorization: Bearer $BEWTEE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-42" \
  -d '{
    "date": "2026-11-16",
    "time": "14:00",
    "service_ids": [10],
    "customer": { "name": "Asha Rao", "phone": "9876543210", "email": "[email protected]" }
  }'

The response is 201 Created with the booking object, or 200 OK with the original booking when the same Idempotency-Key was used before.

Status error.code Meaning
409 slot_unavailable The time is no longer free. Fetch availability again and offer another slot.
409 idempotency_conflict The Idempotency-Key was already used with different booking details.
422 validation_failed A field is missing or invalid. See errors.

Get a booking

GET /bookings/{id}

curl https://api.bewtee.com/api/v1/bookings/9812 \
  -H "Authorization: Bearer $BEWTEE_API_KEY"

Returns the booking object, or 404 not_found when no such booking exists for this business.

Cancel a booking

POST /bookings/{id}/cancel

Cancels a pending or accepted booking on behalf of the business and tells the customer.

Body field Required Description
reason No Up to 200 characters. Shown to the business and the customer.
curl https://api.bewtee.com/api/v1/bookings/9812/cancel \
  -H "Authorization: Bearer $BEWTEE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Customer asked to cancel" }'

Returns the cancelled booking object. Errors: 404 not_found, or 409 invalid_state when the booking is not pending or accepted.

The booking object

The same shape is used by every booking endpoint and inside webhook events.

{
  "id": 9812,
  "status": "accepted",
  "date": "2026-11-16",
  "time": "14:00",
  "starts_at": "2026-11-16T14:00:00+05:30",
  "ends_at": "2026-11-16T14:45:00+05:30",
  "duration_minutes": 45,
  "amount": { "subtotal": 500, "discount": 0, "total": 500, "currency": "INR" },
  "payment_method": "pay_at_salon",
  "payment_status": "pay_at_salon",
  "customer": { "id": 77, "name": "Asha Rao", "phone": "9876543210", "email": "[email protected]" },
  "services": [
    { "service_id": 10, "name": "Haircut", "price": 500, "duration_minutes": 45, "quantity": 1, "staff_id": 7 }
  ],
  "status_reason": null,
  "cancelled_by": null,
  "accept_deadline_at": null,
  "status_updated_at": "2026-11-16T14:02:11+05:30",
  "created_at": "2026-11-16T14:01:40+05:30"
}
Field Description
status pending, accepted, rejected, cancelled, completed, no_show or expired.
amount.total What the customer pays, in whole rupees.
services[].service_id null for one-off items the business added by hand.
cancelled_by customer, salon or null.
accept_deadline_at While pending, when the request expires if the business does not answer.

Ready to connect Bewtee?

Sign in to your Bewtee business dashboard and choose Developers. Everything there is free for Bewtee businesses.

New to Bewtee? See what the salon software does

Found something wrong? Report an error

Login

Use your mobile number to view and manage your bookings.

+91

Enter the code we sent to +91 on WhatsApp.