Everything an AI agent can do with the Acuity Scheduling API.

A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.

Endpoints25
API versionv1
Last updated23 June 2026
Orientation

How the Acuity Scheduling API works.

The Acuity Scheduling API is how an app or AI agent works with an appointment-booking account: checking open availability, booking an appointment, rescheduling or canceling it, and managing clients, appointment types, and coupon or package certificates. Access is granted through a User ID and API key, or an OAuth token, and that one credential reaches the whole account, because the API has no per-resource permissions to narrow it. It can also push events to a webhook URL when an appointment is booked, rescheduled, or canceled.

25Endpoints
7Capability groups
15Read
10Write
1Permissions
Authentication
There are two ways to authenticate. HTTP Basic uses the numeric User ID as the username and the API key as the password, found in the account's Integrations settings, and carries full access to that one account. OAuth 2.0 lets an app connect to many accounts, returning a bearer token. Cross-origin browser requests are not supported, so calls must come from a server.
Permissions
Acuity Scheduling has no per-resource permission system. HTTP Basic credentials grant full access to the whole v1 API for that account, and the OAuth flow requests a single api-v1 scope that does the same. There is no way to limit a token to read-only, or to one calendar or one appointment type, at the API level. Narrowing what an agent can reach has to happen in front of the API, which is what Bollard AI provides.
Versioning
The API is a single version, v1, served at https://acuityscheduling.com/api/v1. There is no dated version header to pin and no parallel older version to migrate from. New capabilities, like the dynamic Webhooks API for creating subscriptions through the API, are added to v1 over time without breaking existing calls.
Data model
The API is resource-oriented JSON over HTTPS. The core resource is the appointment, created against an appointment type and a calendar, with availability endpoints to find open slots first. Around it sit clients, products, intake forms, and package or coupon certificates. Webhooks push appointment and order events to a URL, and each appointment can also list its payment transactions.
Connect & authenticate

Connection & authentication methods.

How an app or AI agent connects to Acuity Scheduling determines what it can reach. There is a route for making calls and a route for receiving events, and each is governed by the credentials behind it.

Ways to connect

REST API

The REST API answers at https://acuityscheduling.com/api/v1 over HTTPS. It is a single version, v1, with no dated version header to pin.

Best forConnecting an app or AI agent to Acuity Scheduling.
Governed byThe User ID and API key, or an OAuth token, behind the call.
Docs ↗

Webhooks

Webhooks post a form-encoded event to a target URL when an appointment is scheduled, rescheduled, canceled, or changed, or an order is completed. Subscriptions are created through the API or set in account settings, and each delivery is signed so it can be verified as coming from Acuity Scheduling.

Best forReceiving appointment and order events without polling.
Governed byThe API key, which also signs each delivery for verification.
Docs ↗
Authentication

HTTP Basic (User ID and API key)

Authentication is done over SSL with HTTP Basic, using the numeric User ID as the username and the API key as the password. The credentials are found in the account's Integrations settings and carry full access to that one account's v1 API.

TokenUser ID and API key
Best forA single account connecting to its own data
Docs ↗

OAuth 2.0

OAuth 2.0 lets an app connect to many Acuity Scheduling accounts without holding each one's API key. The authorization flow requests the single api-v1 scope and returns a bearer access token. That one scope covers all of v1, so it is not a way to narrow what the token can reach.

TokenOAuth bearer token
Best forAn app connecting to many customer accounts
Docs ↗
Capability map

What an AI agent can do in Acuity Scheduling.

The Acuity Scheduling API is split into areas an agent can act on, like appointments, availability, clients, appointment types, and certificates. Each area has its own methods, and a write can book an appointment, cancel one, or create a client record.

Endpoint reference

Every Acuity Scheduling API method.

Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.

MethodEndpointWhat it doesAccessPermissionVersion

Appointments

List and read appointments, create new ones, update their details, reschedule and cancel them, and read the payments on an appointment.7

Filterable by date range, calendar, appointment type, and client fields. OAuth grants the single api-v1 scope, which covers all of v1; HTTP Basic with a User ID and API key has the same reach. Acuity does not offer per-resource scopes.

Acts onappointment
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Returns the appointment's time, client details, and intake form answers. The api-v1 scope covers this; there is no narrower read-only permission.

Acts onappointment
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Passing admin=true disables availability and attribute validations and allows setting notes, and then requires a calendarID. Validation failures return 400 with codes like not_available or required_email. The api-v1 scope covers this write.

Acts onappointment
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventappointment-scheduled
Rate limitStandard limits apply

Only white-listed fields change here; time changes go through the reschedule endpoint. The api-v1 scope covers this write.

Acts onappointment
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventappointment-changed
Rate limitStandard limits apply

A separate endpoint from update, because moving the time runs its own availability checks. The api-v1 scope covers this write.

Acts onappointment
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventappointment-rescheduled
Rate limitStandard limits apply

Canceling is a dedicated endpoint, not a state field on update. The api-v1 scope covers this write.

Acts onappointment
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventappointment-canceled
Rate limitStandard limits apply

Returns the amounts and transaction records tied to one appointment. The api-v1 scope covers this read.

Acts onpayment
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Availability

Find open dates and times for an appointment type, list class times, and check whether specific times are still available before booking.4

Read-only; takes month and appointmentTypeID. The api-v1 scope covers this read.

Acts onavailability
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only; takes date and appointmentTypeID, optionally a calendarID. The api-v1 scope covers this read.

Acts onavailability
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only; classes are group appointment types with multiple attendees. The api-v1 scope covers this read.

Acts onavailability
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

A POST that validates candidate times and changes nothing, so it reads rather than writes. The api-v1 scope covers it.

Acts onavailability
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Clients

List the client records on an account, create a new client, and edit an existing client.3

Returns names, emails, and phone numbers, so it exposes client contact details. The api-v1 scope covers this read.

Acts onclient
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Adds a contact to the account's client list. The api-v1 scope covers this write.

Acts onclient
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Updates the stored contact details for one client. The api-v1 scope covers this write.

Acts onclient
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Appointment types & products

List the appointment types offered, the products for sale, and the intake forms attached to bookings.3

An appointment type defines a bookable service; classes are appointment types with multiple attendees. The api-v1 scope covers this read.

Acts onappointment type
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Products are sellable items like packages and gift certificates configured on the account. The api-v1 scope covers this read.

Acts onproduct
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Returns the form questions clients answer when booking, which the appointment endpoints reference by field ID. The api-v1 scope covers this read.

Acts onform
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Certificates & coupons

List package and coupon certificates, create a new certificate, and delete one.3

Returns redeemable codes, the products they apply to, and any remaining uses or expiry. The api-v1 scope covers this read.

Acts oncertificate
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Mints a redeemable code that carries monetary value against products or appointment types. The api-v1 scope covers this write.

Acts oncertificate
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Removes a redeemable code from the account. The api-v1 scope covers this write.

Acts oncertificate
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Calendars & account

List the calendars on an account and read the authenticated account's own details.2

Calendars are used to filter availability and appointments and to route bookings to a person. The api-v1 scope covers this read.

Acts oncalendar
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Identifies which account a token or key belongs to. The api-v1 scope covers this read.

Acts onaccount
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Webhooks

List the webhook subscriptions on an account, create a new subscription, and delete one.3

Shows each subscription's event and target URL. The api-v1 scope covers this read.

Acts onwebhook
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

An account is capped at 25 webhooks, and creating a 26th returns a 400. The api-v1 scope covers this write.

Acts onwebhook
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Removes one subscription so its events stop being delivered. The api-v1 scope covers this write.

Acts onwebhook
Permission (capability)api-v1
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply
No endpoints match those filters.
Webhooks

Webhook events.

Acuity Scheduling can notify an app or AI agent when something happens, like an appointment being booked, rescheduled, or canceled, by posting an event to a webhook URL. A subscription is created through the API or set in account settings, so an integration learns about activity without polling.

EventWhat it signalsTriggered by
appointment.scheduledFires once when an appointment is initially booked./appointments
appointment.rescheduledFires when an appointment is rescheduled to a new time./appointments/:id/reschedule
appointment.canceledFires whenever an appointment is canceled./appointments/:id/cancel
appointment.changedA catch-all that fires when an appointment is changed in any way, including booking, rescheduling, and canceling./appointments
/appointments/:id
/appointments/:id/reschedule
/appointments/:id/cancel
order.completedFires when an order is completed, such as a package, gift certificate, or subscription purchase.In-app only
No events match that search.
Rate limits & pagination

Rate limits, pagination & request size.

Acuity Scheduling limits how fast an app or AI agent can call, by a per-IP request rate measured each second together with a cap on concurrent connections, and returns a 429 when either is exceeded.

Request rate

Acuity Scheduling limits requests per IP address, to around 10 requests per second with at most 20 concurrent connections. Passing either returns a 429 with a JSON body carrying status_code, error set to too_many_requests, and a message. There is no documented per-method cost or hourly quota; the limit is the per-second rate and the concurrency cap. An integration should space its calls and retry after backing off when it sees a 429.

Pagination

List endpoints such as appointments take a max parameter that defaults to 100, with minDate and maxDate to window a date range and other filters like calendarID and appointmentTypeID to narrow results. There is no documented cursor or page-token scheme; results are bounded by the max parameter and the supplied filters.

Request size

Requests and responses are JSON, except webhook deliveries, which arrive as form-encoded POSTs. Datetime values must be parseable by PHP's strtotime, and timezones use IANA identifiers such as America/New_York. No single overall payload size limit is documented.

Errors

Status codes & error handling.

The status codes an agent should handle, and what to do about each.

StatusCodeMeaningWhat to do
400Bad RequestValidation failed. The body holds an error code and a human-readable message, with codes such as not_available, required_email, invalid_certificate, or no_available_calendar. Creating a 26th webhook also returns 400.Read the error code and message, correct the named field or condition, and resend.
401UnauthorizedAuthentication failed. The User ID and API key, or the OAuth token, is missing or invalid.Check the credentials and the Authorization header, then send valid credentials.
429too_many_requestsA rate limit was exceeded. Acuity allows about 10 requests per second and 20 concurrent connections per IP address, and returns a body with status_code, error, and message when either is passed.Back off and retry, spacing requests and limiting how many run at once.
Versioning & freshness

Version history.

Acuity Scheduling runs a single version of its API, v1, rather than dated versions, and ships new capabilities additively, like the dynamic Webhooks API for creating subscriptions through the API.

Version history

What changed, and when

Latest versionv1
v1Current version
Single, continuously updated API

Acuity Scheduling serves one version of its API, v1, at https://acuityscheduling.com/api/v1. There is no dated version header and no parallel older version, so integrations do not migrate between versions. New capabilities are added to v1 additively, like the dynamic Webhooks API, which lets subscriptions be created, listed, and deleted through the API rather than only in account settings.

What changed
  • v1 is the single, current version, authenticated by HTTP Basic with a User ID and API key or by OAuth 2.0 with the api-v1 scope
  • Dynamic Webhooks API added, allowing webhook subscriptions to be created, listed, and deleted through the API
  • Webhook events cover appointment.scheduled, appointment.rescheduled, appointment.canceled, appointment.changed, and order.completed

There is no version header to pin; new endpoints are added to v1 over time.

Acuity developer docs ↗
Questions

Acuity Scheduling API, answered.

How does an agent authenticate, API key or OAuth?+
Either. A single account uses HTTP Basic, with its numeric User ID as the username and its API key as the password, both from the Integrations settings. An app that connects to many customer accounts uses OAuth 2.0, sending users through an authorization flow and receiving a bearer access token per account. Both reach the same v1 API; OAuth just avoids holding each account's raw API key.
Can I give an agent read-only or single-calendar access?+
Not through Acuity Scheduling itself. The API has no per-resource permissions: HTTP Basic credentials and the single OAuth api-v1 scope both grant full access to the whole account, reads and writes alike. There is no read-only token and no way to scope a token to one calendar or appointment type. To limit an agent to, say, checking availability but not canceling, the limit has to sit in front of the API, which is what Bollard AI does.
What are the rate limits?+
Acuity allows roughly 10 requests per second and up to 20 concurrent connections per IP address. Going over either returns a 429 with a JSON body containing status_code, error set to too_many_requests, and a message. There is no hourly quota or per-method cost; the right response to a 429 is to back off and retry while spacing requests out.
How do I receive appointment events instead of polling?+
Use webhooks. Acuity posts a form-encoded event to a target URL when an appointment is scheduled, rescheduled, canceled, or changed, or an order is completed. Subscriptions can be created through the Webhooks API or set in account settings, up to 25 per account. The payload carries the action and the appointment or order ID, and full details are then fetched from the appointments endpoint. Each delivery is signed with the API key so it can be verified.
How do I book an appointment through the API?+
Find an open slot first with the availability endpoints for the chosen appointment type, then POST to the appointments endpoint with the datetime, appointmentTypeID, and the client's firstName, lastName, and email. Booking as an admin with admin=true skips availability and attribute validation and requires a calendarID. A slot that is no longer free returns a 400 with the not_available code.
What is a certificate in Acuity?+
A certificate is a redeemable code, either a coupon that discounts a booking or a package that prepays a number of appointments or minutes against specific products or appointment types. The API can list certificates, create a new one, and delete one. Because a certificate carries monetary value, creating and deleting them are writes worth controlling separately from ordinary bookings.
Related

More scheduling API guides for agents

What is Bollard AI?

Control what every AI agent can do in Acuity Scheduling.

Bollard AI sits between a team's AI agents and Acuity Scheduling. Grant each agent exactly the access it needs, read or write, resource by resource, and every call is checked and logged.

  • Set read, write, or full access per agent, never a shared Acuity Scheduling key.
  • Denied by default, so an agent reaches only what has been explicitly allowed.
  • Every call recorded in plain English: who, what, where, and the decision.
Acuity Scheduling
Booking Agent
Check availability ResourceOffReadFull use
Book appointments ActionOffReadFull use
Cancel appointments ActionOffReadFull use
Client records ResourceOffReadFull use
Per-agent access, set in Bollard AI, not in Acuity Scheduling