One ticket as a printable PDF
- Credentials
- OAuth access token
- Scopes
orders:read
application/pdf: the store, the event's title, date, time and venue, the order number, the customer and the ticket with its QR. The body is the file, not the usual { data } envelope; errors are the usual JSON.
The PDF carries the event's date and venue as they are now, so it is cacheable for only five minutes. A code this store did not issue is 404 not_found. It admits nobody on its own: the door still checks the code against the order.
Access: OAuth scope orders:read; not write-gated.
merchantOAuth orders:readAuthorizationBearer <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: orders:read
storeId*stringA store the person can reach. Any other id answers 404, never 403.
code*stringThe code printed on an issued ticket. Case and spacing are ignored.
OK
response?fileapplication/pdfbinarycurl -X GET 'https://api.shopeazy.co/v1/merchant/stores/<storeId>/tickets/<code>/pdf' \ -H 'Authorization: Bearer <access_token>'"string"The QR code for one ticket GET
A picture of the ticket code, for a ticket screen, a print or an email. `image/png`, 480 px with a quiet zone, or `image/svg+xml` with `format=svg` (what the console's order page draws). The body is the image, not the usual `{ data }` envelope; errors are the usual JSON. The code is the one on the issued ticket (`C1234567` style, case and spacing ignored); anything that is not code-shaped, or a code this store did not issue, is 404 `not_found`, so this can never draw an arbitrary string. It admits nobody on its own: the door still checks the code against the order with `scanTicket`. Access: OAuth scope `orders:read`; not write-gated.
Upload an image to the workspace's storage POST
Used for product photos and (by the app) for the profile avatar. Storage: refused with 403 `plan_limit` when it would take the Library over the plan's storage. What is already stored stays. Access: OAuth scope `listings:write`; write-gated by the subscription.