Amazon PA-API retirée : obtenir des données produit sans elle

PA-API 5 répond désormais 403 et renvoie vers la Creators API. Qui doit migrer, qui a besoin d’une API de données, une table de correspondance des champs et des chiffres de couverture réels.

La Product Advertising API 5 d’Amazon est dépréciée, et l’avis d’Amazon lui-même indique que les appels renvoient désormais un HTTP 403 AccessDeniedException qui pointe vers la Creators API. Si vous touchez des commissions Amazon Associates (Partenaires), migrez vers la Creators API. Si vous n’avez besoin que de données produit (prix, notes, disponibilité, offres) pour du suivi, de l’enrichissement ou de la recherche, une API de données comme FastAF les renvoie pour 1 crédit par produit, sans compte Associates. Ci-dessous : le partage des cas, une table de correspondance des champs, et ce que 24 vraies recherches de produits ont renvoyé le 19 octobre 2026.

Que s’est-il passé avec PA-API 5 ?

L’avis de dépréciation de PA-API 5 d’Amazon (lu le 19 octobre 2026) dit que l’API « a été dépréciée et est remplacée par la Creators API ». Les applications qui l’appellent encore reçoivent un 403 dont le message leur dit de migrer. Les anciennes pages webservices.amazon.com/paapi5/documentation/ redirigent maintenant vers cet avis.

L’avis ne donne pas de date de fin. Un article tiers, un billet DEV Community, rapporte le 30 avril 2026 pour la dépréciation et le 15 mai 2026 pour le retrait. Nous n’avons pas pu confirmer ces dates sur une page d’Amazon : considérez-les comme rapportées, pas officielles.

Le guide de migration liste les vrais changements : OAuth 2.0 au lieu d’AWS Signature V4, de nouveaux identifiants (les anciennes clés ne fonctionnent pas), un nouvel endpoint à creatorsapi.amazon/catalog/v1/, des champs en lowerCamelCase, et OffersV2 qui remplace Offers.Listings.

Dois-je utiliser la Creators API ou une API de données ?

Utilisez la Creators API si vous êtes Associate et que votre produit repose sur des liens affiliés. C’est la voie officielle, elle renvoie des URL avec suivi des commissions, et les mêmes quatre opérations sont reprises : SearchItems, GetItems, GetVariations, GetBrowseNodes.

Le piège est l’éligibilité. L’introduction d’Amazon liste au moins 10 ventes qualifiantes sur les 30 derniers jours comme prérequis, et la documentation des limites dit que l’accès est perdu après 30 jours consécutifs sans ventes référées qualifiées. La limite de départ est de 1 requête par seconde et 8 640 par jour pendant les 30 premiers jours, puis elle évolue avec le chiffre d’affaires expédié (1 TPS par tranche de 4 320 $ d’articles expédiés sur les 30 jours précédents, jusqu’à 10).

Un outil de suivi des prix, un job d’enrichissement de catalogue, une étude de marché ou un agent IA qui répond à « combien ça coûte en Allemagne » n’a généralement aucune vente affiliée, et ne doit pas en dépendre. Pour cela, utilisez une API de données. Le compromis est simple : vous obtenez des données produit, pas de liens avec suivi, et les conditions d’Amazon ainsi que les politiques Associates restent votre responsabilité.

Comment les opérations PA-API 5 correspondent-elles à FastAF ?

Tout ce qui suit est GET https://api.fastaf.co/v1/amazon avec une clé Bearer. Les noms de champs viennent de vraies réponses.

PA-API 5 / Creators API Appel FastAF Champs renvoyés Écart
SearchItems query, domain, page (1 à 100), 1 crédit asin, title, extracted_price, rating, reviews, image, has_prime Pas de minPrice, brand ni sortBy ; 15 à 48 produits par page
GetItems resource=product&asin=, 1 crédit title, extracted_price, availability_status, images, extracted_average_rating, extracted_total_reviews Un ASIN par appel, pas de lot de 10
ItemInfo (caractéristiques, marque, technique) même appel feature_bullets, brand, product_information Dict libre, les clés varient selon la catégorie et la langue
Images même appel images, main_image Pas de variantes de taille ni de champs largeur et hauteur
GetVariations même appel parent_asin, variant_combinations (asin, dimensions) Pas de prix par variation : un appel produit par enfant
Listes OffersV2 resource=offers, 5 crédits offers[] avec price.value, condition, seller.name, buybox_winner Pas de champs de durée des offres dans celles que j’ai vues
BrowseNodeInfo même appel produit category_id, categories, best_sellers_rank Le rang n’est structuré que sur .com (voir plus bas)
GetBrowseNodes resource=bestsellers&category_id=, 5 crédits results classés plus un arbre de catégories Pas d’appel qui liste les enfants d’un nœud quelconque
detailPageURL avec partnerTag aucun construire /dp/<asin> soi-même Pas de liens avec suivi des commissions

Deux choses que FastAF renvoie et que la liste des ressources de la Creators API ne mentionne pas : la note et le nombre d’avis (la liste couvre ItemInfo, Images, OffersV2, BrowseNodeInfo, ParentASIN, SearchRefinements et VariationSummary), et number_of_people_bought. Il existe aussi une ressource reviews, décrite dans la page de l’API Amazon.

Les données sont-elles complètes ?

Le 19 octobre 2026, nous avons lancé 9 recherches (3 requêtes : « mechanical keyboard », « air fryer », « yoga mat », sur com, co.uk et de), puis recherché 27 ASIN issus de ces résultats avec resource=product et resource=offers, 5 requêtes en parallèle. 24 pages produit et 26 listes d’offres sont revenues. Le reste a renvoyé un 4xx après environ 40 secondes et n’a pas été facturé.

Champ Résultats de recherche (239 produits) Pages produit (24)
Prix (numérique) 235 (98 %) 24 (100 %)
Note 237 (99 %) 23 (96 %)
Nombre d’avis 237 (99 %) 23 (96 %)
Image 239 (100 %) 24 (100 %)
Disponibilité absente de la recherche 24 (100 %)
Points clés (feature bullets) absents de la recherche 24 (100 %)
Marque absente de la recherche 19 (79 %)
Variantes absentes de la recherche 21 (88 %)

Les 26 listes d’offres avaient au moins une offre, une offre avec prix et un gagnant de la buy box ; elles contenaient entre 1 et 12 offres. La seule page produit sans note n’avait aucun champ de note dans la réponse.

Latence à 5 requêtes en parallèle, appels réussis uniquement : recherche médiane 5,8 s (p90 16,9 s), produit médiane 5,3 s (p90 11,1 s), offres médiane 13,5 s (p90 35 s). Les appels de confirmation vers l’API de production, un par un, ont pris 4,8 s (produit, de), 6,5 s (recherche, co.uk) et 17,6 s (offres, com). Une recherche de produit sur com a échoué deux fois avec un 422 et sans facturation. Prévoyez des nouvelles tentatives et une latence de queue de plusieurs dizaines de secondes : c’est un outil de batch, pas une dépendance du chemin de requête.

Quels sont les pièges ?

La devise suit le code postal. Une recherche co.uk avec seulement country=gb a renvoyé des prix en « USD 278.64 ». Ajouter postal_code=SW1A 1AA a renvoyé « £171.00 ». Passez country et postal_code à chaque fois. Même ainsi, un produit co.uk sur 8 est revenu en USD, vérifiez donc price_symbol.

Le prix est une chaîne d’affichage ; utilisez le champ numérique. price indique « $28.49 with 33 percent savings », alors que extracted_price vaut 28.49.

Validez les notes. Sur une page allemande, la note était « 4,7 » et extracted_average_rating est revenu à 47. Un second appel a renvoyé 4.7. Rejetez tout ce qui dépasse 5.

Le rang des meilleures ventes n’est structuré que sur .com. Sur co.uk et de, il se trouve sous forme de texte dans product_information.

Comment migrer un appel GetItems ?

Une fonction de remplacement avec la forme habituelle : une liste d’ASIN et une place de marché en entrée, des articles en sortie. Nous l’avons exécutée sur 12 ASIN répartis sur les trois places de marché et obtenu 12 articles.

import os
import time
from concurrent.futures import ThreadPoolExecutor

import requests

BASE = "https://api.fastaf.co/v1/amazon"
HEADERS = {"Authorization": f"Bearer {os.environ['FASTAF_API_KEY']}"}

# PA-API "Marketplace" value -> FastAF domain, country, postal code
MARKETPLACES = {
    "www.amazon.com": ("com", "us", "10001"),
    "www.amazon.co.uk": ("co.uk", "gb", "SW1A 1AA"),
    "www.amazon.de": ("de", "de", "10115"),
}


def _get(params, retries=1):
    for attempt in range(retries + 1):
        r = requests.get(BASE, params=params, headers=HEADERS, timeout=90)
        if r.status_code == 200:
            return r.json()
        if r.status_code in (422, 429, 502, 503) and attempt < retries:
            time.sleep(3)
            continue
        return None  # failed requests are not billed
    return None


def _rating(p):
    value = p.get("extracted_average_rating")
    if value is not None and value > 5:  # "4,7" parsed as 47
        value = value / 10
    return value


def get_items(item_ids, marketplace="www.amazon.com"):
    """Same call shape as PA-API GetItems: ASINs in, items out."""
    domain, country, postal = MARKETPLACES[marketplace]

    def one(asin):
        p = _get({"resource": "product", "asin": asin, "domain": domain,
                  "country": country, "postal_code": postal})
        if not p:
            return None
        return {
            "asin": asin,
            "title": p.get("title"),
            "brand": p.get("brand"),
            "price": p.get("extracted_price"),
            "currency": p.get("price_symbol"),
            "rating": _rating(p),
            "reviews": p.get("extracted_total_reviews"),
            "availability": p.get("availability_status"),
            "image": (p.get("images") or [None])[0],
            "features": p.get("feature_bullets") or [],
            "parent_asin": p.get("parent_asin"),
        }

    with ThreadPoolExecutor(max_workers=5) as pool:
        return [i for i in pool.map(one, item_ids) if i]

Sortie pour l’ASIN de test allemand B09ZYLM43B : prix 191.3, devise « € », note 4.7, 8 344 avis, « In stock ». Quatre ASIN ont pris de 9 à 47 secondes par place de marché : exécutez donc les grandes listes par lots et stockez les résultats au fur et à mesure. Les guides existants couvrent le reste : ce que renvoie l’endpoint Amazon et un bot complet de suivi des prix avec historique SQLite et alertes.

Combien ça coûte ?

Les requêtes de recherche et de produit coûtent 1 crédit, les offres et les meilleures ventes 5. Rafraîchir 1 000 produits par jour fait 30 000 crédits par mois, soit environ 11,60 $ d’un pack Growth à 29 $ (75 000 crédits, valables 12 mois). Ajouter chaque jour une vérification des offres sur chaque produit ferait 150 000 de plus : ne tirez donc les offres que pour les ASIN où le vendeur de la buy box compte. Notre test de migration sur 12 ASIN a coûté 12 crédits. Les prix actuels sont sur la page de tarifs, tous les paramètres dans la documentation, et une requête échouée n’est jamais facturée.

En bref

PA-API 5 est dépréciée et répond 403 ; le remplaçant officiel est la Creators API, qui exige un compte Associates avec des ventes qualifiantes récentes. Si vous touchez des commissions, migrez vers elle. Si vous avez besoin de prix, de notes, de disponibilité, de variantes et d’offres sans éligibilité affiliée, une API de données les couvre : 98 à 100 % des produits avaient un prix, une disponibilité et une image dans notre run, à 1 crédit par produit. Validez les notes et la devise, relancez sur les 4xx, et attendez-vous à une latence de plusieurs secondes. Vous pouvez obtenir 500 crédits gratuits et relancer ce test sur vos propres ASIN.