Códigos de error

Todo error usa un envoltorio con code estable. Ramifique por error.code, no solo por message mutable o el estado HTTP.

{
  "error": {
    "code": "validation_failed",
    "message": "La validación de la solicitud ha fallado.",
    "request_id": "req_01HQ...",
    "details": [
      {
        "field": "territories",
        "issue": "zod_invalid_format",
        "message": "El valor tiene un formato no válido."
      }
    ]
  }
}

request_id refleja su X-NU-Request-Id o un valor del servidor. Inclúyalo al pedir soporte. details aparece en errores de validación.

Referencia de códigos

CódigoHTTPSignificadoAcción habitual
invalid_api_key401Clave ausente, mal formada, desconocida o caducadaEnvíe una clave Authorization: Bearer válida del entorno correcto
api_key_revoked401Clave revocadaSustitúyala por una activa (04)
invalid_approval_token401Token de aprobación no válido, caducado o ya usadoSolicite otro token y úselo una vez (04)
invalid_application_token401Referencia o token de estado incorrecto o caducadoUse las credenciales mostradas en la respuesta inicial
missing_scope403Falta el ámbito necesarioConceda el ámbito; consulte la tabla (03)
production_key_required403Clave Sandbox usada en endpoint de ProductionRepita con una clave nsp_live_
organization_not_approved403Organización aún no aprobadaEspere aprobación o complete el alta (02)
resource_not_found404Recurso inexistente o no visibleCompruebe el ID y acceso de la organización
validation_failed422Falló la validación del cuerpo o parámetroCorrija los campos de details
rate_limit_exceeded429Límite por clave alcanzadoAplique backoff con Retry-After (12)
license_not_active403No hay acuerdo ACTIVE que autoriceActive el acuerdo o su API de Production (06)
territory_not_allowed403Falta country o acuerdo/clave no permite country, origin o IPEnvíe country permitido; incluya origin admitido y revise allowed_ips
episode_not_licensed403Episodio no listo, sin activo listo o fuera de licenciaLicencie el activo listo o use un episodio elegible
duplicate_event_id409event_id ya aceptado; sin efecto idempotenteTrátelo como éxito; no reintente con otro ID
invalid_playback_session400Sesión desconocida o no válidaUse playback_session_id devuelto por la API
playback_concurrency_limit429Demasiadas sesiones activas para espectador y acuerdo o títuloRevoque una sesión o espere a que termine o caduque
settlement_not_disputable409Liquidación no impugnableImpugne solo cuando el estado lo permita (09)
conflict409Recurso existente o solicitud concurrente en cursoReintente la operación idempotente o concilie el recurso
service_unavailable503El servicio requerido no está disponible temporalmente.Reintente llamadas idempotentes con backoff exponencial.
internal_error500Error inesperado del servidorReintente con backoff; si persiste, contacte con request_id

Pautas de tratamiento

  • 401 — Corrija la autenticación; no reintente a ciegas.
  • 403 — Problema de autorización, organización o derechos. Reintentar no sirve hasta cambiar el permiso.
  • 404 — Compruebe el ID y visibilidad de la organización.
  • 422 — Revise details[] y corrija la solicitud.
  • 409 — Depende del código: duplicate_event_id ya fue aceptado y cuenta como éxito; settlement_not_disputable no permite la acción; conflict indica recurso existente o solicitud en curso. Reintente o concilie según proceda.
  • 429 — Respete Retry-After; consulte Límites de velocidad.
  • 5xx — Reintente llamadas idempotentes con backoff exponencial.

Mapeo de restricciones de base de datos

Errores conocidos se mapean a 4xx en vez de 500, incluidas carreras read-then-write con filas eliminadas:

Condición de base de datosHTTPerror.code
Fila no encontrada al escribir (P2025)404resource_not_found
Violación de unicidad (P2002)409conflict
Violación de clave externa (P2003)422validation_failed