Amazon's Product Advertising API 5 (PA-API) is retired: calls now return HTTP 403 with an AccessDeniedException telling you to migrate to the Creators API. That successor requires an Amazon Associates account with at least 10 qualifying sales in the past 30 days. If you do not have those sales, or you need seller-side data such as other sellers' offers, price history or seller feedback, a product data API is the alternative: the SellerMagnet API needs one API key and no sales history.
Key Takeaways
- PA-API 5 answers 403 AccessDeniedException, and its old documentation pages now lead to Amazon's deprecation notice.
- The Creators API replaces PA-API 5 for Associates and requires at least 10 qualifying sales in the past 30 days.
- The Creators API lists four operations: SearchItems, GetItems, GetVariations and GetBrowseNodes.
- The SellerMagnet API adds what those four do not cover: other sellers' offers, recorded price and rank history, seller feedback and sales estimates.
- GetItems maps to /amazon-product-lookup and SearchItems to /amazon-search; lookup takes one ASIN per request.
What happened to the Product Advertising API?
Amazon deprecated PA-API 5 in 2026 and moved Associates to the Creators API. An application that still calls the old endpoint gets a 403 whose message says PA-API is deprecated and names the Creators API as the way forward, and the former PA-API documentation URLs now lead to that notice (checked September 2026). Amazon's own pages give no retirement date, which is why third-party articles quote different ones. There is no grace mode: code that has not migrated no longer receives product data.
Detect the retired endpoint in an old integration
def is_pa_api_retired(status_code: int, body: dict) -> bool:
"""True for the answer PA-API 5 now gives every call."""
errors = [e for e in body.get("Errors") or [] if isinstance(e, dict)]
return status_code == 403 and (
str(body.get("__type", "")).endswith("AccessDeniedException")
or any("deprecated" in str(e.get("Message", "")).lower() for e in errors))
answer = {"__type": "com.amazon.paapi5#AccessDeniedException",
"Errors": [{"Code": "AccessDenied",
"Message": "Product Advertising API is deprecated. Please migrate to Creators API..."}]}
print(is_pa_api_retired(403, answer)) # True
Who can use the Creators API?
Amazon describes the Creators API as catalog access for publishers, influencers and affiliate partners. Access requires an Associates account with at least 10 qualifying sales within the past 30 days, and credentials are generated in Associates Central - the old PA-API key pair is not reused. It fits an affiliate site that already earns commission. It does not fit a new site without sales yet, a seller tool, a repricer or a research pipeline that never links to Amazon. Amazon's Selling Partner API is the other official route, but it is built for registered sellers and vendors working on their own accounts.
| Amazon Creators API | SellerMagnet API | |
|---|---|---|
| Access | Associates, 10 sales / 30 days | Account + API key |
| Credentials | Generated in Associates Central | One API key |
| Operations | 4 operations | 10 endpoints |
| Price / rank history | Current values only | /amazon-product-statistics |
| Other sellers' offers | Featured offer only | /amazon-product-offers |
| Seller feedback | Not available | /amazon-seller-review |
| Sales estimates | Not available | /amazon-product-search-estimated-sells |

How do PA-API calls map to SellerMagnet endpoints?
Every SellerMagnet endpoint is a plain GET with query parameters and the key in an X-Api-Key header - no request signing, no partner tag. The main difference in shape: PA-API's GetItems accepted up to 10 ASINs per call, while product lookup takes one, so a batch becomes a small thread pool. The bulk ASIN lookup guide covers pacing.
| PA-API operation | SellerMagnet | Note |
|---|---|---|
GetItems | /amazon-product-lookup | One ASIN per call |
SearchItems | /amazon-search | First page, count <= 50 |
GetVariations | lookup: productInfo.variations | Children + attributes |
GetBrowseNodes | /amazon-categories + /amazon-bestsellers | IDs per marketplace |

The function below returns the fields most GetItems integrations used - title, detail page URL, price, currency and main image - from product lookup, so templates that consumed PA-API items keep working. get(), new_session() and ApiError come from the Python quickstart.
get_items.py - a GetItems-shaped result from product lookup
import threading
from concurrent.futures import ThreadPoolExecutor
import requests
from sellermagnet import ApiError, get, new_session
ASSOCIATE_TAG = None # e.g. "yoursite-20" if you are an Amazon Associate
_local = threading.local()
def session():
if not hasattr(_local, "session"):
_local.session = new_session()
return _local.session
def get_item(asin: str, marketplace_id: str) -> dict:
try:
p = get(session(), "amazon-product-lookup", asin=asin, marketplaceId=marketplace_id)["productInfo"]
except ApiError as err:
return {"ASIN": asin, "Error": err.status}
except requests.RequestException as err: # keep the batch on a network error
return {"ASIN": asin, "Error": type(err).__name__}
price = p["buyBoxInfo"].get("price")
url = p["link"] + (f"?tag={ASSOCIATE_TAG}" if ASSOCIATE_TAG else "")
return {
"ASIN": p["asin"],
"DetailPageURL": url,
"Title": p["title"],
"Price": price if isinstance(price, (int, float)) else None, # "N/A" = no featured offer
"Currency": p["buyBoxInfo"].get("currencyCode"),
"Image": p.get("mainImage"),
}
def get_items(asins: list[str], marketplace_id: str = "ATVPDKIKX0DER") -> list[dict]:
with ThreadPoolExecutor(max_workers=5) as pool:
return list(pool.map(lambda a: get_item(a, marketplace_id), asins))
for item in get_items(["B0CL61F39H"]):
print(item)
How do I replace SearchItems?
/api/amazon-search takes a keyword q, a marketplace ID and count up to 50, and returns the first results page in page order with position, asin, productTitle, the price as a string and a sponsored flag, plus link and mainImage. Products without a displayed price are skipped, and a count above 50 is a billed 400, so cap it in your code.
SearchItems equivalent with curl and jq: organic results only
curl -sG "https://sellermagnet-api.com/api/amazon-search" \
-H "X-Api-Key: $SELLERMAGNET_API_KEY" --max-time 120 \
--data-urlencode "q=usb c charger" \
--data-urlencode "marketplaceId=A1PA6795UKMFR9" \
--data-urlencode "count=20" \
| jq -r '(.data.searchResults // [])[] | select(.sponsored | not)
| [.position, .asin, .listingPrice.price.total, .productTitle] | @tsv'
What does the product data API add beyond PA-API?
- Offers from the first page of a listing's offer list, featured offer included, with seller, condition, FBA or FBM and landed price - see the offer listing guide.
- Recorded Buy Box, Amazon, FBA and FBM price history plus sales rank history - see the price history guide.
- Seller feedback counts per period and estimated monthly sales for an ASIN.
- 23 marketplaces with one key (history and sales estimates on 11), and no dependency on your affiliate revenue.
Frequently Asked Questions
Does PA-API 5 still work?
No. Calls return HTTP 403 with an AccessDeniedException that points to the Creators API, and the old documentation now leads to Amazon's deprecation notice.
What do I need for the Creators API?
An Amazon Associates account with at least 10 qualifying sales in the past 30 days, and credentials generated in Associates Central.
Can I still add my Associates tag to links?
Yes. Lookup returns a plain product link; append ?tag= with your tracking ID if you are an Amazon Associate.
Is there a batch GetItems equivalent?
No. Product lookup takes one ASIN per request and costs one credit; run several requests in parallel with a small worker pool.
Do I need affiliate sales to use the SellerMagnet API?
No. An account and an API key are enough; a free account includes 150 credits.
Bottom line: if you run an affiliate site with steady sales, the Creators API is Amazon's official path. For everything else - new sites, seller tools, repricers, research - a product data API replaces the four PA-API operations and adds seller-side data. Endpoints are in the API documentation, and a free account includes 150 credits.