Apariencia
Autenticación y Conexión a Amazon SP-API
Resumen rápido
Para hacer peticiones a la SP-API necesitas dos cosas: un access token válido (obtenido mediante LWA con tu refresh token) y el endpoint correcto para tu región. Desde octubre 2024, Amazon eliminó el requisito de usar AWS IAM Roles y AWS Signature v4, lo que simplifica enormemente el proceso.
Conceptos importantes
- LWA (Login with Amazon): El sistema de OAuth 2.0 de Amazon. Es el mecanismo que usas para obtener tokens de acceso.
- Client ID / LWA App ID: El identificador público de tu app en Amazon. Se obtiene al crear la app en Seller Central.
- Client Secret / LWA Client Secret: La clave secreta de tu app. Guárdala como cualquier contraseña.
- Refresh Token: Token de larga duración (no caduca por sí solo) que usas para obtener
access tokensnuevos. Se genera cuando autorizas la app desde una cuenta de vendedor. - Access Token: Token de corta duración (válido 1 hora) que se incluye en cada petición a la API. Se obtiene usando el
refresh token. - Endpoint: La URL base de la API según la región (América del Norte, Europa, Lejano Oriente).
- Marketplace ID: El identificador del marketplace donde operas (ej.
A1RKKUPIHCS9HSpara España). - AWS IAM / STS / Signature v4: Sistema de seguridad de AWS que anteriormente era obligatorio para firmar peticiones. Desde octubre 2024, ya no es necesario para SP-API.
Cómo funciona
Flujo de autenticación (desde octubre 2024)
Tu app Amazon LWA
| |
|-- POST /auth/o2/token ----> |
| (client_id, client_secret, |
| refresh_token, |
| grant_type=refresh_token) |
| |
|<-- { access_token, ... } --- |
| |
|-- GET /orders/v0/orders ---> Amazon SP-API
| Header: x-amz-access-token: <token>
|
|<-- { payload: [...] } -------El access token dura 1 hora. Debes implementar lógica para renovarlo cuando caduque.
Endpoints por región
| Región | Endpoint base |
|---|---|
| Norte América (US, CA, MX, BR) | https://sellingpartnerapi-na.amazon.com |
| Europa (ES, DE, FR, IT, UK, NL, SE, PL, BE, TR, EG, SA, AE, IN) | https://sellingpartnerapi-eu.amazon.com |
| Lejano Oriente (SG, AU, JP) | https://sellingpartnerapi-fe.amazon.com |
Marketplace IDs más comunes
| País | Marketplace ID |
|---|---|
| España | A1RKKUPIHCS9HS |
| Alemania | A1PA6795UKMFR9 |
| Francia | A13V1IB3VIYZZH |
| Italia | APJ6JRA9NG5V4 |
| Reino Unido | A1F83G8C2ARO7P |
| Estados Unidos | ATVPDKIKX0DER |
| Polonia | A1C3SOZRARQ6R3 |
La lista completa está en la documentación oficial de Amazon.
Pasos prácticos
1. Crear la app en Seller Central
- Accede a Seller Central con tu cuenta.
- Ve a Aplicaciones y Servicios → Desarrollar apps.
- Crea un perfil de desarrollador (privado o público según tu caso).
- Una vez aprobado, ve a Añadir nueva app.
- Ponle un nombre, selecciona el tipo SP-API y los permisos que necesitas.
- Guarda y sal.
Esto te dará el Client ID y el Client Secret.
2. Obtener el Refresh Token
- En la app creada, haz clic en Autorizar.
- Selecciona el marketplace.
- Haz clic en Autorizar app.
- Copia el Refresh Token que aparece.
El refresh token es único por cuenta autorizada. Si tienes varias cuentas, necesitarás un token por cada una.
3. Obtener el Access Token (Python, sin librerías externas)
python
import requests
LWA_TOKEN_URL = "https://api.amazon.com/auth/o2/token"
def get_access_token(lwa_app_id: str, lwa_client_secret: str, refresh_token: str) -> str:
response = requests.post(
LWA_TOKEN_URL,
data={
"grant_type": "refresh_token",
"refresh_token": refresh_token,
"client_id": lwa_app_id,
"client_secret": lwa_client_secret,
}
)
response.raise_for_status()
return response.json()["access_token"]4. Hacer una petición a la API
python
import requests
from datetime import datetime, timedelta
def get_orders(access_token: str, marketplace_id: str, endpoint: str) -> dict:
created_after = (datetime.utcnow() - timedelta(days=30)).isoformat() + "Z"
url = f"{endpoint}/orders/v0/orders"
headers = {
"x-amz-access-token": access_token,
"Content-Type": "application/json",
}
params = {
"MarketplaceIds": marketplace_id,
"CreatedAfter": created_after,
}
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
return response.json()5. Estructura básica de credenciales
Guarda las credenciales en variables de entorno o un archivo JSON seguro. Nunca en el código fuente.
json
{
"lwa_app_id": "amzn1.application-oa2-client.XXXXXXXX",
"lwa_client_secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"refresh_token": "Atzr|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}Configuración con Postman (referencia)
Si quieres probar sin código:
- Crea un workspace nuevo en Postman.
- Crea una variable de entorno con:
access_token(vacía, se llenará automáticamente). - Crea una petición POST al endpoint LWA para obtener el token.
- Añade un script en la pestaña "Tests" que extraiga el token y lo guarde como variable global.
- En cada petición a la SP-API, añade la cabecera
x-amz-access-token:.
Antes de octubre 2024: el proceso antiguo
El proceso anterior requería además:
- Crear un usuario IAM en AWS.
- Crear un rol IAM con permisos STS.
- Crear una política personalizada.
- Vincular el rol IAM a la app de SP-API.
- Obtener credenciales STS temporales (Access Key ID, Secret Access Key, Session Token).
- Firmar cada petición con AWS Signature v4.
Todo esto ya no es necesario para nuevos proyectos. Si tienes código que lo hacía, puedes simplificarlo.
Errores comunes
- Token caducado: el
access tokendura 1 hora. Implementa renovación automática. - Endpoint incorrecto: cada región tiene su propio endpoint. Usar el de América para Europa dará error.
- Marketplace ID incorrecto: cada país tiene un ID distinto. Verifica en la documentación oficial.
- Confundir Client ID con Seller ID: son cosas distintas. El
client_ides de tu app; elseller_ides de la cuenta del vendedor. - Poner el IAM ARN en lugar del rol: error muy común al vincular el rol IAM a la app (si usas el proceso antiguo). Debe ser el ARN del rol, no del usuario.
Qué debo saber antes de programarlo
- Implementa siempre un mecanismo de caché para el
access token. No pidas un token nuevo en cada petición. - El
refresh tokenno caduca por sí solo, pero puede ser revocado. Si pierdes el acceso, necesitas re-autorizar la app. - Para producción, nunca uses variables hardcodeadas. Usa variables de entorno o un gestor de secretos.
- Si tienes múltiples cuentas de vendedor, necesitas un
refresh tokenpor cada cuenta autorizada.
Pendiente de revisar
- ¿Existe algún caso donde aún sea necesario el AWS IAM/STS en 2024+?
- ¿Cuánto tiempo puede durar un refresh token antes de ser invalidado por Amazon?