File a contact-form enquiry and tell the merchant
- Credentials
- Store key
- Scopes
requests:write
Recorded in the store before anything is sent; the merchant notification and email are best-effort and never fail the call, so do not retry a 201. The recipient, subject and body are composed server-side from structured fields; there is deliberately no "send an email" endpoint.
A name and at least one of phone or email are required. Strings are trimmed and capped (name 120, phone 40, email 200, service 120, notes 2000 characters).
Old path, deprecated, sunset 1 Feb 2027: POST /v1/booking-requests.
storeKey requests:writeAuthorizationBearer <sez_pub_... (publishable) or sez_sk_... (secret)>A per-store key from the console. Publishable keys are browser-safe; secret keys are server-only.
Scope: requests:write
application/json- body
A name plus at least one of phone or email.
name*stringlength <= 120phone?stringlength <= 40email?stringlength <= 200service?stringSlug of the service asked about. Omit for a general enquiry.
length <= 120requestedAt?TimestampEpoch milliseconds.
notes?stringlength <= 2000Recorded.
application/json- response
data*curl -X POST 'https://api.shopeazy.co/v1/store/booking-requests' \ -H 'Authorization: Bearer sez_pub_...' \ -H 'Content-Type: application/json' \ -d '{ "name": "Thandi Mokoena", "email": "thandi.mokoena@example.com", "phone": "+27 82 000 0001", "service": "Plant care visit", "requestedAt": 1793183597086, "notes": "Two big fiddle-leaf figs that are dropping leaves."}'{ "data": { "id": "kyKVipffoAEVwR9KcEJT", "status": "pending" }}Ask the provider whether the order is paid, and settle it if so POST
For the success page. The provider's callback to the platform is the primary settlement path; this is the second, independent one. Idempotent and safe to poll: an already-paid order returns at once. The status always comes from the provider; nothing a caller sends can mark an order paid. Takes no body. It returns the order, so it has the same access rule as `GET /v1/store/orders/{id}`: `X-Order-Token` or the shopper who placed it. Old path, deprecated, sunset 1 Feb 2027: `POST /v1/orders/{id}/confirm`.
Exchange a Firebase ID token for a 14-day shopper session POST
Verified against the store's own sign-in tenant (`store.auth.tenantId`); a token from another pool is refused. The shopper's profile is mirrored into the store. Keep `sessionToken` in your own httpOnly cookie and send it as `X-Shopper-Session`. Old path, deprecated, sunset 1 Feb 2027: `POST /v1/shopper/session`.