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

post/public/book/confirmNo auth required

Confirm 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.

tokenrequiredstring

Responses

200OKSuccess.{ data: object }
400Bad RequestInvalid or expired token.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
409The request can no longer be confirmed.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/public/book/confirm \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"token":"…"}'
get/public/book/{orgSlug}/offerings/{offeringSlug}No auth required

Get 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

orgSlugrequiredstringThe organization's public booking slug.
offeringSlugrequiredstringThe offering slug.

Responses

200OKSuccess.{ data: PublicBookingPage }
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
404Not FoundPublic booking is off, or this offering is not published.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/public/book/:orgSlug/offerings/:offeringSlug \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/public/book/{orgSlug}/offerings/{offeringSlug}/requestsNo auth required

Submit 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

orgSlugrequiredstringThe organization's public booking slug.
offeringSlugrequiredstringThe offering slug.

Request body

Guest request.

namerequiredstring
emailrequiredstring
phonestring
notesstring
startrequiredstring
endrequiredstring
timeZoneNamestring
resourceIdinteger
consentrequiredboolean

Responses

200OKCheck your email to confirm.{ data: object }
400Bad RequestMissing name, email, consent, or an invalid slot.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
409That slot is gone, or a request for this email and time already exists.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
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}'
get/public/book/{orgSlug}/offerings/{offeringSlug}/slotsNo auth required

List public offering slots

Unauthenticated. Bookable windows for one offering, projected for guests (open times only by default).

Path parameters

orgSlugrequiredstringThe organization's public booking slug.
offeringSlugrequiredstringThe offering slug.

Query parameters

startDaterequiredstringWindow start.
endDaterequiredstringWindow end.
limitintegerRows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected.
offsetintegerRows to skip, for paging. Defaults to 0.
sortstringField 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

200OKGuest-safe bookable slots.{ data: BookableSlot[] }
400Bad RequeststartDate and endDate are required.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
404Not FoundPublic booking is off, or this offering is not published.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/public/book/:orgSlug/offerings/:offeringSlug/slots?startDate=…&endDate=… \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"