API Docs
Dashboard

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.

Keep it secret. Treat an API key like a password. It grants full access to your business's data. If a key leaks, delete it and create a new one.

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 — page and per_page on list endpoints.
  • Rate limits — default 120 requests/minute.

When you're ready, browse the full API reference.