Errores
La forma del cuerpo de error, los códigos estables y cuáles reintentar.
{
"error": {
"code": "INVALID_SIGNATURE",
"message": "La firma no coincide con el request",
"requestId": "req_1f0c9a2e-…"
}
}| Campo | Notas |
|---|---|
code | Identificador estable del error. Es contra el que programás |
message | Descripción en español, para logs y soporte. Puede cambiar de redacción |
details | Solo en errores de validación: la lista de campos que fallaron |
requestId | El mismo valor del header X-Request-Id. Mandanoslo cuando reportes un problema |
Programá contra code, nunca contra message. El mensaje puede cambiar de
redacción o traducirse sin aviso; el código no cambia sin una versión nueva del
API. En errores de validación aparece además details con la lista de campos.
Códigos
code | HTTP | Cuándo |
|---|---|---|
UNAUTHORIZED | 401 | Faltan headers, el nonce está mal formado, o la credencial no existe o está inactiva |
INVALID_SIGNATURE | 401 | La firma no coincide |
TIMESTAMP_OUT_OF_RANGE | 401 | Timestamp fuera de ±300 s, o no es un entero |
REPLAYED_NONCE | 401 | Ese nonce ya se usó |
FORBIDDEN_SCOPE | 403 | Tu credencial no tiene el permiso requerido |
RATE_LIMITED | 429 | Excediste la cuota |
VALIDATION_ERROR | 400 | Cuerpo o query inválidos, o un campo que el endpoint no acepta |
VALIDATION_ERROR | 409 | Ya hay otra petición tuya creando esa misma orden. Reintentá en unos segundos |
NOT_FOUND | 404 | El recurso o la ruta no existen |
MIXED_SELLERS | 422 | La orden mezcla productos de dropshippers distintos |
MIXED_PRODUCT_ORIGINS | 422 | La orden mezcla productos propios con productos de proveedor, o productos propios de dos dueños distintos |
IDEMPOTENCY_KEY_REUSED | 422 | Repetiste un externalOrderId con un cuerpo distinto |
ORDER_NOT_CANCELLABLE | 409 | La orden ya se despachó o dejó de estar en un estado cancelable |
INTERNAL_ERROR | 5xx | Error de nuestro lado |
Cuáles reintentar
- 401 / 403 / 422: no reintentar. Son errores de tu petición; reintentar da el mismo resultado.
- 429: reintentar respetando el header
Retry-After. - 409: reintentar en unos segundos, es una condición transitoria. La
excepción es
ORDER_NOT_CANCELLABLE: la orden no vuelve atrás, así que reintentar da el mismo resultado. - 5xx: reintentar con espera creciente. Si era un
POST /orders, repetí el mismoexternalOrderIdy el mismo cuerpo: la idempotencia se encarga de que no se dupliquen.
Un error nuestro nunca te reenvía detalles internos: se convierte en
INTERNAL_ERROR con texto genérico, y el detalle queda de nuestro lado asociado
al requestId.