Skip to main content

API scopes reference

A scope is one permission on an API credential. Every personal access token and every OAuth authorization carries a list of them, and SKU.io checks that list on each request. This page is the complete catalog: what exists, what each entry opens, and what a refusal looks like so you can tell "the token is wrong" from "the token isn't allowed to do that".

Before you begin​

  • Scopes apply to API credentials only. When you use SKU.io in the browser you're signed in with a session, and sessions aren't scope-checked — they use your normal permissions.
  • Scopes narrow, they never widen. A token acts as the person who created it. If your role can't delete products, neither can a token you issue that carries products:write.
  • You pick scopes when you create a token, and you can change them afterwards.

How scopes are named​

Every scope is resource:action:

orders:read
purchase-orders:write
webhooks:manage

The resource is the area of the product. The action is what the token may do there: read to look and write to change. Two groups use other actions. Webhooks has manage in place of write, and Material Planning splits its changes into run and release, because running a plan and committing money to it are different decisions.

The catalog​

There are 25 groups and 52 scopes. Read and write are always separate entries, so a reporting job can take orders:read without ever being able to cancel an order.

GroupScopeGrants
Sales Ordersorders:readView sales orders and order lines
orders:writeCreate, update, and cancel sales orders
Productsproducts:readView products, SKUs, and variants
products:writeCreate and update products
Inventoryinventory:readView stock levels, allocations, and reorder points
inventory:writeAdjust inventory, transfer stock, and reconcile counts
Customerscustomers:readView customers
customers:writeCreate and update customers
Supplierssuppliers:readView suppliers
suppliers:writeCreate and update suppliers
Purchase Orderspurchase-orders:readView purchase orders
purchase-orders:writeCreate, update, and approve purchase orders. Your approval policies apply to API calls too, so the token's user can approve only what the policy lets them.
Warehouseswarehouses:readView warehouses and locations
warehouses:writeManage warehouses, locations, put-away, and location transfers
Reportsreports:readView reports and analytics
reports:writeRun report queries, exports, and scheduled reports
Webhookswebhooks:readView webhook subscriptions, their delivery history, and the event catalog
webhooks:manageCreate, enable, disable, and delete webhook subscriptions
Returns & RMAsreturns:readView RMAs, return receipts, and dispositions
returns:writeCreate and process RMAs and return receipts
Duty Ratesduty-rates:readView duty rates, customs jurisdictions, coverage, AI research history, customs entries (and their IEEPA summary and export), and run the rate tester
duty-rates:writeCreate, update, version, archive, and delete duty rates and customs jurisdictions; research rates with AI and apply proposals; import customs entries, rematch and edit their PO-line matches, apply their proposals, link them to bills, and archive them
Accountingaccounting:readView transactions, bills, vendor credits, financial settings, and channel settlements, payouts, fee mappings, FIFO cost layers and valuation
accounting:writeCreate and update transactions, payments, and financial settings, and post channel settlements and their mappings
Settings & Organizationsettings:readView stores, tags, alerts, and organization settings
settings:writeUpdate stores, tags, alerts, and organization settings
Manufacturingmanufacturing:readView BOMs, manufacturing orders, and MRP plans
manufacturing:writeCreate and update BOMs, manufacturing orders, and MRP runs
Material Planning (MRP)mrp:readView MRP runs, planned orders, exceptions, the master production schedule, and capacity plans
mrp:runRun and cancel MRP, and maintain planning policies, schedules, calendars, and scenarios
mrp:releaseCarry Out planned orders — create real purchase orders, manufacturing orders, and warehouse transfers
Send Plannersend-plans:readView send plans, scenarios, network rules, draft results and regional coverage (estimated 2-day reach, playback history)
send-plans:writeCalculate plans and scenarios, override lines, recompute a line's regional coverage, change network rules, allocate stock, create inbound drafts in each network and draft supplier purchase orders shipped direct to a network
Subscriptionssubscriptions:readView subscription offerings
subscriptions:writeCreate, update, and delete subscription offerings
Integrationsintegrations:readView connected integrations and the data they sync: channel orders, FBA and AWD inventory, ledgers, shipments, inbound plans, customer returns, reimbursements and reports
integrations:writeConnect, configure and sync integrations, and act on what they sync: process inbound shipments and ledgers, map listings and FNSKUs, reconcile, archive
Channel Healthchannel-health:readView marketplace seller-performance metrics, their history, shipment flags, and alert thresholds
channel-health:writeRefresh channel health, dismiss or correct flagged shipments, and change alert thresholds
Success Plansuccess_plan:readView the success plan: goals, labeled readings and their records, check-ins, consent, the story log, and the case-study data export
success_plan:writeEdit goals, baselines and the profile, answer check-ins, change sharing consent, record staff readings and notes, and attach drafts for review
Amazon Recoveryrecovery:readView Amazon Recovery cases, their evidence, filing packs, and matched reimbursements
recovery:writeTriage, file, and record Amazon's responses on Amazon Recovery cases
Advertisingadvertising:readView ad connections and accounts, spend, ACoS, TACoS and POAS, Ad Health, guardrail signals and policies, change sets and the decision inbox
advertising:writePropose ad changes (bids, budgets, pauses), approve, reject or undo them where the user's role allows, edit guardrail policies, automation settings and ad account settings, and run guardrail evaluations
Background Jobsjobs:readView background job status, progress, and results
jobs:writeCancel and retry background jobs
Supportsupport:readView support tickets, replies, watchers, and attachments
support:writeOpen support tickets, reply, add watchers, and resolve or reopen tickets
TikTok Postingtiktok-posts:readView TikTok posts, connected TikTok accounts, and live creator info
tiktok-posts:writeCreate and edit TikTok posts and upload videos for them
tiktok-posts:approveApprove, reject, or resolve TikTok posts awaiting approval; approving publishes the post to TikTok

The same catalog is available to your own code at GET /api/developer/scopes, which is what the token checklist, the OAuth consent screen, and the OAuth Applications page all read. Fetch it rather than hard-coding this table if you build tooling around scopes.

What each group reaches​

Scope groups follow the product, not the URL. One group usually covers a whole family of endpoints:

GroupCovers, among others
Sales OrdersOrders and order lines, fulfillment orders, shipments, channel refund requests, artwork and decoration
ProductsProducts, SKUs and variants, attributes, brands, categories, listings, content sync, Amazon offer evidence for brand-watched ASINs
InventoryStock levels and allocations, inventory adjustments, assemblies, FIFO layers, COGS revaluation
CustomersCustomers and contacts, receivables, customer statements
SuppliersSuppliers, payables, supplier statements, invoice reminders
Purchase OrdersPurchase orders, bills, cost entries, consignment, amortization schedules
WarehousesWarehouses and locations, pick lists, LPNs, put-away, warehouse transfers
ReportsReport builder, custom reports, financial reports, analytics, brand reports and each brand's reporting settings
WebhooksSubscriptions, their delivery history, and the event catalog
Returns & RMAsRMAs, return receipts, dispositions
AccountingTransactions, payments, bills, vendor credits, financial settings, and the money side of every connected app: settlements, payouts, fee and settlement mappings, FIFO cost layers, COGS and valuation
Settings & OrganizationStores, tags, alerts, currencies, incoterms, order import rules, onboarding
ManufacturingBOMs, manufacturing orders, MRP runs
Material Planning (MRP)MRP runs, planned orders, exceptions, the master production schedule, capacity, planning policies, calendars and scenarios, and Carry Out
Send PlannerSend plans, scenarios and send runs, network rules, capacity limits and product overrides, allocating stock, shipment drafts, and supplier purchase orders to a network
SubscriptionsSubscription offerings
Duty RatesDuty rates, customs jurisdictions and coverage, customs entries and their matches to purchase-order lines
Send PlannerSend plans, scenarios, network rules, regional coverage, and the inbound drafts and supplier orders a plan creates
Channel HealthMarketplace seller-performance metrics, their history, flagged shipments and alert thresholds
Success PlanYour success plan: goals, readings, check-ins, consent and the story log
AdvertisingAd connections and accounts, spend and ad metrics, guardrails, proposed ad changes and the decision inbox, and Amazon Ads connections
TikTok PostingTikTok posts, connected TikTok accounts and video uploads. Approving a post has its own scope, tiktok-posts:approve, because approving publishes it
IntegrationsEverything a connected sales channel, 3PL or app syncs or runs: the connection and its settings, channel orders, FBA, AWD and WFS inventory and ledgers, inbound shipments and receipts, returns, reimbursements, reports, mappings, and sync actions
Amazon RecoveryAmazon Recovery cases, their evidence and filing packs, and the reimbursements matched to them
Background JobsThe background jobs behind exports and other long tasks: list them, poll one for progress and its download, cancel, retry
SupportYour SKU.io support tickets: open one, read the thread, reply, add watchers, resolve or reopen

Brand reports follow the same rule as the app: a token needs the Reports scope and the user's Brand Reports permission (Index to read, Manage to change settings and notes, Send to deliver reports and manage share links). The Amazon offer evidence behind a brand report uses the Products scope but still needs Brand Reports → Index, because it shows other sellers' prices. A report's public share link needs no token at all; the link itself is the credential.

The Send Planner follows the same rule: a token needs the Send Planner scope and the user's Send Planner permission (View to read, Edit to change plans and rules, Draft to allocate stock and create drafts), plus the permissions a draft needs in its network. See Send Planner permissions.

Connected sales channels, 3PLs and apps​

Every connected app follows the same three-way split, so you can predict the scope for any endpoint without looking it up:

What the endpoint handlesScope
Money and cost: settlements, payouts, transactions, fee and settlement mappings, FIFO cost layers, COGS, valuationAccounting
Channel listings (the products a channel sells)Products
Everything else the app syncs or runsIntegrations

Accounting and payment apps (QuickBooks Online, Xero, Bill.com, Mercury, PayPal, Stripe, Numeral) use Accounting throughout. A few surfaces keep a group of their own: Amazon Recovery cases use Amazon Recovery, and Amazon Ads connections use Advertising.

So an Amazon integration that reads AWD shipments, FBA ledgers, and customer returns needs integrations:read; one that also reads settlements or FIFO layers adds accounting:read.

Most endpoints follow the method: a read is :read and a change is :write. A handful of reads also do something, such as calling the channel to download its locations, or emailing a supplier. Those need :write as well, and the refusal names it in required_scope.

An asynchronous export hands back a background job rather than the file. Polling that job for its progress and download link needs jobs:read, so an integration that exports needs the area's own scope plus Background Jobs → Read.

For most endpoints the method decides the action: a GET needs :read, and a POST, PUT, PATCH, or DELETE needs :write. Material Planning is the exception. Each of its endpoints names the scope it needs, because two of its changes are separate scopes:

Material Planning endpointsScopeAlso accepted
Read runs, planned orders, exceptions, the schedule and capacitymrp:readmanufacturing:read
Run or cancel a plan, and maintain policies, schedules, calendars and scenariosmrp:runmanufacturing:write
Carry Out planned ordersmrp:releasemanufacturing:write

The Also accepted column keeps tokens made before the Material Planning scopes existed working. For a new integration, grant the narrow scope: a nightly job that only runs the plan should hold mrp:run, so it can never create a purchase order. There is no mrp:write.

Choosing scopes​

Scopes are picked from the checklist in the Create Access Token and Edit Token dialogs.

The Scopes section of the token dialog, with quick presets and a ladder per group

Most groups are one row with a ladder: None → Read → Read & Write. Moving a group to Read & Write grants both of its scopes; moving it back to Read drops the write one. Webhooks reads None → Read → Read & Manage instead, because that group's second action is manage.

Material Planning (MRP) is different: it has a separate button for each of Read, Run and Release, and you can switch each one on or off on its own. A token that runs the nightly plan can have Run without Release.

The Material Planning row, with separate Read, Run and Release buttons

Quick presets sit above the list:

PresetWhat it does
Read-onlyGrants every group's read scope — 19 scopes, no ability to change anything
Read & write allGrants every scope. The token can do everything its owner can do, so use it only for a credential you fully control
ClearReturns every group to None

A preset skips any scope your role can't use, and says how many it skipped.

Quick presets with Read-only applied, showing each group on Read

Underneath the list, a running summary shows exactly what you're about to grant:

The live summary reading This token will carry 19 scopes, with one chip per scope

Check that count before you create the token. It's the quickest way to catch a preset you clicked and forgot about.

Endpoints that need two scopes​

A handful of endpoints join two areas of the product, and a token needs both scopes to call them — one of the two is not enough.

Both scopes neededEndpoints
customers + ordersCustomer receivables, AR summary, AR communications, statement (view, preview, export, send), and payment requests
purchase-orders + suppliersSupplier payables, AP summary, supplier statement (view, export), invoice reminders, and invoice requests
purchase-orders + reportsRebuilding purchase order return metrics

The read or write half is chosen per request in the usual way, so GET /api/customers/{id}/receivables needs customers:read and orders:read, while POST /api/customers/{id}/request-payment needs customers:write and orders:write.

Webhooks work slightly differently​

Webhooks use read and manage rather than read and write, and the read-only endpoints accept either scope:

EndpointScope
List subscriptions, view one, view its deliverieswebhooks:read or webhooks:manage
List the event catalog, fetch a sample payloadwebhooks:read or webhooks:manage
Create, delete, enable, disable, or send a test deliverywebhooks:manage

A token that can create and delete subscriptions can already list them, so webhooks:manage on its own is enough for the whole surface. You don't need to add webhooks:read alongside it.

AI assistant access is separate​

Connecting an AI assistant over the Model Context Protocol uses its own ability, mcp:access, which is deliberately absent from the checklist. An assistant gets it only by connecting through Settings → Developer → MCP Server, never from this page. When you connect Claude, ChatGPT or Cursor, the sign-in page also grants the read scopes above (View data) and, for each area you tick under Allow changes, its write scopes. Those scopes decide which of the reviewed assistant actions it may use, but its token still works only through the AI connection: sent to the REST API directly, it's refused. See Connect an AI assistant.

What a refused request looks like​

403 — the token is missing a scope​

{
"message": "Token is missing the required scope: orders:write",
"error": "insufficient_scope",
"required_scope": "orders:write"
}

error is the one-word diagnosis — insufficient_scope means the fix lives on the token. required_scope is the machine-readable copy: add that scope to the token and retry. Where an endpoint accepts either of two scopes, the message lists both and required_scope names the narrower one.

The same refusal also arrives as a standard authentication challenge, so you can recognize it from the headers alone:

www-authenticate: Bearer error="insufficient_scope", scope="orders:write"

403 — the endpoint is session-only​

{
"message": "This endpoint is not available to API tokens."
}

Some endpoints answer this way instead:

{
"message": "This endpoint requires a signed-in session: use it in SKU.io in your browser. API tokens cannot call it."
}

Both mean the same thing: nothing you add to the token changes the answer. Every endpoint you can reasonably automate is open to a scope, and these are the ones closed on purpose:

  • Connecting an app: starting or finishing a sign-in with a sales channel, accounting app or other service, which happens in the browser.
  • Managing credentials: creating or rotating tokens, two-factor authentication, your profile and password, connected apps, sessions, and any endpoint that would hand back a password or key.
  • Changing users and roles: inviting, editing or removing users and changing roles. Who can do what is changed by a person, never by a token. Reading the user list and roles needs only settings:read.
  • Seeing the portal as a buyer: impersonating a portal customer.
  • Screen helpers: saved dashboard layouts, pins, field pickers, setup-wizard progress, search, and the in-app AI assistant. API clients use the AI assistant connection instead.

Do these in SKU.io in the browser. None of them appears in the API reference.

401 — the credential itself didn't work​

A 401 carries a code so you don't have to guess which of the failure modes it was:

codeMeaning
ERR_UNAUTHENTICATEDNo credential was sent at all
ERR_TOKEN_EXPIREDA genuine token, past its expiry. The response includes expired_at
ERR_TOKEN_REVOKEDThe token no longer exists — revoked, or never issued
ERR_TOKEN_INVALIDRight shape, wrong secret
ERR_TOKEN_MALFORMEDNot a shape SKU.io issues — usually a truncated paste, a doubled Bearer prefix, or an unsubstituted placeholder

Treat 401 as "re-authenticate" and 403 as "this credential is valid but not allowed to do that".

A token can also be refused for reasons that have nothing to do with scopes: an IP allowlist that doesn't include the caller, or a per-token rate limit. Those are covered in Manage your personal access tokens.

For the full error catalogue — every status code the API returns, the body shape that comes with it, and how to send the credential in the first place — see Errors and Authentication on developer.sku.io.

Scopes don't override permissions​

A scope opens a door; your role decides whether you may walk through it. Both checks run, and the stricter one wins.

Account-wide settings are the clearest example. Writing a setting needs the token to carry settings:write and the token's owner to hold the settings.update permission. Granting the scope to a user who lacks the permission changes nothing — the request is still refused.

That refusal is a 403 too, but it's a different one, and it says so:

{
"message": "Your user account is missing the required permission: settings.update. This is a role permission, not a token scope — the token itself is valid.",
"error": "insufficient_permission",
"required_permissions": ["settings.update"]
}

insufficient_permission is the signal that no amount of scope editing helps: required_permissions names what the owner's role is missing, and it carries no www-authenticate header, because the credential was never in question. Fix it by having an administrator add those permissions to the owner's role, or by re-issuing the token from an account that already holds them.

This is why granting Read & write all to a token is bounded by who created it: the token can do everything its owner can do, and nothing more.

The scope picker flags this before you ever make a call — see Fix a 403 from your API token.

Changing a token's scopes​

Scopes aren't frozen at creation. Edit the token to add or remove them without re-issuing the secret, so integrations keep working while their permissions change.

Adding a write or manage scope to an existing token asks you to re-enter your password first, the same as creating one — and to pass two-factor verification if you have it switched on. Removing scopes asks for neither.

Next steps​

Last verified: