Close or reopen whole dates
- Credentials
- OAuth access token
- Scopes
settings:write- Role
- Owners and admins only. Staff get
403 forbidden. - Subscription
- Needs an active plan. Otherwise
403 subscription_locked. - Idempotency
- Send an
Idempotency-Keyheader. A retry with the same key does the work once.
Adds the dates to (or, with blocked: false, takes them off) every bookable service's blackout dates, so customers can't book them. Bookings already made stay. 1 to 60 dates.
Access: OAuth scope settings:write; owner/admin only; write-gated by the subscription.
merchantOAuth settings:writeAuthorizationBearer <token>OAuth 2.1 (authorization code + PKCE S256, public clients, dynamic registration) for connected AI apps. Effective power is scopes granted AND the person's role today AND the plan. orders:refund, billing:write and team:write are opt-in on the consent screen. Write implies read for marketing:read and messages:read, so a grant holding marketing:write passes a marketing:read check, and messages:send passes messages:read.
Scope: settings:write
storeId*stringA store the person can reach. Any other id answers 404, never 403.
Idempotency-Key*stringRequired on every write. Minted on the device when the person taps, reused on every retry. A write without one, or with one that does not match the pattern, is refused with 422 validation_error. Scoped to the token's subject, remembered 24 hours. A replay returns the first 2xx response with Idempotent-Replay: true; a request still running answers 409 in_flight; the same key with a different method, path or body answers 409 idempotency_key_reused; non-2xx results are not remembered. If the key store cannot be read nothing is processed and the answer is 503 idempotency_unavailable: retry with the same key.
^[A-Za-z0-9_-]{8,128}$application/json- body
dates*array<>1 <= items <= 60blocked?booleanfalse reopens the dates.
trueOK
application/json- response
data*curl -X PUT 'https://api.shopeazy.co/v1/merchant/stores/<storeId>/calendar/blocked-days' \ -H 'Authorization: Bearer <access_token>' \ -H 'Idempotency-Key: <unique_key>' \ -H 'Content-Type: application/json' \ -d '{ "dates": [ "string" ]}'{ "data": { "dates": [ "string" ], "blocked": true, "services": 0 }}The calendar for a window GET
Every appointment, tour departure and event that touches the window (a multi-day trip already under way included), with a shared service slot as one entry and everyone on it; the booking requests still waiting; and each date's opening hours (minutes after midnight, SA time) from the bookable services' weekly hours less their blackout dates. A date with no hours is closed. `from` and `to` are YYYY-MM-DD (SA), `to` exclusive; default today and a week on; at most 62 days. Access: OAuth scope `orders:read`; not write-gated.
A private calendar link POST
A new private link (iCalendar) that Google Calendar, Apple Calendar or Outlook subscribe to, with every booking, departure and event 30 days back and 120 ahead. It carries customer names and numbers, so treat it as a secret. Making a new one stops the old link at once. The link is shown once; only its hash is stored. Access: OAuth scope `settings:write`; owner/admin only; write-gated by the subscription.