Bookings

Let customers book and pay for appointments: services, availability, deposits and reminders.

Set up services, staff, availability and the booking page’s policies; customers book on your page and pay in full, a deposit, or later. Your systems can read and manage appointments. The SDKs do not wrap these endpoints yet: call them over HTTP with your key.

Keys and scopes

A secret key, or a restricted key with the bookings scope.

Add a service and publish the page

bash
curl -X POST https://api.watenga.africa/v1/merchant/bookings/services \
  -H "Authorization: Bearer $WATENGA_SECRET_KEY" \
  -H "Watenga-Version: 2026-10-29" \
  -H "Content-Type: application/json" \
  -d '{"name":"Haircut","duration_minutes":45,"price":"20.00","payment_policy":"deposit","deposit_percent":30}'

curl -X POST https://api.watenga.africa/v1/merchant/bookings/publish \
  -H "Authorization: Bearer $WATENGA_SECRET_KEY" \
  -H "Watenga-Version: 2026-10-29"

Read and manage appointments

Reschedule moves an appointment to another offered slot; complete and no-show close it after it started.

bash
curl https://api.watenga.africa/v1/merchant/bookings/appointments?status=confirmed \
  -H "Authorization: Bearer $WATENGA_SECRET_KEY" \
  -H "Watenga-Version: 2026-10-29"

curl -X POST https://api.watenga.africa/v1/merchant/bookings/appointments/{id}/cancel \
  -H "Authorization: Bearer $WATENGA_SECRET_KEY" \
  -H "Watenga-Version: 2026-10-29" \
  -H "Content-Type: application/json" \
  -d '{}'

Webhook events

EventWhen
booking.confirmedA booking was confirmed (and paid as the policy asks)
booking.rescheduledMoved to another time
booking.cancelledCancelled
booking.completedMarked completed
booking.no-showMarked as a no-show

Each event carries the object in data.object; verify the signature first (Webhooks).

Test it

Use a test secret key (sk_test_…): it never moves money. Pay with the test cards and wallet numbers, and receive the webhooks on your machine with watenga listen --forward-to http://localhost:3000/webhooks (CLI).