What a 403 Actually Means #
You've got working credentials, an access token comes back fine, and then the call returns this:
{
"errors": [
{
"code": "Unauthorized",
"message": "Access to requested resource is denied.",
"details": ""
}
]
}
The frustrating part: a 403 rarely means your Login-with-Amazon (LWA) credentials are wrong. If the client ID, client secret, or refresh token were bad, you'd get a 401 or a token-grant error before you ever reached the operation. A 403 means you authenticated fine, but you're not allowed to do this specific thing — a role, a region, an authorization scope, or a restricted-data requirement is out of alignment.
Rule of thumb: 401 = who are you (auth/token). 403 = you're known, but not permitted (roles/scope). 429 = you're permitted, but going too fast (throttling). Fixing a 403 like it's a credentials problem wastes hours — it's almost always a permissions problem.
Cause 1 — The Operation's Role Isn't Granted #
This is the single most common cause. Every SP-API operation requires a specific role (Inventory & Order Tracking, Pricing, Direct-to-Consumer Shipping, etc.). If your application wasn't registered with the role that operation needs, you get a 403 — even though the same token happily calls other endpoints.
- Check the operation's reference page for its required role.
- Confirm your app has that role in the Developer Central / Solution Provider Portal app config.
- The catch that traps everyone: if you added a role after the seller already authorized your app, the existing refresh token does not carry the new role. The seller must re-authorize so a fresh refresh token is minted with the expanded scope.
Roles you never requested can't be granted later for free. Adding a role always requires re-consent. Plan roles up front — the free SP-API Access Checklist lists which roles map to which use cases.
Cause 2 — You Need a Restricted Data Token (PII Operations) #
Operations that return personally identifiable information — buyer name, shipping address, buyer email, on getOrder, getOrderItems, getOrderAddress, and the reports that contain PII — will return a 403 (or silently redacted fields) if you call them with a normal access token.
These require a Restricted Data Token (RDT): you call the Tokens API first, describe the exact restricted resource you want, get back a short-lived RDT, and use that as the x-amz-access-token for the PII call.
POST /tokens/2021-03-01/restrictedDataToken
{
"restrictedResources": [
{ "method": "GET", "path": "/orders/v0/orders/{orderId}/address",
"dataElements": ["shippingAddress"] }
]
}
If you request an RDT for a path or data element your app's roles don't cover, the RDT request itself 403s — which loops you back to Cause 1 (you need the Direct-to-Consumer Shipping / PII role first).
Full walkthrough: How to Pull Buyer PII Legally with the Restricted Data Token covers the entire RDT flow with working code.
Cause 3 — Wrong Regional Endpoint for the Marketplace #
SP-API has three regional endpoints, and your authorization is region-bound. Call the wrong one and you get a 403, because your token has no authority in that region.
| Region | Endpoint | Covers |
|---|---|---|
| North America | sellingpartnerapi-na.amazon.com | US, CA, MX, BR |
| Europe | sellingpartnerapi-eu.amazon.com | UK, DE, FR, IT, ES, NL, SE, PL, plus IN, AE, SA, EG, TR |
| Far East | sellingpartnerapi-fe.amazon.com | JP, AU, SG |
A US seller's token used against the EU endpoint is a classic 403. Match the endpoint to the marketplace the seller authorized in.
Cause 4 — The Seller Never Authorized (or Revoked) Your App #
For a public/multi-seller app, a 403 on a specific seller's data usually means that seller's authorization is missing or was revoked. Your refresh token maps to one selling partner; if that grant is gone, so is your access.
- Confirm the seller completed the OAuth authorization flow (not just installed a draft).
- Check whether the seller revoked access in Manage Your Apps.
- If a seller re-authorized, make sure you're using the newest refresh token, not a stale cached one.
Cause 5 — Marketplace Not in Your Authorization Scope #
Even within the right region, a seller may have authorized you for some marketplaces and not others. Passing a marketplaceIds value the seller didn't grant returns a 403. Call GET /sellers/v1/marketplaceParticipations with the token to see exactly which marketplaces that authorization covers, and only pass those.
Cause 6 — Draft App Limits and Unpublished Operations #
A draft app can self-authorize and hit production for your own account, but it's limited to the roles you configured. If you're calling an operation whose role you didn't attach to the draft — or an operation gated behind an approval you don't have — that's a 403. Add the role in the app config, then self-authorize again to regenerate the token with the new scope.
Cause 7 — Legacy AWS SigV4 / IAM Leftovers #
Amazon dropped the AWS SigV4 signing requirement for SP-API in 2023 — you no longer need an IAM user, role ARN, or STS AssumeRole call. If you inherited older code that still signs requests with AWS credentials and assumes a role, a broken or expired IAM setup can surface as a 403. The fix is usually to remove the SigV4 layer entirely and send just the LWA access token in x-amz-access-token.
Cause 8 — You're Actually Being Throttled #
Throttling normally returns 429, not 403 — but under burst conditions, or through certain proxies and gateways, aggressive rate-limit behavior can present confusingly. Read the x-amzn-RateLimit-Limit response header, back off exponentially on 429, and never poll the Reports API in a tight loop. If your 403s correlate with request volume rather than a specific operation, treat it as a rate problem first.
A Fast Triage Order #
When a 403 lands, check in this order — it resolves the vast majority in minutes:
- Is it a PII operation? → you need an RDT (Cause 2).
- Does the operation's required role match your app's roles? → grant it and re-authorize (Cause 1).
- Right regional endpoint for this marketplace? → fix the host (Cause 3).
- Is this marketplace in the authorization? → check marketplaceParticipations (Cause 5).
- Is the seller still authorized? → re-consent if needed (Cause 4).
- Any old AWS SigV4 code in the path? → remove it (Cause 7).
Would rather not chase this? Getting access and roles right the first time is most of the battle — I set up SP-API integrations for sellers and agencies, and unblocking a stalled 403 is a common day-one task.
FAQ #
Why do I get a 403 on getOrder but not on getOrders?
Because getOrder can return buyer PII (name, address) and getOrders at the list level may not. PII-bearing operations require a Restricted Data Token and the Direct-to-Consumer Shipping role; the list call often doesn't.
Is a 403 a credentials problem?
Almost never. Bad credentials produce a 401 or a failed token grant. A 403 means you authenticated successfully but aren't authorized for that specific operation, marketplace, region, or data element.
I added a role but still get 403. Why?
Adding a role in the app config isn't enough — the seller (or you, for a private app) must re-authorize so a new refresh token is issued that carries the added role. Old tokens keep their original, narrower scope.
Do I still need AWS IAM credentials for SP-API?
No. Amazon removed the AWS SigV4 signing requirement in 2023. You only need your LWA access token. Leftover IAM/SigV4 code is now a common source of confusing 403s.
Does throttling cause a 403?
Throttling is normally a 429. But in bursty conditions it can look like access denial. Check the rate-limit headers and back off before assuming a permissions issue if the errors track request volume.
Related guides
Amazon SP-API
The SP-API Reports Pattern Everyone Gets Wrong (Async, Step by Step)
The SP-API Reports API is asynchronous — request, poll, download, decompress — and most broken integrations either treat it like a synchronous call or poll it straight into a throttle. Here's the correct four-step flow, the status states that trip people up, and the gzip gotcha at the end.
Read guide →Amazon SP-API
Amazon Vendor Central API: What 1P Vendors Can Actually Automate
Vendor Central (1P) has a real API surface through the SP-API vendor family — retail analytics, purchase orders, shipments, invoices, and direct fulfillment. Here's what's genuinely automatable, what still isn't, and where the fastest wins are for a 1P vendor.
Read guide →Amazon SP-API
Amazon Solution Provider Portal (SPP) Setup: Full Guide for Developers (2026)
Before you can build an SP-API app that other sellers authorize, you need a verified developer profile in Amazon's Solution Provider Portal. This is the full 2026 walkthrough: developer registration and verification, registering your app, LWA credentials, roles, redirect URIs, and getting a seller to authorize you.
Read guide →Don't want to build this yourself?
I set this up for sellers and agencies every week. Book a free 30-minute audit of your Amazon data & PPC setup — you'll leave with a plan either way, whether we work together or not.