Quickstart
Go from zero to your first booking in a few minutes.
1. Create an API key
Sign in to your dashboard and open Settings → Integration. Give the key a label (for example, Production server) and create it. Copy the token — you'll send it with every request.
2. Make an authenticated request
Every request sends the key in the Authorization header. List your
products to confirm the key works:
Request
curl https://app.appointment.dev/api/v1/products \
-H "Authorization: Bearer YOUR_API_KEY"
3. Check availability
Find open slots for a product on a specific day:
Each slot includes a datetime in business time — pass that exact value
as booking_date when you create the booking.
Request
curl "https://app.appointment.dev/api/v1/products/42/availability?\
date=2026-08-01&timezone=Europe/Dublin" \
-H "Authorization: Bearer YOUR_API_KEY"
4. Create a booking
Pricing, VAT and any coupon are calculated server-side. API-created bookings default
to confirmed. The response contains the created booking, including its
totals and attendance_code.
curl -X POST https://app.appointment.dev/api/v1/bookings \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_id": 42,
"customer_name": "Ada Lovelace",
"customer_email": "[email protected]",
"booking_date": "2026-08-01 14:30:00"
}'
const res = await fetch(
"https://app.appointment.dev/api/v1/bookings",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
product_id: 42,
customer_name: "Ada Lovelace",
customer_email: "[email protected]",
booking_date: "2026-08-01 14:30:00",
}),
},
);
const booking = await res.json();
5. Manage the booking
Update its status, or cancel it:
Request
# Mark completed
curl -X PATCH https://app.appointment.dev/api/v1/bookings/1001 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "status": "completed" }'
# Cancel
curl -X POST https://app.appointment.dev/api/v1/bookings/1001/cancel \
-H "Authorization: Bearer YOUR_API_KEY"
Conventions worth knowing
- Authentication — Bearer keys, one per integration.
- Errors — a single error envelope and a small set of error types.
- Pagination —
pageandper_pageon list endpoints. - Rate limits — default 120 requests/minute.
When you're ready, browse the full API reference.