Public booking
Unauthenticated guest request pages. A guest picks an offering slot, confirms by email, and the front desk approves or declines the request. Members keep booking as they do today.
4 endpoints · base URL https://api.aerscheduler.com
/public/book/confirmNo auth requiredConfirm a public booking request
Unauthenticated. Promotes an unverified guest request to pending after the email link is opened.
Request body
Confirmation token from the email link.
tokenrequired | string |
Responses
200 | OK | Success.→ { data: object } |
400 | Bad Request | Invalid or expired token. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
409 | The request can no longer be confirmed. | |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/public/book/confirm \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"token":"…"}'/public/book/{orgSlug}/offerings/{offeringSlug}No auth requiredGet a public offering page
Unauthenticated. Returns school name and offering details for a shareable guest booking link. Hidden unless public booking is enabled and the offering is active.
Path parameters
orgSlugrequired | string | The organization's public booking slug. |
offeringSlugrequired | string | The offering slug. |
Responses
200 | OK | Success.→ { data: PublicBookingPage } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
404 | Not Found | Public booking is off, or this offering is not published. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/public/book/:orgSlug/offerings/:offeringSlug \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/public/book/{orgSlug}/offerings/{offeringSlug}/requestsNo auth requiredSubmit a public booking request
Unauthenticated. Creates an unverified guest request and emails a confirmation link. The desk queue only sees the request after the guest confirms. Does not hold inventory.
Path parameters
orgSlugrequired | string | The organization's public booking slug. |
offeringSlugrequired | string | The offering slug. |
Request body
Guest request.
namerequired | string | |
emailrequired | string | |
phone | string | |
notes | string | |
startrequired | string | |
endrequired | string | |
timeZoneName | string | |
resourceId | integer | |
consentrequired | boolean |
Responses
200 | OK | Check your email to confirm.→ { data: object } |
400 | Bad Request | Missing name, email, consent, or an invalid slot. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
409 | That slot is gone, or a request for this email and time already exists. | |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/public/book/:orgSlug/offerings/:offeringSlug/requests \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"…","email":"…","start":"2026-08-04T15:00:00-06:00","end":"2026-08-04T15:00:00-06:00","consent":true}'/public/book/{orgSlug}/offerings/{offeringSlug}/slotsNo auth requiredList public offering slots
Unauthenticated. Bookable windows for one offering, projected for guests (open times only by default).
Path parameters
orgSlugrequired | string | The organization's public booking slug. |
offeringSlugrequired | string | The offering slug. |
Query parameters
startDaterequired | string | Window start. |
endDaterequired | string | Window end. |
limit | integer | Rows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected. |
offset | integer | Rows to skip, for paging. Defaults to 0. |
sort | string | Field to order by before paging, as a dot path into the row , total, user.firstName. Omit to keep the endpoint's own order. Numbers and ISO timestamps order as numbers and instants, not as text, and empty values always sort last regardless of direction. Ordering happens before the page is cut, so it orders the whole collection rather than the page you are holding. |
order | "asc" | "desc" | asc (default) or desc. Only meaningful with sort. |
Responses
200 | OK | Guest-safe bookable slots.→ { data: BookableSlot[] } |
400 | Bad Request | startDate and endDate are required. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
404 | Not Found | Public booking is off, or this offering is not published. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/public/book/:orgSlug/offerings/:offeringSlug/slots?startDate=…&endDate=… \
-H "Authorization: Bearer $AERSCHEDULER_KEY"