Star or un-star a Library file
- Credentials
- OAuth access token
- Scopes
listings:write- Idempotency
- Send an
Idempotency-Keyheader. A retry with the same key does the work once.
Deliberately not write-gated: starring something the business already made and paid for is not a new commitment, so it works on a lapsed plan. Setting the value it already has changes nothing.
Access: OAuth scope listings:write; not write-gated.
merchantOAuth listings:writeAuthorizationBearer <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:write
storeId*stringA store the person can reach. Any other id answers 404, never 403.
assetId*stringA Library file id, from listLibrary.
Idempotency-Key*stringRequired on every write. Minted on the device when the person taps, reused on every retry. A write without one, or with one that does not match the pattern, is refused with 422 validation_error. Scoped to the token's subject, remembered 24 hours. A replay returns the first 2xx response with Idempotent-Replay: true; a request still running answers 409 in_flight; the same key with a different method, path or body answers 409 idempotency_key_reused; non-2xx results are not remembered. If the key store cannot be read nothing is processed and the answer is 503 idempotency_unavailable: retry with the same key.
^[A-Za-z0-9_-]{8,128}$application/json- body
favourite*booleantrue stars it, false removes the star.
OK
application/json- response
data*curl -X PUT 'https://api.shopeazy.co/v1/merchant/stores/<storeId>/library/<assetId>/favourite' \ -H 'Authorization: Bearer <access_token>' \ -H 'Idempotency-Key: <unique_key>' \ -H 'Content-Type: application/json' \ -d '{ "favourite": false}'{ "data": { "id": "string", "favourite": true }}Delete a Library file DELETE
Removes the file from the Library and from storage (it frees the plan's Library space). A file that is shown on the shop (`usedIn` on `listLibrary`: a listing, the logo, a banner) is refused with 422 `validation_error` and nothing is deleted: a product keeps its own list of photos, so swap the file out first (`updateProduct`) and then delete it. Credits spent making it are not given back. Deleting a file that is already gone is 404 `not_found`. Access: OAuth scope `listings:write`; write-gated by the subscription.
Say the finished version of an AI clip has been made POST
An AI video comes back as the raw clip and the client makes the finished version (captions, branding) on the device. Once that is done and the result is saved to the Library, this tells ShopEazy to stop asking for it (`needsCompose` goes false). Calling it again changes nothing, so a retry is safe. Access: OAuth scope `listings:write`; write-gated by the subscription.