Saltar al contenido principal
DocumentaciónDevelopers

Errores y reintentos

Cada error tiene un código de estado y un código estable. Esta página explica cómo leerlos y cuáles conviene reintentar.

Menú de la documentación

La estructura de un error

Los errores llegan como JSON con un objeto error. La mayoría responde con la estructura de la plataforma; audio, imágenes, decisiones y algunos errores de inferencia responden con la de OpenAI. Ambas traen un code: basa tu lógica en él, nunca en el mensaje.

{
  "error": {
    "code": "model-not-found",
    "category": "client",
    "message": "no active deployment serves this model for the operation",
    "request_id": "01K7YQ4D8M2P6S9V3X5Z7B1C4F"
  }
}

Códigos de estado

EstadoCódigos de error típicosQué hacer
400invalid-requestCorrige la solicitud; no la reintentes sin cambios.
401api-key-invalid, api-key-unknown, api-key-revokedRevisa la API key y la región. Consulta Autenticación.
402payment-required, credits-exhaustedSuscríbete, o recarga los créditos de los modelos adicionales.
403policy-denied, team-not-selectableAl propietario de la API key le falta el permiso, o debes enviar X-Team-Id.
404model-not-foundEl modelo no sirve este endpoint, o no es tuyo: revisa GET /v1/models.
413request-body-too-largeCuerpos JSON de hasta 8 MiB, cargas de audio de hasta 25 MiB.
429rate-limit-exceeded, *-concurrency-exceeded, provider-rate-limitedReintenta con backoff, o envía menos solicitudes a la vez.
500internal-errorReintenta una vez; si persiste, contacta a soporte con el ID de solicitud.
502forwarder-failedEl modelo respondió algo inválido. Reintenta con backoff.
503provider-unavailablePor ahora no hay ningún modelo disponible. Reintenta con backoff.
503model-not-pricedEl modelo adicional todavía no tiene precio. No reintentes; contacta a soporte.
504provider-timeoutEl modelo no respondió a tiempo. Reintenta, o acorta la solicitud.

Reintentos con backoff

Reintenta solo 429, 503 provider-unavailable y 504, esperando más tiempo cada vez. Los clientes oficiales de OpenAI ya reintentan dos veces por su cuenta (max_retries); esta es una política más larga, pensada para trabajos por lotes:

import random
import time

from openai import APIStatusError, OpenAI

RETRYABLE = {429, 503, 504}

def create_with_retries(client: OpenAI, attempts: int = 5, **request):
    """Retries only what can succeed later: limits, an unavailable or slow model."""
    for attempt in range(attempts):
        try:
            return client.chat.completions.create(**request)
        except APIStatusError as error:
            if error.status_code not in RETRYABLE or attempt == attempts - 1:
                raise
            time.sleep(min(30, 2**attempt) + random.random())  # exponential backoff with jitter

ID de solicitud

Cada respuesta trae un header X-Request-ID. Envía el tuyo (un ULID) para vincular una solicitud con tus logs, o lee el que generó la plataforma. Cítalo cuando contactes a soporte y úsalo para encontrar la solicitud en el registro de solicitudes.

curl
curl -i "$CCSIO_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $CCSIO_API_KEY" \
  -H "X-Request-ID: 01K7YQ4D8M2P6S9V3X5Z7B1C4F" \
  -H "X-Session-Id: support-ticket-4312" \
  -H "Content-Type: application/json" \
  -d '{"model": "qwen3.8-flash-next", "messages": [{"role": "user", "content": "Hi"}]}'
# HTTP/2 200
# x-request-id: 01K7YQ4D8M2P6S9V3X5Z7B1C4F
Explora la plataforma

Obtén tu primera key API

El registro está abierto. Cuatro pasos hasta tu primera llamada: crea tu cuenta, crea tu organización, crea tu API key y empieza a usarla.

  1. 01Crea tu cuenta
  2. 02Crea tu organización
  3. 03Crea tu API key
  4. 04Empieza a usarla