Skip to main content

App API and Webhooks

Connect booking data to custom systems with the Easy Appointment Booking API or real-time webhooks

Written by Ray M

The Easy Appointment Booking API and webhooks let you connect booking data to your own systems, dashboards, CRM, spreadsheets, or automation tools.

API access

The API is available on the Ultimate plan, and we switch it on for your store when you ask. In Easy Appointment Booking, go to Settings > Webhooks & API and click Request API access. Tell us in the chat what you are building and we will turn it on.

Once it is on, create your keys in the same place. A key is a bearer token that starts with srv_live_. You choose which permissions each key gets, and the full key is shown only once, so save it somewhere safe. Create a separate key for each integration, give it only the permissions that integration needs, and revoke it if it is ever exposed. Revoking takes effect immediately.

⚠️ Warning: Keys are server-side secrets. Never put one in browser code, a mobile app, a public repository, or your logs.

What you can do

Resource

What it covers

Bookings

List, read, create, update, reschedule, cancel, assign staff, send a reminder, and send a follow-up.

Events

List and read your services, their booking options, and their open slots. Create, update, and duplicate services.

Availability

List staff profiles and schedules, create a profile, and replace a schedule.

Waitlist

List and read entries, read waitlist counts, add and update an entry, and send an invitation when a time opens.

Locations

List and read your locations. Read-only.

Reports

Peak-hours report.

Me

Confirm which shop a key belongs to, its permissions, and the shop time zone.

Start with GET /api/public/v1/me. It confirms the key works and tells you which shop and permissions you are using. If that call fails, check the key before trying anything else.

Permissions

Each key carries only the permissions you tick when you create it:

  • Bookings: read, create, and change.

  • Events: read, and create or edit.

  • Availability: read, and create or replace.

  • Waitlist: read, and join or invite.

  • Locations: read.

  • Reports: read.

A call that needs a permission the key does not have is refused, and the error names the permission that is missing.

Browse the full reference

Two developer references are always current:

ℹ️ Note: Chat with Claude is a separate feature and does not use these keys. It is self-serve on Ultimate, it only reads your data, and you connect it from Settings > Marketing & analytics. See the "Connect Claude to Easy Appointment Booking" article.

Retry safely

Every write accepts an Idempotency-Key header, and creating a booking or a waitlist entry requires one. Use a new value for each new action, and reuse the same value only when retrying that same action. If a network error leaves you unsure whether a booking was created, retry with the same key. You get the original result back instead of a duplicate booking.

Payments

The API creates a reservation. It does not take payment, return a checkout link, or hold a slot while a customer pays. For paid appointments, send customers through the booking widget on your Shopify product page so Shopify Checkout handles the money.

Locations

Every booking and event carries a locationId. Use GET /api/public/v1/locations to resolve that id to a name and address, and GET /api/public/v1/locations/{id} to read one.

Locations are read-only over the API. Create and edit them in Settings > Locations in the app.

Rate limits

The API allows 10 requests per second per shop. This is a shared budget: every key for the same store draws on it.

Every response carries the current state of your budget:

Header

Meaning

X-RateLimit-Limit

Requests allowed per second.

X-RateLimit-Remaining

Requests left in the current window.

X-RateLimit-Reset

When the window resets.

Go over the limit and the request is refused with HTTP 429 and a RATE_LIMITED error code:

{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit of 10 requests per second exceeded"
  }
}

A 429 also carries a Retry-After header telling you how many seconds to wait. The peak-hours report has its own limit of 30 requests per minute per key, on top of the shop limit.

💡 Tip: Read X-RateLimit-Remaining and slow down before you hit zero, rather than waiting for a 429. If you are backfilling a lot of data, run the job in series instead of in parallel.

What webhooks do

A webhook sends an HTTP POST request to a URL you control whenever a booking event occurs. This lets another tool react immediately when a booking is created, cancelled, rescheduled, updated, or checked in.

Common uses include:

  • Adding new bookings to a CRM.

  • Sending a message to Slack, Teams, or another internal tool.

  • Logging booking data in Google Sheets or a database.

  • Triggering a custom email or follow-up workflow.

Webhooks send booking events, not live availability or schedule data.

Set up a webhook

  1. In Easy Appointment Booking, go to Settings > Webhooks & API.

  2. Enter the destination URL supplied by your own system, Zapier, Make, or another automation platform.

  3. Click Save.

Webhooks require the Ultimate plan. You need a destination URL that can receive JSON POST requests.

Events and payloads

The event name identifies what happened. Common event names include:

  • booking.created

  • booking.cancelled

  • booking.rescheduled

  • booking.updated

  • booking.checked_in

  • booking.no_show

  • booking.reminder

  • package.purchased

Each request includes an event field and a data object. The data can include the booking ID, Shopify order ID, customer details, selected variant, attendees, date and time, event details, assigned availability, and package information when applicable.

{
  "event": "booking.created",
  "data": {
    "booking_id": "BOK123",
    "order_id": "12345",
    "event_name": "Consultation Call",
    "start_date": "2026-12-11",
    "start_time": "10:00 AM",
    "timezone": "America/New_York"
  }
}

Test your webhook

  1. Create a test endpoint with a tool such as Zapier, Make, or a request inspector.

  2. Paste its URL into Settings > Webhooks & API and save.

  3. Create a test booking or reschedule an existing booking.

  4. Check the destination tool to confirm that the payload arrived.

⚠️ Warning: Keep your webhook URL private. Make sure your receiving system handles failures and protects customer data. If you use a platform such as Zapier or Make, use its retry and logging tools to monitor delivery.

Did this answer your question?