Apply for membership as the signed-in shopper
- Credentials, one of
- Store key and Shopper session
- Store key and Shopper ID token
- Scopes
members:write
Only on a members-only store (422 validation_error otherwise).
- Simple stores: JSON
{ name?, applicationNote? }. The store's auto-approve setting applies, so the result may beactiveat once. Email and phone come from the shopper credential. - ID-verified stores (
store.membership.requireVerification):multipart/form-datawith the hosted storefront's fields and two files. A JSON body gets422 verification_required. A verified application is alwayspending. Re-applying whilependingoractivereturns200with the current status and leaves the documents under review alone; arejectedorrevokedshopper may re-apply with new documents.
The whole request must fit the hosting body limit (about 4.5MB), so resize photos in the browser first (selfie about 1200px, ID about 1600px, JPEG).
Old path, deprecated, sunset 1 Feb 2027: POST /v1/members/apply.
AuthorizationBearer <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: members:write
X-Shopper-Session<token>A 14-day shopper session from POST /v1/store/shopper/session. Preferred on a server.
- body
A simple (unverified) application.
name?stringDefaults to the shopper's name, then email.
applicationNote?stringVerified store only. Already pending or active; nothing changed.
application/json- response
data*curl -X POST 'https://api.shopeazy.co/v1/store/members/apply' \ -H 'Authorization: Bearer sez_pub_...' \ -H 'X-Shopper-Session: <shopper_session_token>' \ -H 'Content-Type: application/json' \ -d '{ "applicationNote": "I run a plant swap in Greenside and would love member prices."}'{ "data": { "status": "pending" }}The signed-in shopper's upcoming bookings at this store GET
Soonest first. One row per booked service line on the caller's orders, from now on. Lines on cancelled orders are left out. Paged: `{ items, nextCursor }`, `limit` (default 50, at most 100) and an opaque `cursor`. Old path, deprecated, sunset 1 Feb 2027: `GET /v1/me/bookings`.
List the store's members GET
Secret key only. Rows carry no signed document URLs; fetch one member for those. Paged: `{ items, nextCursor }`, `limit` (default 50, at most 100) and an opaque `cursor`. Old path, deprecated, sunset 1 Feb 2027: `GET /v1/members`.