Referencia de la API

Conceptos básicos de integración

#URL base

Todos los endpoints están bajo /v1 en el dominio propio de este despliegue. No hay selección de región — el enrutamiento a los proveedores upstream ocurre detrás del gateway.

#Encabezado de autenticación

Un único encabezado Authorization: Bearer es toda la autenticación. Sin firma, sin timestamp y sin encabezado por usuario — nada de lo que otros gateways exigen además del bearer token existe aquí.

#Envoltorio de error

Los rechazos del lado del gateway usan el envoltorio con formato OpenAI y type "xiaoxiang_error". Los errores upstream se reenvían sin cambios, los endpoints de tareas asíncronas responden con un cuerpo plano y dos casos no llevan cuerpo — lee la página de errores antes de escribir tu parser.

error.json
HTTP/1.1 402 Payment Required
X-Oneapi-Request-Id: 2026091023...

{
  "error": {
    "message": "insufficient account balance, please top up to continue (request id: 2026091023...)",
    "type": "xiaoxiang_error",
    "code": "insufficient_user_quota"
  }
}

Los cinco envoltorios y la tabla de códigos de error →

#Política de reintentos

Reintenta los 429 y 5xx con backoff exponencial, respetando Retry-After cuando esté presente. No reintentes los errores de validación 4xx — el mismo cuerpo volverá a fallar. En los envíos facturables, envía una Idempotency-Key para que un reintento tras un timeout reproduzca el primer resultado en lugar de iniciar un segundo trabajo.

backoff.py
import time, requests

def call_with_backoff(url, headers, body, tries=5):
    for i in range(tries):
        r = requests.post(url, headers=headers, json=body)
        if r.status_code not in (429, 500, 502, 503, 504):
            return r
        # 429 and 413 have no JSON body — never parse before checking status.
        wait = int(r.headers.get("Retry-After", 2 ** i))
        time.sleep(wait)
    r.raise_for_status()

Cómo funcionan las claves de idempotencia →

#Especificación legible por máquina

El mismo contrato en dos formatos generados: OpenAPI para generar clientes, Postman y herramientas de API, y un único archivo markdown para pegar en un agente de código. Ambos se reconstruyen a partir de estas páginas, así que no pueden desviarse de lo que estás leyendo.

La URL del servidor se reescribe a este dominio, así que los clientes generados no necesitan configuración adicional.
generate-a-client.sh
# Any OpenAPI generator works; this is the common one.
npx @openapitools/openapi-generator-cli generate \
  -i https://www.aisplice.store/openapi.json \
  -g python \
  -o ./gateway-client

#Resumen de endpoints

Todas las rutas aceptan el cuerpo de solicitud de OpenAI — los parámetros específicos del proveedor (anthropic tool_use, gemini thinking_config) se reenvían sin cambios. Las rutas nativas del proveedor y las heredadas congeladas se listan por separado en la página de compatibilidad.

Texto
POST/v1/chat/completionsChat multiturno, llamadas a herramientas, streaming, modo JSON.
POST/v1/responsesTexto en una sola llamada, con salidas estructuradas y razonamiento.
POST/v1/messagesFormato nativo de Anthropic — misma autenticación, sin adaptador.
POST/v1/responses/compactCondensa una conversación larga en los modelos que admiten compactación — sin versión en streaming.
Vectores
POST/v1/moderationsModeración de contenido con el mismo formato de API.
Música
POST/v1/music/generationsGeneración de música asíncrona — devuelve un task_id; admite webhook opcional.
GET/v1/music/tasks/:task_idConsulta el estado y el progreso de una tarea de música asíncrona.
GET/v1/music/tasks/:task_id/contentObtén el audio terminado a través del gateway.
Imagen
POST/v1/images/generationsLa API de imágenes de OpenAI: con cualquier modelo de imagen, la imagen terminada viene en la respuesta.
POST/v1/images/tasksGeneración de imágenes asíncrona, la ruta que usan los modelos de imagen — devuelve un task_id; admite webhook opcional.
GET/v1/images/tasks/:task_idConsulta el estado y el progreso de una tarea de imagen asíncrona.
GET/v1/images/tasks/:task_id/contentObtén las URL finales de las imágenes — enlaces persistentes, seguros para guardar.
POST/v1/images/editsLa API de edición de imágenes de OpenAI: sube las imágenes o indica sus URL; con cualquier modelo de imagen.
Video
POST/v1/videosGeneración de video con formato OpenAI (Sora, Doubao) — admite webhook opcional.
GET/v1/videos/:task_idConsulta el estado de una tarea asíncrona; el contenido está en /content.
GET/v1/videos/:task_id/contentDescarga el video terminado a través del gateway.
DELETE/v1/videos/:task_idCancela una tarea que aún no ha llegado a un estado final.
POST/v1/videos/:video_id/remixVuelve a renderizar un video existente con un prompt nuevo, en los modelos que lo admiten.
3D
POST/v1/model3d/tasksGeneración y posprocesamiento asíncronos de recursos 3D — devuelve un task_id.
GET/v1/model3d/tasks/:task_idConsulta la tarea 3D; la URL del resultado llega en el cuerpo de la tarea, no hay ruta /content.
Multimedia
POST/v1/media/upload-policyCrea una política de subida de corta duración para una imagen, un video, un audio o un archivo genérico, hasta su límite configurado.
Suscripciones de apps
POST/v1/google-play/verifyVerifica un token de compra de Google Play para tu app con la cuenta de servicio configurada en esta clave — gratis, sin llamada a modelos.
POST/v1/xsolla/verifyComprueba si un usuario de Xsolla tiene una suscripción activa con la clave API de Xsolla configurada en esta clave: gratis, sin llamada a modelos.
Cuenta
GET/v1/balanceSaldo de la cuenta y lo que esta clave aún puede gastar — gratis, sin llamada a modelos.
Metadatos
GET/v1/modelsLista todos los modelos que esta clave puede usar.
GET/v1/models/:modelObtiene una entrada de modelo — el formato que consultan los clientes de Anthropic y OpenAI al iniciarse.

¿Sigues con el problema?

Envíanos el ID de solicitud o el mensaje de error y lo revisaremos.