🎉 New Welcome to reservie — V2 is now live and available for use. Get started →

Scopes, Rate Limits, Caching & Errors

Updated Feb 25, 2026 3 min read

Reference for all available API scopes, rate limiting, caching behaviour, error responses, and audit logging.

Scopes

Scopes control which endpoints an API client can access. They follow the pattern resource:permission and are assigned when creating a client in Settings > API Clients.

Customer data scopes

ScopeGrantsDescription
customers:readGET /customersList all customers
profile:readGET /customer/{id}/profileRead a customer’s profile
profile:writePUT /customer/{id}/profileUpdate a customer’s profile
bookings:readGET /customer/{id}/bookings, GET /customer/{id}/booking/{bookingId}Read a customer’s event bookings
packages:readGET /customer/{id}/packagesRead a customer’s pass purchases
videos:readGET /customer/{id}/videosRead a customer’s video/media purchases
subscription-mandates:readGET /customer/{id}/subscription-mandatesRead a customer’s subscription mandates
appointments:readGET /customer/{id}/appointments, GET /appointments/bookings, GET /appointments/bookings/{id}, GET /appointments/services, GET /appointments/services/{id}, GET /appointments/availability/{id}Read appointments (customer-scoped and company-wide), services, and availability
notes:readGET /customer/{id}/notesRead notes on a customer record
questionnaire-answers:readGET /customer/{id}/questionnaire-answersRead a customer’s questionnaire answers

Event data scopes

ScopeGrantsDescription
events:readGET /events, GET /event/{id}Read the event catalogue (definitions, dates, pricing, properties)
events-register:readGET /event/{id}/dates/{dateId}/registerRead the attendance register for a specific event date

Resource scopes

ScopeGrantsDescription
subscription-plans:readGET /subscription-plans, GET /subscription-plan/{id}Read the subscription plan catalogue
subscription-plans:writePUT /subscription-plan/{id}Update subscription plans
passes:readGET /passes, GET /pass/{id}, GET /pass/{id}/packagesRead the pass catalogue and active purchases
passes:writePUT /pass/{id}Update passes
media:readGET /videos, GET /video/{id}Read the video library
media:writePUT /video/{id}Update videos
vouchers:readGET /vouchers, GET /voucher/{id}Read the voucher catalogue
vouchers:writePUT /voucher/{id}Update vouchers

Scope enforcement

  • If a client calls an endpoint it doesn’t have a scope for, the API returns 403 Forbidden with a message identifying the missing scope
  • The 403 is also recorded in the audit log
  • Scopes can be updated at any time via the admin UI without rotating the secret — the next token request will pick up the new scopes

Rate limits

The M2M API has a shared rate limit across all endpoints:

LimitValue
Rate20 requests per minute
Burst10 concurrent requests
Daily quota10,000 requests

Exceeding any limit returns HTTP 429 Too Many Requests. Your integration should implement appropriate backoff and retry logic.


Caching

All read endpoints are cached for up to 5 minutes. This means data returned by the API may trail the database by up to 5 minutes after a change is made via the admin UI or other channels.

  • Cache keys are scoped per endpoint, company, resource, and query parameters
  • The M2M API uses a separate cache from the admin UI — they do not share or invalidate each other’s entries
  • Write operations (e.g. PUT /customer/{id}/profile) immediately invalidate the relevant cache entry
  • Identical requests within the TTL window are served from cache without hitting the database

Error responses

All errors return a JSON body with an error field:

StatusMeaning
400Bad request — missing or invalid parameters
401Unauthorized — invalid or expired token
403Forbidden — token lacks the required scope
404Not found — resource does not exist
405Method not allowed — unsupported HTTP method for this path
429Rate limit exceeded
500Internal server error

Example 403 response:

{
  "error": "Missing required scope: bookings:read"
}

When you receive a 401, request a new token using your client credentials.


Audit logging

Every API call is logged with the following details:

FieldDescription
WhoWhich API client made the request
WhatHTTP method, path, resource type, action (READ/UPDATE)
WhenISO 8601 timestamp
ResultHTTP status code

This includes denied requests (403), so you can see which clients attempted to access data beyond their scope. Audit entries are retained for 90 days.

You can view audit logs in the admin UI to monitor which clients are accessing what data and when.