Amazon PA-API dismessa: come ottenere i dati prodotto senza

PA-API 5 ora risponde 403 e rimanda alla Creators API. Chi deve migrare, a chi serve una data API, una mappa dei campi e numeri reali di copertura.

La Product Advertising API 5 di Amazon è deprecata, e l’avviso di Amazon stessa dice che le chiamate ora restituiscono un HTTP 403 AccessDeniedException che rimanda alla Creators API. Se guadagni commissioni Amazon Associates, migra alla Creators API. Se ti servono solo i dati prodotto (prezzi, valutazioni, disponibilità, offerte) per monitoraggio, arricchimento o ricerca, una data API come FastAF li restituisce a 1 credito per prodotto, senza un account Associates. Qui sotto: la distinzione, una mappa dei campi, e cosa hanno restituito 24 ricerche reali di prodotto il 19 ottobre 2026.

Cosa è successo a PA-API 5?

L’avviso di deprecazione di PA-API 5 di Amazon (letto il 19 ottobre 2026) dice che l’API “has been deprecated and is being replaced by the Creators API”. Le applicazioni che la chiamano ancora ricevono un 403 il cui messaggio dice di migrare. Le vecchie pagine webservices.amazon.com/paapi5/documentation/ ora reindirizzano a quell’avviso.

L’avviso non indica una data di fine. Un articolo di terze parti, un post su DEV Community, riporta il 30 aprile 2026 per la deprecazione e il 15 maggio 2026 per la dismissione. Non abbiamo potuto confermare quelle date su una pagina di Amazon, quindi considerale riportate, non ufficiali.

La guida alla migrazione elenca i cambiamenti reali: OAuth 2.0 al posto di AWS Signature V4, credenziali nuove (le vecchie chiavi non funzionano), un nuovo endpoint a creatorsapi.amazon/catalog/v1/, campi in lowerCamelCase, e OffersV2 al posto di Offers.Listings.

Devo usare la Creators API o una data API?

Usa la Creators API se sei un Associate e il tuo prodotto sono link di affiliazione. È la strada ufficiale, restituisce URL con tracciamento delle commissioni, e le stesse quattro operazioni passano: SearchItems, GetItems, GetVariations, GetBrowseNodes.

Il problema è l’idoneità. L’introduzione di Amazon indica come prerequisito almeno 10 vendite qualificate negli ultimi 30 giorni, e la documentazione sui limiti dice che l’accesso si perde dopo 30 giorni consecutivi senza vendite qualificate da referral. Il limite iniziale è 1 richiesta al secondo e 8.640 al giorno per i primi 30 giorni, poi cresce con il fatturato spedito (1 TPS ogni $4.320 di articoli spediti nei 30 giorni precedenti, fino a 10).

Un monitor dei prezzi, un job di arricchimento del catalogo, uno studio di mercato o un agente AI che risponde a “quanto costa in Germania” di solito non ha vendite affiliate, e non deve dipenderne. Per questo usa una data API. Il compromesso è semplice: ottieni i dati prodotto, non ottieni link tracciati, e i termini di Amazon e le policy Associates restano una tua responsabilità.

Come si mappano le operazioni di PA-API 5 su FastAF?

Tutto qui sotto è GET https://api.fastaf.co/v1/amazon con una chiave Bearer. I nomi dei campi vengono da risposte reali.

PA-API 5 / Creators API Chiamata FastAF Campi restituiti Lacuna
SearchItems query, domain, page (da 1 a 100), 1 credito asin, title, extracted_price, rating, reviews, image, has_prime Niente minPrice, brand o sortBy; da 15 a 48 prodotti per pagina
GetItems resource=product&asin=, 1 credito title, extracted_price, availability_status, images, extracted_average_rating, extracted_total_reviews Un ASIN per chiamata, nessun batch da 10
ItemInfo (caratteristiche, brand, tecnici) stessa chiamata feature_bullets, brand, product_information Dizionario libero, le chiavi variano per categoria e lingua
Images stessa chiamata images, main_image Nessuna variante di dimensione né campi di larghezza e altezza
GetVariations stessa chiamata parent_asin, variant_combinations (asin, dimensions) Nessun prezzo per variante: una chiamata prodotto per ogni figlio
Elenchi OffersV2 resource=offers, 5 crediti offers[] con price.value, condition, seller.name, buybox_winner Nessun campo sulla tempistica delle offerte in quelle che ho visto
BrowseNodeInfo stessa chiamata prodotto category_id, categories, best_sellers_rank La classifica è strutturata solo su .com (vedi sotto)
GetBrowseNodes resource=bestsellers&category_id=, 5 crediti results in classifica più un albero di categorie Nessuna chiamata che elenca i figli di un nodo qualsiasi
detailPageURL con partnerTag nessuna costruisci tu /dp/<asin> Nessun link con tracciamento delle commissioni

Due cose che FastAF restituisce e che l’elenco di risorse della Creators API non cita: valutazione e numero di recensioni (l’elenco copre ItemInfo, Images, OffersV2, BrowseNodeInfo, ParentASIN, SearchRefinements e VariationSummary), e number_of_people_bought. C’è anche una risorsa reviews, trattata nella pagina dell’Amazon API.

Quanto sono completi i dati?

Il 19 ottobre 2026 abbiamo eseguito 9 ricerche (3 query: “mechanical keyboard”, “air fryer”, “yoga mat”, su com, co.uk e de), poi cercato 27 ASIN da quelle con resource=product e resource=offers, 5 richieste in parallelo. Sono tornate 24 pagine prodotto e 26 elenchi di offerte. Le altre hanno restituito un 4xx dopo circa 40 secondi e non sono state addebitate.

Campo Risultati di ricerca (239 prodotti) Pagine prodotto (24)
Prezzo (numerico) 235 (98%) 24 (100%)
Valutazione 237 (99%) 23 (96%)
Numero di recensioni 237 (99%) 23 (96%)
Immagine 239 (100%) 24 (100%)
Disponibilità non nella ricerca 24 (100%)
Punti elenco delle caratteristiche non nella ricerca 24 (100%)
Brand non nella ricerca 19 (79%)
Varianti non nella ricerca 21 (88%)

Tutti i 26 elenchi di offerte avevano almeno un’offerta, un’offerta con prezzo e un vincitore del buy box; contenevano da 1 a 12 offerte. L’unica pagina prodotto senza valutazione non aveva nessun campo di valutazione nella risposta.

Latenza con 5 richieste in parallelo, solo chiamate riuscite: mediana della ricerca 5,8 s (p90 16,9 s), mediana del prodotto 5,3 s (p90 11,1 s), mediana delle offerte 13,5 s (p90 35 s). Le chiamate di conferma all’API di produzione, una alla volta, hanno impiegato 4,8 s (prodotto, de), 6,5 s (ricerca, co.uk) e 17,6 s (offerte, com). Una ricerca di prodotto su com è fallita due volte con un 422 e senza addebito. Prevedi dei nuovi tentativi e una latenza di coda di decine di secondi: è uno strumento da batch, non una dipendenza nel percorso di una richiesta.

Quali sono le insidie?

La valuta segue il codice postale. Una ricerca co.uk con il solo country=gb ha restituito prezzi come “USD 278.64”. Aggiungendo postal_code=SW1A 1AA ha restituito “£171.00”. Passa sempre country e postal_code. Anche così, uno degli 8 prodotti co.uk è tornato in USD, quindi controlla price_symbol.

Il prezzo è una stringa di visualizzazione; usa il campo numerico. price riporta “$28.49 with 33 percent savings”, mentre extracted_price è 28.49.

Convalida le valutazioni. Su una pagina tedesca la valutazione era “4,7” e extracted_average_rating è tornato come 47. Una chiamata ripetuta ha restituito 4.7. Scarta qualsiasi valore sopra 5.

La classifica dei bestseller è strutturata solo su .com. Su co.uk e de sta come testo in product_information.

Come migro una chiamata GetItems?

Una funzione drop-in con la forma familiare: in ingresso una lista di ASIN e un marketplace, in uscita gli articoli. L’abbiamo eseguita su 12 ASIN nei tre marketplace e abbiamo ottenuto 12 articoli.

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]

Output per l’ASIN di test tedesco B09ZYLM43B: prezzo 191,3, valuta “€”, valutazione 4,7, 8.344 recensioni, “In stock”. Quattro ASIN hanno richiesto da 9 a 47 secondi per marketplace, quindi esegui le liste grandi a lotti e salva i risultati man mano. Le guide esistenti coprono il resto: cosa restituisce l’endpoint Amazon e un bot completo per il monitoraggio dei prezzi con storico SQLite e avvisi.

Quanto costa?

Le richieste di ricerca e prodotto costano 1 credito, offerte e bestseller 5. Aggiornare 1.000 prodotti al giorno sono 30.000 crediti al mese, circa $11,60 di un pacchetto Growth da $29 (75.000 crediti, validi 12 mesi). Aggiungere ogni giorno un controllo delle offerte su ogni prodotto sarebbero altri 150.000, quindi recupera le offerte solo per gli ASIN in cui conta il venditore del buy box. Il nostro test di migrazione con 12 ASIN è costato 12 crediti. I prezzi aggiornati sono nella pagina dei prezzi, i parametri completi nella documentazione, e una richiesta fallita non viene mai addebitata.

La versione breve

PA-API 5 è deprecata e risponde 403; la sostituta ufficiale è la Creators API, che richiede un account Associates con vendite qualificate recenti. Se guadagni commissioni, migra lì. Se ti servono prezzi, valutazioni, disponibilità, varianti e offerte senza l’idoneità affiliata, una data API le copre: dal 98 al 100% dei prodotti aveva prezzo, disponibilità e immagine nella nostra esecuzione, a 1 credito per prodotto. Convalida valutazioni e valuta, riprova sui 4xx e aspettati latenze di diversi secondi. Puoi prendere 500 crediti gratuiti e rieseguire questo test sui tuoi ASIN.