Amazon PA-API retirada: datos de producto sin la PA-API

PA-API 5 ya responde 403 y remite a la Creators API. Quién debe migrar, quién necesita una API para extraer datos de Amazon, equivalencias de campos y cifras reales de cobertura.

La Product Advertising API 5 de Amazon está obsoleta, y el propio aviso de Amazon dice que las llamadas ahora devuelven un HTTP 403 AccessDeniedException que remite a la Creators API. Si ganas comisiones del programa Amazon Associates, migra a la Creators API. Si solo necesitas datos de producto (precios, valoraciones, disponibilidad, ofertas) para monitorización, enriquecimiento o investigación, una API de datos como FastAF los devuelve por 1 crédito por producto, sin cuenta de Associates. Abajo: el reparto, una equivalencia de campos y lo que devolvieron 24 consultas reales de producto el 19 de octubre de 2026.

¿Qué pasó con la PA-API 5?

El aviso de obsolescencia de la PA-API 5 de Amazon (leído el 19 de octubre de 2026) dice que la API “ha quedado obsoleta y está siendo sustituida por la Creators API”. Las aplicaciones que aún la llaman reciben un 403 cuyo mensaje les dice que migren. Las antiguas páginas webservices.amazon.com/paapi5/documentation/ ahora redirigen a ese aviso.

El aviso no da fecha de fin. Un artículo de terceros, un post de DEV Community, indica el 30 de abril de 2026 para la obsolescencia y el 15 de mayo de 2026 para la retirada. No pudimos confirmar esas fechas en una página de Amazon, así que tómalas como dato publicado por terceros, no oficial.

La guía de migración lista los cambios reales: OAuth 2.0 en lugar de AWS Signature V4, credenciales nuevas (las claves antiguas no funcionan), un endpoint nuevo en creatorsapi.amazon/catalog/v1/, campos en lowerCamelCase y OffersV2 en lugar de Offers.Listings.

¿Debo usar la Creators API o una API de datos?

Usa la Creators API si eres Associate y tu producto son los enlaces de afiliado. Es la vía oficial, devuelve URL con seguimiento de comisión, y se mantienen las mismas cuatro operaciones: SearchItems, GetItems, GetVariations, GetBrowseNodes.

La pega es la elegibilidad. La introducción de Amazon lista como requisito previo al menos 10 ventas cualificadas en los últimos 30 días, y la documentación de tasas dice que se pierde el acceso tras 30 días consecutivos sin ventas referidas cualificadas. El límite inicial es de 1 solicitud por segundo y 8.640 al día durante los primeros 30 días, y luego escala con los ingresos enviados (1 TPS por cada 4.320 $ de artículos enviados en los 30 días anteriores, hasta 10).

Un monitor de precios, un trabajo de enriquecimiento de catálogo, un estudio de mercado o un agente de IA que responde “cuánto cuesta esto en Alemania” normalmente no tiene ventas de afiliado, y no debe depender de ellas. Para eso, usa una API de datos. El intercambio es claro: obtienes datos de producto, no enlaces con seguimiento, y las condiciones de Amazon y las políticas de Associates siguen siendo responsabilidad tuya.

¿Cómo se corresponden las operaciones de la PA-API 5 con FastAF?

Todo lo de abajo es GET https://api.fastaf.co/v1/amazon con una clave Bearer. Los nombres de los campos son de respuestas reales.

PA-API 5 / Creators API Llamada de FastAF Campos devueltos Diferencia
SearchItems query, domain, page (1 a 100), 1 crédito asin, title, extracted_price, rating, reviews, image, has_prime Sin minPrice, brand ni sortBy; de 15 a 48 productos por página
GetItems resource=product&asin=, 1 crédito title, extracted_price, availability_status, images, extracted_average_rating, extracted_total_reviews Un ASIN por llamada, sin lotes de 10
ItemInfo (características, marca, técnico) misma llamada feature_bullets, brand, product_information Diccionario libre, las claves varían según la categoría y el idioma
Images misma llamada images, main_image Sin variantes de tamaño ni campos de ancho y alto
GetVariations misma llamada parent_asin, variant_combinations (asin, dimensions) Sin precio por variación: una llamada de producto por cada hijo
Ofertas de OffersV2 resource=offers, 5 créditos offers[] con price.value, condition, seller.name, buybox_winner Sin campos de plazos de ofertas en las que vi
BrowseNodeInfo misma llamada de producto category_id, categories, best_sellers_rank El ranking es estructurado solo en .com (ver abajo)
GetBrowseNodes resource=bestsellers&category_id=, 5 créditos results ordenados más un árbol de categorías Sin llamada que liste los hijos de un nodo arbitrario
detailPageURL con partnerTag ninguna construye tú mismo /dp/<asin> Sin enlaces con seguimiento de comisión

Hay dos cosas que FastAF devuelve y que la lista de recursos de la Creators API no menciona: la valoración y el número de reseñas (la lista cubre ItemInfo, Images, OffersV2, BrowseNodeInfo, ParentASIN, SearchRefinements y VariationSummary), y number_of_people_bought. También hay un recurso reviews, descrito en la página de la API de Amazon.

¿Qué tan completos son los datos?

El 19 de octubre de 2026 ejecutamos 9 búsquedas (3 consultas: “mechanical keyboard”, “air fryer”, “yoga mat”, en com, co.uk y de), y luego consultamos 27 ASIN de ellas con resource=product y resource=offers, con 5 solicitudes en paralelo. Volvieron 24 páginas de producto y 26 listas de ofertas. El resto devolvió un 4xx tras unos 40 segundos y no se cobró.

Campo Resultados de búsqueda (239 productos) Páginas de producto (24)
Precio (numérico) 235 (98 %) 24 (100 %)
Valoración 237 (99 %) 23 (96 %)
Número de reseñas 237 (99 %) 23 (96 %)
Imagen 239 (100 %) 24 (100 %)
Disponibilidad no está en la búsqueda 24 (100 %)
Características no están en la búsqueda 24 (100 %)
Marca no está en la búsqueda 19 (79 %)
Variantes no están en la búsqueda 21 (88 %)

Las 26 listas de ofertas tenían al menos una oferta, una oferta con precio y un ganador de la buy box; contenían entre 1 y 12 ofertas. La única página de producto sin valoración no tenía ningún campo de valoración en la respuesta.

Latencia con 5 solicitudes en paralelo, solo llamadas con éxito: mediana de búsqueda 5,8 s (p90 16,9 s), mediana de producto 5,3 s (p90 11,1 s), mediana de ofertas 13,5 s (p90 35 s). Las llamadas de confirmación a la API de producción, de una en una, tardaron 4,8 s (producto, de), 6,5 s (búsqueda, co.uk) y 17,6 s (ofertas, com). Una consulta de producto en com falló dos veces con un 422 y sin cargo. Cuenta con reintentos y con latencias de cola de decenas de segundos, así que es una herramienta de lotes, no una dependencia de la ruta de la solicitud.

¿Qué trampas hay?

La moneda sigue al código postal. Una búsqueda en co.uk solo con country=gb devolvió precios como “USD 278.64”. Al añadir postal_code=SW1A 1AA devolvió “£171.00”. Pasa country y postal_code siempre. Incluso así, uno de 8 productos de co.uk volvió en USD, así que comprueba price_symbol.

El precio es un string para mostrar; usa el campo numérico. price dice “$28.49 with 33 percent savings”, mientras que extracted_price es 28.49.

Valida las valoraciones. En una página alemana la valoración era “4,7” y extracted_average_rating volvió como 47. Una llamada repetida devolvió 4.7. Rechaza cualquier valor por encima de 5.

El ranking de más vendidos es estructurado solo en .com. En co.uk y de aparece como texto en product_information.

¿Cómo migro una llamada GetItems?

Una función que lo sustituye sin cambios, con la forma conocida: una lista de ASIN y un marketplace de entrada, productos de salida. La ejecutamos con 12 ASIN en los tres marketplaces y obtuvimos 12 productos.

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]

Resultado para el ASIN alemán de prueba B09ZYLM43B: precio 191,3, moneda “€”, valoración 4,7, 8.344 reseñas, “In stock”. Cuatro ASIN tardaron entre 9 y 47 segundos por marketplace, así que ejecuta las listas grandes por lotes y guarda los resultados sobre la marcha. Las guías existentes cubren el resto: qué devuelve el endpoint de Amazon y un bot completo de seguimiento de precios con historial en SQLite y alertas.

¿Cuánto cuesta?

Las solicitudes de búsqueda y de producto cuestan 1 crédito, las de ofertas y las de más vendidos 5. Actualizar 1.000 productos a diario son 30.000 créditos al mes, unos 11,60 $ de un pack Growth de 29 $ (75.000 créditos, válido 12 meses). Añadir una comprobación de ofertas de cada producto a diario serían 150.000 más, así que consulta las ofertas solo de los ASIN donde importa el vendedor de la buy box. Nuestra prueba de migración con 12 ASIN costó 12 créditos. Los precios actuales están en la página de precios, los parámetros completos en la documentación, y una solicitud fallida nunca se cobra.

En resumen

La PA-API 5 está obsoleta y responde 403; el reemplazo oficial es la Creators API, que requiere una cuenta de Associates con ventas cualificadas recientes. Si ganas comisiones, migra a ella. Si necesitas precios, valoraciones, disponibilidad, variantes y ofertas sin la elegibilidad de afiliado, una API de datos los cubre: del 98 al 100 % de los productos tenían precio, disponibilidad e imagen en nuestra ejecución, a 1 crédito por producto. Valida las valoraciones y la moneda, reintenta ante los 4xx y cuenta con latencias de varios segundos. Puedes conseguir 500 créditos gratis y repetir esta prueba con tus propios ASIN.