Amazon SP-API 8 min read

Amazon SP-API 403 Unauthorized: Every Cause and How to Fix It

A 403 "Access to requested resource is denied" from the SP-API almost never means your credentials are wrong — it usually means a role, a token, a region, or an authorization is mismatched. Here are the eight causes that produce a 403, in the order worth checking them, with the exact fix for each.

Updated Jul 2026
Amazon SP-API 403 Unauthorized: Every Cause and How to Fix It

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.

A padlock on a gate, representing an access-denied API response
A 403 almost never means your credentials are wrong.

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 Americasellingpartnerapi-na.amazon.comUS, CA, MX, BR
Europesellingpartnerapi-eu.amazon.comUK, DE, FR, IT, ES, NL, SE, PL, plus IN, AE, SA, EG, TR
Far Eastsellingpartnerapi-fe.amazon.comJP, 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 — and SigV4 isn't the only Amazon change with a date on it, since Orders v0 and Finances v0 have published removal dates. 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.

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.

Found this helpful? Share it:

WhatsApp