What a product is made from
- Credentials
- OAuth access token
- Scopes
listings:read
The bill of materials recordBuild takes off the shelves for each unit made. A product with none answers { lines: [] }. Only physical products have one.
Access: OAuth scope listings:read; not write-gated.
merchantOAuth listings: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: listings:read
storeId*stringA store the person can reach. Any other id answers 404, never 403.
productId*stringAn item id (any kind, not only physical products).
OK
application/json- response
data*curl -X GET 'https://api.shopeazy.co/v1/merchant/stores/<storeId>/products/<productId>/recipe' \ -H 'Authorization: Bearer <access_token>'{ "data": { "lines": [] }}What to pull off the shelves for these orders GET
For packing: each order's shipping lines with where each thing sits (`binLocation`, read from the live catalogue, since the order does not carry it). At most 40 orders; the rest of the ids are ignored. An order that does not exist is skipped. The client prints it, as it does tickets and tour lists. A read, so it is not write-gated. Access: OAuth scope `orders:read`; not write-gated.
Set what a product is made from PUT
Replaces the whole recipe: the materials and the quantity of each per unit made, which `recordBuild` then takes off. Each line's name and unit are read from the material when it is saved. An unknown material is 422 `validation_error`; a product that is gone or is not physical is 404 `not_found` / 422. Plan: Scale (403 `plan_limit` on a plan without it): starting something new needs Scale, as `addSupplier` does. `getProductRecipe` stays open after a downgrade. Replacing with the same lines changes nothing, so a retry is safe. Access: OAuth scope `listings:write`; write-gated by the subscription.