Códigos de estado
Límite de uso de la organización (429)
Cuando el presupuesto de uso compartido de la organización se agota, la solicitud se rechaza antes de procesarse con429 Too Many Requests, una cabecera Retry-After y un cuerpo cuyo detail indica exactamente qué límite se alcanzó y cuándo se libera:
unites uno derequests,active_work,bytesocalls.reset_ates el momento en que se repone el presupuesto;retry_afteres la misma espera en segundos y coincide con la cabeceraRetry-After.- El presupuesto se comparte entre claves de API, usuarios y el conector MCP (consulta Convenciones ▸ Límites de uso), así que cambiar de clave no restaura el acceso: espera al reinicio.
503 con { "detail": { "code": "usage_enforcement_unavailable" } }; reintenta tras una breve espera.
Forma de los errores de validación
Cuando una solicitud no supera la validación del esquema, la API devuelve un422 con un cuerpo HTTPValidationError:
detail es un ValidationError:
loc- ruta JSON al campo problemático, incluidos los índices de los arrays.msg- mensaje legible para personas.type- código de error legible por máquinas (por ejemplo,missing,string_too_long,value_error).
Endpoints masivos: errores por elemento
Los endpoints/bulk devuelven 200 OK incluso cuando fallan filas individuales. Los fallos por fila se informan dentro de BulkResponse.results, no como un error de nivel superior:
results y comprueba ok. Un 200 no significa que se haya escrito cada fila.
Casos 422 comunes por familia de endpoints
- Products - falta
item_id, faltasku, o un campo decimal no se puede interpretar. - Product store - falta
item_id,store_idocurrent_price;store_idhace referencia a una tienda desconocida. - Transactions - falta
item_id,transaction_timestampmal formado, campo decimal que no se puede interpretar. - Competitor prices - falta uno de los cuatro campos obligatorios (
competitor_name,observed_at,regular_price,effective_price). - Imports (CSV) - archivo no adjunto, archivo vacío, archivo que no es UTF-8, fila de cabecera ausente.
Estrategia de reintentos
- Endpoints idempotentes (
POST /v1/<entity>/{entity_id},PATCH,DELETE,/bulk) - reintenta ante 5xx y ante errores de transporte con retroceso exponencial (empieza en 1 s, tope de 30 s, máximo 5 intentos). POST /v1/competitor_prices- es una creación no idempotente (sin id en la ruta). Reintentar tras una respuesta exitosa creará una fila duplicada. Comprueba el resultado de la red antes de reintentar.- Importaciones asíncronas - si
POST /v1/imports/*falla, reintenta la carga. Si tiene éxito y el trabajo (job) posterior falla, corrige el CSV y envía un trabajo nuevo en lugar de reintentar la misma carga.

