Skip to content

Scopes

A scope is a permission your access token carries. On v2, a scoped service checks for its one scope on every call and answers 403 without it. v1 checks each route against the scopes that admit it.

Two rules decide whether a call goes through, on v1 and v2 alike:

  • The token’s scopes are what count. The scope list on your registered application is not consulted at call time. Only the scopes minted into the token are.
  • Holding any one of a route’s scopes is enough. A route lists the scopes that admit it, and one match authorizes the call. It is any of, not all of.

Each row is one scope in the registry, with the routes this portal publishes for it.

ScopeWhat it opensPublished routes
legacyAccess to all "legacy" endpoints for all integrations.
20 routes
  • GET /v1/customStores
  • GET /v1/import/validation/results/{validationID}
  • GET /v1/inventory
  • GET /v1/inventory/{SKU}
  • GET /v1/report
  • GET /v1/report/{reportId}
  • GET /v1/salesOrder
  • GET /v1/salesOrder/{orderNumber}
  • GET /v1/simpleInventory/{SKU}
  • GET /v1/vendor/{id}
  • GET /v1/warehouse/{id}
  • GET /v1/warehouses
  • POST /v1/import/validation/{importDefinitionId}
  • POST /v1/integration/{integrationId}/connectionStatus
  • POST /v1/inventory
  • POST /v1/report
  • POST /v1/salesOrder
  • POST /v1/salesOrder/cancel/{orderNumber}
  • POST /v1/salesOrder/markPaid/{orderNumber}
  • POST /v1/salesOrder/shipments
deliverrAccess to the custom Deliverr integration endpoints.No published route
inventoryFull access to inventory endpoints for all warehouses.
6 routes
  • GET /v1/inventory
  • GET /v1/inventory/{SKU}
  • GET /v1/simpleInventory/{SKU}
  • GET /v1/warehouse/{id}
  • GET /v1/warehouses
  • POST /v1/inventory
inventory:selfCan only see warehouses that use the integration in the SC. And only inventory in those warehouses will be returned or able to be modified.
10 routes
  • GET /v1/inventory
  • GET /v1/inventory/{SKU}
  • GET /v1/warehouse/{id}
  • GET /v1/warehouses
  • GET /v2/inventory
  • GET /v2/inventory/status
  • GET /v2/inventory/warehouses
  • POST /v1/integration/{integrationId}/connectionStatus
  • POST /v1/inventory
  • POST /v2/inventory
inventory:warehouseAccess to all warehouses
2 routes
  • GET /v1/warehouse/{id}
  • GET /v1/warehouses
inventory:warehouse:selfAccess to all warehouses that use the integration in the SC.
3 routes
  • GET /v1/warehouse/{id}
  • GET /v1/warehouses
  • POST /v1/integration/{integrationId}/connectionStatus
listingReserved for the futureNo published route
listing:selfCan retrieve listings and submit listing status and submissions for the integration in the SC.
6 routes
  • GET /v1/listing
  • GET /v1/listing/{listingid}
  • POST /v1/integration/{integrationId}/connectionStatus
  • POST /v1/listing/status
  • POST /v1/listing/submissions
  • POST /v1/listing/submissions/{submissionID}/inventoryDetails
salesFull access to sales orders for all integrations.
8 routes
  • GET /v1/customStores
  • GET /v1/salesOrder
  • GET /v1/salesOrder/{orderNumber}
  • POST /v1/integration/{integrationId}/connectionStatus
  • POST /v1/salesOrder
  • POST /v1/salesOrder/cancel/{orderNumber}
  • POST /v1/salesOrder/markPaid/{orderNumber}
  • POST /v1/salesOrder/shipments
sales:ordersCurrently the same as `sales` but reserved to allow that to expand to other sales endpoints.
8 routes
  • GET /v1/customStores
  • GET /v1/salesOrder
  • GET /v1/salesOrder/{orderNumber}
  • POST /v1/integration/{integrationId}/connectionStatus
  • POST /v1/salesOrder
  • POST /v1/salesOrder/cancel/{orderNumber}
  • POST /v1/salesOrder/markPaid/{orderNumber}
  • POST /v1/salesOrder/shipments
sales:orders:selfCan retrieve, create, update sales orders for the integration in the SC
8 routes
  • GET /v1/salesOrder
  • GET /v1/salesOrder/{orderNumber}
  • POST /v1/integration/{integrationId}/connectionStatus
  • POST /v1/salesOrder
  • POST /v1/salesOrder/cancel/{orderNumber}
  • POST /v1/salesOrder/markPaid/{orderNumber}
  • POST /v1/salesOrder/{orderNumber}/alert
  • POST /v1/salesOrder/{orderNumber}/confirmStatus
sales:orders:fulfillment:selfIncludes Address information in each Sales Order
16 routes
  • GET /v1/salesOrder
  • GET /v1/salesOrder/{orderNumber}
  • GET /v2/shipping/fulfillment_order
  • GET /v2/shipping/need_to_cancel
  • GET /v2/shipping/need_to_ship
  • GET /v2/shipping/status
  • POST /v1/integration/{integrationId}/connectionStatus
  • POST /v1/salesOrder/accept/{orderNumber}
  • POST /v1/salesOrder/shipments
  • POST /v1/salesOrder/{orderNumber}/alert
  • POST /v2/shipping/fulfillment_orders/acknowledge
  • POST /v2/shipping/fulfillment_orders/alerts
  • POST /v2/shipping/fulfillment_orders/alerts/resolve
  • POST /v2/shipping/fulfillment_orders/confirm_cancellations
  • POST /v2/shipping/fulfillment_orders/reject
  • POST /v2/shipping/shipments
sales:orders:inventory:selfRead-only: can retrieve sales orders for the integration in the SC. No create or update access.
3 routes
  • GET /v1/salesOrder
  • GET /v1/salesOrder/{orderNumber}
  • POST /v1/integration/{integrationId}/connectionStatus
scmFull access to scm endpoints: inbound shipments, purchase orders, vendors, and warehouses.
3 routes
  • GET /v1/vendor/{id}
  • GET /v1/warehouse/{id}
  • GET /v1/warehouses
scm:purchase_ordersAccess to purchase orders.No published route
scm:inbound_shipmentsAccess to inbound shipments.No published route
reportFull access to reports.
5 routes
  • GET /v1/import/validation/results/{validationID}
  • GET /v1/report
  • GET /v1/report/{reportId}
  • POST /v1/import/validation/{importDefinitionId}
  • POST /v1/report
uiInternal scope for the Zentail web app, not for third-party integrations. Covers import validation, inbound shipments, purchase orders, vendors, and warehouses.
5 routes
  • GET /v1/import/validation/results/{validationID}
  • GET /v1/vendor/{id}
  • GET /v1/warehouse/{id}
  • GET /v1/warehouses
  • POST /v1/import/validation/{importDefinitionId}
mcpUndocumentedUndocumented. This scope is in the registry but the authentication reference does not describe it.No published route

"No published route" does not always mean "does nothing". Five scopes — deliverr, listing, scm:purchase_orders, scm:inbound_shipments and mcp — open no route in the APIs published here. Some cover endpoints outside this portal; others are reserved and unused. Either way, holding one buys you nothing on the routes above.

Where a scope’s description and its routes disagree, trust the routes. The descriptions come from an internal reference, and it can lag: some scopes — mcp and ui — carry no description at all. The route column is generated from the same specification the API reference is built from, so it moves when the API does.

Decide from that column before you register, not after. Your application’s scopes are fixed at registration (below). Adding one later is possible, but it does not reach any seller who has already installed your application — so a scope skipped on the strength of a stale description has to be chased down install by install.

mcp is in the registry and marked Undocumented above. A token can hold it, but the authentication reference does not say what it grants.

Your scopes are fixed when your application is registered

Section titled “Your scopes are fixed when your application is registered”

Your application’s scopes are set during registration. The authorization request has no scope parameter you can influence — a scope value sent with it is ignored, and every token minted for your application carries the set that was registered.

A scope added to your application later does not reach sellers who have already installed it. Installing writes the application’s scope set onto the integration once, when the integration is created. A seller reauthorizing an existing integration reactivates it without rewriting that set, so their token keeps the scopes it was minted with.

A scoped service checks one scope for the whole service, not one per operation. The inventory integration service and the fulfillment integration service each build one authorizer for the whole service, so every operation on that service carries the one scope the authorizer enforces: inventory:self for the 4 inventory operations, sales:orders:fulfillment:self for the 10 fulfillment operations.

The sales-channel /v2/storefront services are authenticated but not scope-gated, so the reference shows no scope requirement against their operations. That is a fact about those services today, not a rule for every service.

A call to a scoped service without its scope answers 403, and the message names the missing scope. See Errors.

API changelog · Built 0c509dd3