Skip to main content

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 con 429 Too Many Requests, una cabecera Retry-After y un cuerpo cuyo detail indica exactamente qué límite se alcanzó y cuándo se libera:
  • unit es uno de requests, active_work, bytes o calls.
  • reset_at es el momento en que se repone el presupuesto; retry_after es la misma espera en segundos y coincide con la cabecera Retry-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.
Si el propio control de uso no está disponible temporalmente, la API devuelve 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 un 422 con un cuerpo HTTPValidationError:
Cada entrada de 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:
Recorre siempre 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, falta sku, o un campo decimal no se puede interpretar.
  • Product store - falta item_id, store_id o current_price; store_id hace referencia a una tienda desconocida.
  • Transactions - falta item_id, transaction_timestamp mal 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.