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.
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"
}
}#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.
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()#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.
openapi.json
OpenAPI 3.1 — cada ruta documentada, sus parámetros y sus respuestas de error.
llms-full.txt
Todo el contrato de la API en un único archivo markdown, dimensionado para la ventana de contexto de un agente.
llms.txt
Índice breve de todas las páginas de la documentación, para clientes de IA que lo obtienen primero.
# 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/completions | Chat multiturno, llamadas a herramientas, streaming, modo JSON. |
| POST | /v1/responses | Texto en una sola llamada, con salidas estructuradas y razonamiento. |
| POST | /v1/messages | Formato nativo de Anthropic — misma autenticación, sin adaptador. |
| POST | /v1/responses/compact | Condensa una conversación larga en los modelos que admiten compactación — sin versión en streaming. |
| Vectores | ||
| POST | /v1/moderations | Moderación de contenido con el mismo formato de API. |
| Música | ||
| POST | /v1/music/generations | Generación de música asíncrona — devuelve un task_id; admite webhook opcional. |
| GET | /v1/music/tasks/:task_id | Consulta el estado y el progreso de una tarea de música asíncrona. |
| GET | /v1/music/tasks/:task_id/content | Obtén el audio terminado a través del gateway. |
| Imagen | ||
| POST | /v1/images/generations | La API de imágenes de OpenAI: con cualquier modelo de imagen, la imagen terminada viene en la respuesta. |
| POST | /v1/images/tasks | Generació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_id | Consulta el estado y el progreso de una tarea de imagen asíncrona. |
| GET | /v1/images/tasks/:task_id/content | Obtén las URL finales de las imágenes — enlaces persistentes, seguros para guardar. |
| POST | /v1/images/edits | La 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/videos | Generación de video con formato OpenAI (Sora, Doubao) — admite webhook opcional. |
| GET | /v1/videos/:task_id | Consulta el estado de una tarea asíncrona; el contenido está en /content. |
| GET | /v1/videos/:task_id/content | Descarga el video terminado a través del gateway. |
| DELETE | /v1/videos/:task_id | Cancela una tarea que aún no ha llegado a un estado final. |
| POST | /v1/videos/:video_id/remix | Vuelve a renderizar un video existente con un prompt nuevo, en los modelos que lo admiten. |
| 3D | ||
| POST | /v1/model3d/tasks | Generación y posprocesamiento asíncronos de recursos 3D — devuelve un task_id. |
| GET | /v1/model3d/tasks/:task_id | Consulta la tarea 3D; la URL del resultado llega en el cuerpo de la tarea, no hay ruta /content. |
| Multimedia | ||
| POST | /v1/media/upload-policy | Crea 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/verify | Verifica 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/verify | Comprueba 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/balance | Saldo de la cuenta y lo que esta clave aún puede gastar — gratis, sin llamada a modelos. |
| Metadatos | ||
| GET | /v1/models | Lista todos los modelos que esta clave puede usar. |
| GET | /v1/models/:model | Obtiene 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.