One order
- Credentials
- OAuth access token
- Scopes
orders:read
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.
orderId*stringOK
application/json- response
data*curl -X GET 'https://api.shopeazy.co/v1/merchant/stores/<storeId>/orders/<orderId>' \ -H 'Authorization: Bearer <access_token>'{ "data": { "id": "string", "number": "string", "channel": "online", "customerName": "string", "soldByName": "string", "total": { "amount": 0, "currency": "ZAR" }, "status": "open", "paymentStatus": "unpaid", "fulfillmentStatus": "unfulfilled", "placedAt": 0, "lineCount": 0, "kinds": [ "physical" ], "currency": "string", "customerEmail": "string", "customerPhone": "string", "lines": [ { "id": "string", "kind": "physical", "requiresShipping": true, "title": "string", "variantTitle": "string", "customisations": [ { "groupName": "string", "choiceName": "string", "price": { "amount": 0, "currency": "ZAR" } } ], "quantity": 0, "unitPrice": { "amount": 0, "currency": "ZAR" }, "lineTotal": { "amount": 0, "currency": "ZAR" }, "fulfilled": true, "imageUrl": "string" } ], "subtotal": { "amount": 0, "currency": "ZAR" }, "shipping": { "amount": 0, "currency": "ZAR" }, "discount": { "amount": 0, "currency": "ZAR" }, "paid": { "amount": 0, "currency": "ZAR" }, "refunded": { "amount": 0, "currency": "ZAR" }, "kept": { "amount": 0, "currency": "ZAR" }, "refundable": { "amount": 0, "currency": "ZAR" }, "pendingRefunds": [ { "amount": { "amount": 0, "currency": "ZAR" }, "providerName": "string" } ], "eft": { "reference": "string", "overdue": true, "overdueAt": 0, "bankName": "string", "account": "string" }, "customerNote": "string", "giftNote": "string", "notes": [ { "at": 0, "message": "string", "author": "string" } ], "timeline": [ { "at": 0, "type": "created", "message": "string", "author": "string" } ], "fulfilment": { "method": "delivery", "serviceName": "string", "lockerName": "string", "address": "string", "provider": "string", "serviceCode": "string", "locker": { "id": "string", "name": "string", "provider": "string", "courier": "string", "address": "string", "hours": "string" }, "fellBack": true }, "shippingAddress": "string", "shippingAddressParts": { "addressLine": "string", "localArea": "string", "city": "string", "province": "string", "postalCode": "string" }, "shippingAddressMissing": [ "string" ], "needsCourier": true, "shipment": { "provider": "string", "trackingReference": "string", "state": "pending", "estimate": "string" }, "courierConnected": true }}Do one thing to several orders at once POST
Up to 200 orders. Every order is re-read and decided again (an order that cannot take the action, one already in that state, one that is gone, a sold-out item) and then goes through the same service call, audit entry and customer emails as its single-order operation. One failing never stops the rest; orders run a few at a time. The answer is one `{ id, ok, error? }` per id (`BulkResult`), always 200. A retry is safe: each order is decided again from a fresh read, so one already done is left alone (`ok: false`, `validation_error`, for example `already cancelled`) and nothing happens twice; the same `Idempotency-Key` replays the first answer. The scope is `orders:write`; `cancel` calls off a booked courier collection per order, as `cancelOrder` does. The refund-bearing paths stay with `refundOrder` (`orders:refund`). Access: OAuth scope `orders:write`; write-gated by the subscription.
Correct the delivery address PUT
A 422 names the parts a courier still needs. Access: OAuth scope `orders:write`; write-gated by the subscription.