forbidden_scope
Status 403. This key does not carry the scope this call needs.
What it means
The key does not have the permission this call needs. required_scope names it and key_scopes lists the permissions the key has.
What to do
A key's permissions are fixed when it is made. Make a new key with the permission on the API keys screen in the app, and revoke the old one if nothing needs it.
Safe to send again?
Not as it is. Change what the answer points to, then send the request.
What else the answer carries
required_scope: A scope a key can hold. This list is exactly the scopes some operation checks.write_memberscovers the two writes (changing a member's points, cancelling a reward code) and also coversread_members. The self-revoke needs no scope.write_webhookscovers the webhook endpoints — listing, creating, deleting and testing them — and a key for an AI assistant can never hold it.write_programmecovers changing the programme (POST /stores/{store_key}/programme); a key for an assistant may hold it, and must preview each change and send back its confirmation.key_scopes: Every scope this key holds.
Where you can meet it
GET /stores: Every store on this accountGET /stores/{store_key}: One storeGET /stores/{store_key}/programme: A store's programme: what is stored, the settings in force, what shoppers are actually paid, and the expiry rulePOST /stores/{store_key}/programme: Change the earn rate, the bonuses, what a point is worth, referrals, spending any amount, the time zone, the ways to earn, or when points expireGET /stores/{store_key}/programme/rewards: The rewards a shopper can spend points on at this storePOST /stores/{store_key}/programme/rewards: Add a reward shoppers can spend points onPOST /stores/{store_key}/programme/rewards/{reward_id}: Change a reward's cost, value, minimum order or labelPOST /stores/{store_key}/programme/rewards/{reward_id}/remove: Remove a rewardGET /stores/{store_key}/programme/offers: A store's offersPOST /stores/{store_key}/programme/offers: Add an offer: a campaign, a product offer or a channel offerPOST /stores/{store_key}/programme/offers/{offer_id}: Change an offerPOST /stores/{store_key}/programme/offers/{offer_id}/remove: Remove an offerGET /stores/{store_key}/programme/rules: The earn rules in force at this storeGET /stores/{store_key}/design: A store's design: the colours, words and look of the rewards panel, the product-page line and the account pagePOST /stores/{store_key}/design: Change the design: colours, words, the panel and product-line look, the account page layout, the terms linkGET /members: Shoppers on this accountGET /members/{member_key}: One shopper's recordGET /members/{member_key}/codes: The reward codes this shopper holdsPOST /members/{member_key}/adjustments: Add points to a member's balance, or take them awayPOST /members/{member_key}/codes/void: Cancel a reward code and give the member back its pointsGET /ledger: Every points movement on this account, newest firstGET /reports/liability: What this account owes its shoppersGET /reports/settlement: Points earned at one store and spent at another, inside a windowGET /usage: Orders that earned points this billing month, against the plan's capGET /plan: The subscriptions recorded for this accountGET /audit-log: What every key changed, and what it was shownGET /keys: The API keys on this accountGET /webhooks: The webhook endpoints on this account, and why any stoppedPOST /webhooks: Send points movements to an https endpointDELETE /webhooks/{endpoint_id}: Stop sending to an endpointPOST /webhooks/{endpoint_id}/test: Send one signed test event nowGET /stores/{store_key}/brand: A store's name and branding as the Matrix Rewards website shows them, and what Shopify hasGET /stores/{store_key}/images: The pictures uploaded to a store, newest firstPOST /stores/{store_key}/images: Upload a picture for the store's branding (a logo, a square logo, a cover)
Every code, and the shape of an error answer: Errors.