Amazon PA-API aposentada: como obter dados de produtos sem ela

A PA-API 5 agora responde 403 e aponta para a Creators API. Quem deve migrar, quem precisa de uma API de dados, mapeamento de campos e cobertura real.

A Product Advertising API 5 da Amazon está obsoleta, e o próprio aviso da Amazon diz que as chamadas a ela agora retornam um HTTP 403 AccessDeniedException que aponta para a Creators API. Se você ganha comissões do Amazon Associates, migre para a Creators API. Se você só precisa de dados de produtos (preços, avaliações, disponibilidade, ofertas) para monitoramento, enriquecimento ou pesquisa, uma API de dados como o FastAF os devolve por 1 crédito por produto, sem conta de Associates. Abaixo: a divisão, um mapeamento de campos e o que 24 consultas reais de produtos devolveram em 19 de outubro de 2026.

O que aconteceu com a PA-API 5?

O aviso de descontinuação da PA-API 5 da Amazon (lido em 19 de outubro de 2026) diz que a API “foi descontinuada e está sendo substituída pela Creators API”. As aplicações que ainda a chamam recebem um 403 cuja mensagem manda migrar. As páginas antigas webservices.amazon.com/paapi5/documentation/ agora redirecionam para esse aviso.

O aviso não dá data de encerramento. Um artigo de terceiros, um post no DEV Community, informa 30 de abril de 2026 para a descontinuação e 15 de maio de 2026 para a desativação. Não conseguimos confirmar essas datas em nenhuma página da Amazon, então trate-as como relatadas, não oficiais.

O guia de migração lista as mudanças reais: OAuth 2.0 no lugar do AWS Signature V4, novas credenciais (as chaves antigas não funcionam), um novo endpoint em creatorsapi.amazon/catalog/v1/, campos em lowerCamelCase, e OffersV2 substituindo Offers.Listings.

Devo usar a Creators API ou uma API de dados?

Use a Creators API se você é Associate e o seu produto são links de afiliado. É o caminho oficial, devolve URLs com rastreamento de comissão, e as mesmas quatro operações se mantêm: SearchItems, GetItems, GetVariations, GetBrowseNodes.

O porém é a elegibilidade. A introdução da Amazon lista como pré-requisito pelo menos 10 vendas qualificadas nos últimos 30 dias, e a documentação de taxas diz que o acesso é perdido depois de 30 dias consecutivos sem vendas referidas qualificadas. O limite inicial é de 1 requisição por segundo e 8.640 por dia nos primeiros 30 dias, depois escala com a receita enviada (1 TPS por $4.320 de itens enviados nos 30 dias anteriores, até 10).

Um monitor de preços, um job de enriquecimento de catálogo, um estudo de mercado ou um agente de IA que responde “quanto isso custa na Alemanha” normalmente não tem vendas de afiliado, e não deve depender delas. Para isso, use uma API de dados. A troca é simples: você recebe dados de produtos, não recebe links rastreados, e os termos da Amazon e as políticas do Associates continuam sendo responsabilidade sua.

Como as operações da PA-API 5 se mapeiam para o FastAF?

Tudo abaixo é GET https://api.fastaf.co/v1/amazon com uma chave Bearer. Os nomes dos campos vêm de respostas reais.

PA-API 5 / Creators API Chamada do FastAF Campos retornados Lacuna
SearchItems query, domain, page (1 a 100), 1 crédito asin, title, extracted_price, rating, reviews, image, has_prime Sem minPrice, brand nem sortBy; de 15 a 48 produtos por página
GetItems resource=product&asin=, 1 crédito title, extracted_price, availability_status, images, extracted_average_rating, extracted_total_reviews Um ASIN por chamada, sem lote de 10
ItemInfo (características, marca, técnico) mesma chamada feature_bullets, brand, product_information Dict livre, as chaves variam por categoria e idioma
Images mesma chamada images, main_image Sem variantes de tamanho nem campos de largura e altura
GetVariations mesma chamada parent_asin, variant_combinations (asin, dimensions) Sem preço por variação: uma chamada de produto por filho
Listagens do OffersV2 resource=offers, 5 créditos offers[] com price.value, condition, seller.name, buybox_winner Sem campos de prazo de promoção nas ofertas que vi
BrowseNodeInfo mesma chamada de produto category_id, categories, best_sellers_rank O ranking é estruturado só no .com (veja abaixo)
GetBrowseNodes resource=bestsellers&category_id=, 5 créditos results ranqueados mais uma árvore de categorias Sem chamada que liste os filhos de um nó qualquer
detailPageURL com partnerTag nenhuma monte /dp/<asin> você mesmo Sem links com rastreamento de comissão

Duas coisas que o FastAF devolve e que a lista de recursos da Creators API não menciona: nota e número de avaliações (a lista cobre ItemInfo, Images, OffersV2, BrowseNodeInfo, ParentASIN, SearchRefinements e VariationSummary), e number_of_people_bought. Existe também um recurso reviews, coberto na página da API da Amazon.

Quão completos são os dados?

Em 19 de outubro de 2026 rodamos 9 buscas (3 consultas: “mechanical keyboard”, “air fryer”, “yoga mat”, em com, co.uk e de), e depois consultamos 27 ASINs delas com resource=product e resource=offers, 5 requisições em paralelo. Voltaram 24 páginas de produto e 26 listas de ofertas. As demais retornaram um 4xx depois de cerca de 40 segundos e não foram cobradas.

Campo Resultados de busca (239 produtos) Páginas de produto (24)
Preço (numérico) 235 (98%) 24 (100%)
Nota 237 (99%) 23 (96%)
Número de avaliações 237 (99%) 23 (96%)
Imagem 239 (100%) 24 (100%)
Disponibilidade não está na busca 24 (100%)
Feature bullets não está na busca 24 (100%)
Marca não está na busca 19 (79%)
Variantes não está na busca 21 (88%)

Todas as 26 listas de ofertas tinham ao menos uma oferta, uma oferta com preço e um vencedor da buy box; tinham entre 1 e 12 ofertas. A única página de produto sem nota não tinha nenhum campo de nota na resposta.

Latência com 5 requisições em paralelo, só chamadas bem-sucedidas: busca com mediana de 5,8 s (p90 de 16,9 s), produto com mediana de 5,3 s (p90 de 11,1 s), ofertas com mediana de 13,5 s (p90 de 35 s). As chamadas de confirmação à API de produção, uma por vez, levaram 4,8 s (produto, de), 6,5 s (busca, co.uk) e 17,6 s (ofertas, com). Uma consulta de produto no com falhou duas vezes com 422 e sem cobrança. Conte com novas tentativas e com latências de cauda de dezenas de segundos, então esta é uma ferramenta de lote, não uma dependência do caminho da requisição.

Quais são as pegadinhas?

A moeda segue o CEP. Uma busca no co.uk só com country=gb devolveu preços como “USD 278.64”. Ao acrescentar postal_code=SW1A 1AA, devolveu “£171.00”. Passe country e postal_code sempre. Mesmo assim, 1 de 8 produtos do co.uk voltou em USD, então confira price_symbol.

O preço é uma string de exibição; use o campo numérico. price diz “$28.49 with 33 percent savings”, enquanto extracted_price é 28.49.

Valide as notas. Em uma página alemã a nota era “4,7” e extracted_average_rating voltou 47. Uma chamada repetida devolveu 4.7. Rejeite qualquer valor acima de 5.

O ranking de mais vendidos é estruturado só no .com. No co.uk e no de ele aparece como texto em product_information.

Como migro uma chamada GetItems?

Uma função de encaixe com o formato familiar: uma lista de ASINs e um marketplace entram, itens saem. Rodamos com 12 ASINs nos três marketplaces e recebemos 12 itens.

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]

Saída para o ASIN de teste alemão B09ZYLM43B: preço 191.3, moeda “€”, nota 4.7, 8.344 avaliações, “In stock”. Quatro ASINs levaram de 9 a 47 segundos por marketplace, então rode listas grandes em lotes e guarde os resultados à medida que chegam. Os guias existentes cobrem o resto: o que o endpoint da Amazon devolve e um bot completo de acompanhamento de preços com histórico em SQLite e alertas.

Quanto custa?

Requisições de busca e de produto custam 1 crédito, ofertas e mais vendidos custam 5. Atualizar 1.000 produtos por dia são 30.000 créditos por mês, cerca de $11,60 de um pacote Growth de $29 (75.000 créditos, válidos por 12 meses). Acrescentar uma checagem de ofertas em todo produto, todo dia, seriam mais 150.000, então busque ofertas só para os ASINs em que o vendedor da buy box importa. Nosso teste de migração com 12 ASINs custou 12 créditos. Os preços atuais estão na página de preços, os parâmetros completos na documentação, e uma requisição que falha nunca é cobrada.

Resumindo

A PA-API 5 está obsoleta e responde 403; a substituta oficial é a Creators API, que exige uma conta de Associates com vendas qualificadas recentes. Se você ganha comissões, migre para ela. Se precisa de preços, notas, disponibilidade, variantes e ofertas sem elegibilidade de afiliado, uma API de dados cobre isso: de 98 a 100% dos produtos tinham preço, disponibilidade e imagem na nossa execução, a 1 crédito por produto. Valide notas e moeda, tente de novo em caso de 4xx e espere latência de vários segundos. Você pode pegar 500 créditos grátis e repetir este teste com os seus próprios ASINs.