Documentación API
Compatible OpenAI. Sin migración. Una API para 7 modelos.
1. Visión general
La API de XABLE es totalmente compatible con OpenAI. Usa cualquier SDK o cliente HTTP — solo cambia base_url y api_key para alternar sin problemas.
Inicio rápido
Elige cualquiera de las tres opciones:
from openai import OpenAI
client = OpenAI(
base_url="https://xable.com.cn/v1",
api_key="xb_live_<your-key>"
)
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "你好,请用中文回答"}]
)
print(response.choices[0].message.content)curl https://xable.com.cn/v1/chat/completions \
-H "Authorization: Bearer xb_live_<your-key>" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash",
"messages": [
{"role": "user", "content": "你好,请用中文回答"}
]
}'import OpenAI from "openai"
const client = new OpenAI({
baseURL: "https://xable.com.cn/v1",
apiKey: "xb_live_<your-key>"
})
const response = await client.chat.completions.create({
model: "deepseek-v4-flash",
messages: [{ role: "user", content: "你好,请用中文回答" }]
})
console.log(response.choices[0].message.content)2. Autenticación
Todas las peticiones API deben llevar un Bearer Token en la cabecera HTTP para autenticarse. El token es tu API Key.
Obtener API Key
Inicia sesión en Consola →Crea una clave en la página «API Key». Prefijo: xb_live_.
Authorization: Bearer xb_live_<your-api-key>3. Endpoints API
Todos los endpoints son RESTful. URL base:
| Endpoint | Método | Descripción |
|---|---|---|
/v1/models | GET | Lista de modelos disponibles |
/v1/chat/completions | POST | Chat (core) |
Nota: las rutas no usan prefijo /api; usa /v1/... directamente
4. Modelos
Consulta todos los modelos disponibles:
curl https://xable.com.cn/v1/models \
-H "Authorization: Bearer xb_live_<your-key>"| Campo | Tipo | Descripción |
|---|---|---|
id | string | Identificador del modelo (usado como parámetro model) |
object | string | Fijo a "model" |
created | int | Marca de tiempo de creación |
owned_by | string | Proveedor del modelo |
Para detalles y precios, visita página de Model API .
5. Chat
Usa /v1/chat/completions para enviar una petición de chat.
Ejemplo
curl https://xable.com.cn/v1/chat/completions \
-H "Authorization: Bearer xb_live_<your-key>" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash",
"messages": [
{"role": "system", "content": "你是一个有用的助手"},
{"role": "user", "content": "请用中文介绍一下你自己"}
],
"temperature": 0.7,
"max_tokens": 2048,
"top_p": 1,
"frequency_penalty": 0,
"presence_penalty": 0,
"stream": false
}'6. Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
model | string | Sí | ID del modelo, ver lista |
messages | array | Sí | Lista de mensajes |
temperature | number | No | Temperatura, 0–2, def. 1 |
top_p | number | No | Top-p, 0–1, def. 1 |
n | int | No | Nº de respuestas, def. 1 |
stream | bool | No | Streaming, def. false |
max_tokens | int | No | Máx. tokens de salida |
stop | string/array | No | Secuencia de parada |
frequency_penalty | number | No | Penalización de frecuencia, −2 a 2, def. 0 |
presence_penalty | number | No | Penalización de presencia, −2 a 2, def. 0 |
user | string | No | ID de usuario (para monitoreo) |
Objeto Message
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
role | string | Sí | system / user / assistant / tool |
content | string | Sí | Contenido del mensaje |
name | string | No | Autor del mensaje |
tool_calls | array | No | Llamadas a herramientas (rol assistant) |
tool_call_id | string | No | ID de llamada (rol tool) |
7. Formato de respuesta
Respuestas no-streaming devuelven el JSON completo:
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1717500000,
"model": "deepseek-v4-flash",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "我是 AI 助手,很高兴为你服务!"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 15,
"completion_tokens": 20,
"total_tokens": 35
}
}| Campo | Tipo | Descripción |
|---|---|---|
id | string | ID único de petición |
object | string | Fijo a chat.completion |
created | int | Marca de tiempo |
model | string | Modelo usado |
choices[].message.content | string | Texto de respuesta |
choices[].finish_reason | string | stop / length / content_filter |
usage.prompt_tokens | int | Tokens de entrada |
usage.completion_tokens | int | Tokens de salida |
usage.total_tokens | int | Tokens totales |
8. Streaming
Define stream: true para habilitar Server-Sent Events (SSE):
from openai import OpenAI
client = OpenAI(
base_url="https://xable.com.cn/v1",
api_key="xb_live_<your-key>"
)
stream = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "你好"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")Formato streaming (cada línea empieza con data: ):
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"你"},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"好"},"finish_reason":null}]}
data: [DONE]9. Generación de imágenes
Algunos modelos generan imágenes. Usa /v1/images/generations endpoint, compatible con la API de imágenes OpenAI.
Ejemplo
curl https://xable.com.cn/v1/images/generations \
-H "Authorization: Bearer xb_live_<your-key>" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash",
"prompt": "A futuristic city with neon lights, digital art style",
"n": 1,
"size": "1024x1024"
}'Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
model | string | Sí | ID del modelo de imagen |
prompt | string | Sí | Descripción de la imagen |
n | int | No | Imágenes por llamada, def. 1 |
size | string | No | Tamaño: 256x256 / 512x512 / 1024x1024 |
quality | string | No | Calidad: standard / hd (algunos modelos) |
Ejemplo Python SDK
from openai import OpenAI
client = OpenAI(
base_url="https://xable.com.cn/v1",
api_key="xb_live_<your-key>"
)
response = client.images.generate(
model="stable-diffusion-xl-free",
prompt="A futuristic city with neon lights",
n=1,
size="1024x1024"
)
print(response.data[0].url)10. Guía SDK
La API de XABLE es totalmente compatible con OpenAI. Puedes usar el SDK OpenAI en cualquier lenguaje. Aquí hay ejemplos completos para lenguajes populares.
Python (Recomendado)
Instalar: pip install openai
from openai import OpenAI
client = OpenAI(
base_url="https://xable.com.cn/v1",
api_key="xb_live_<your-key>"
)
# 非流式聊天
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[
{"role": "system", "content": "你是一个有用的助手"},
{"role": "user", "content": "请用中文介绍 XABLE 平台"}
],
temperature=0.7,
max_tokens=1024
)
print(response.choices[0].message.content)
# 流式聊天
stream = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "你好"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")Node.js / TypeScript
Instalar: npm install openai
import OpenAI from "openai"
const client = new OpenAI({
baseURL: "https://xable.com.cn/v1",
apiKey: "xb_live_<your-key>"
})
// 非流式聊天
const response = await client.chat.completions.create({
model: "deepseek-v4-flash",
messages: [
{ role: "system", content: "你是一个有用的助手" },
{ role: "user", content: "请用中文介绍 XABLE 平台" }
],
temperature: 0.7,
max_tokens: 1024
})
console.log(response.choices[0].message.content)
// 流式聊天
const stream = await client.chat.completions.create({
model: "deepseek-v4-flash",
messages: [{ role: "user", content: "你好" }],
stream: true
})
for await (const chunk of stream) {
if (chunk.choices[0]?.delta?.content) {
process.stdout.write(chunk.choices[0].delta.content)
}
}Go
Instalar: go get github.com/sashabaranov/go-openai
package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
cfg := openai.DefaultConfig("xb_live_<your-key>")
cfg.BaseURL = "https://xable.com.cn/v1"
client := openai.NewClientWithConfig(cfg)
// 非流式聊天
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "deepseek-v4-flash",
Messages: []openai.ChatCompletionMessage{
{Role: "system", Content: "你是一个有用的助手"},
{Role: "user", Content: "请用中文介绍 XABLE 平台"},
},
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.Choices[0].Message.Content)
}Java
Dependencia Maven: com.theokanning.openai-gpt3-java
import com.theokanning.openai.OpenAiService;
import com.theokanning.openai.completion.chat.*;
List<ChatMessage> messages = new ArrayList<>();
messages.add(new ChatMessage("system", "你是一个有用的助手"));
messages.add(new ChatMessage("user", "请用中文介绍 XABLE 平台"));
OpenAiService service = new OpenAiService("xb_live_<your-key>", 30);
service.setBaseUrl("https://xable.com.cn/v1");
ChatCompletionRequest request = ChatCompletionRequest.builder()
.model("deepseek-v4-flash")
.messages(messages)
.build();
service.createChatCompletion(request).getChoices()
.forEach(c -> System.out.println(c.getMessage().getContent()));11. Códigos de error
| Código HTTP | Tipo de error | Descripción |
|---|---|---|
400 | invalid_request_error | Parámetros de petición inválidos |
401 | authentication_error | API Key inválida o faltante |
403 | permission_error | Sin permiso (saldo insuficiente o no autenticado) |
404 | not_found | Recurso no encontrado |
429 | rate_limit_error | Límite de frecuencia excedido |
500 | server_error | Error interno del servidor |
503 | service_unavailable | Servicio no disponible |
{
"error": {
"message": "Incorrect API key provided: xxx. You can find your API key at https://xable.com.cn/console.",
"type": "authentication_error",
"param": null,
"code": "invalid_api_key"
}
}12. Límites
Para garantizar estabilidad, las llamadas API tienen límite de frecuencia. Superarlo devuelve 429.
| Elemento | Predeterminado | Descripción |
|---|---|---|
| Frecuencia | 10 RPM | Máx 10 peticiones/min |
| Concurrencia | 10 concurrentes | Máx 10 peticiones simultáneas |
| Tiempo de espera | 120 segundos | Espera máx. por petición |
| Máx tokens/petición | Según modelo | Varía por modelo |
Los clientes empresariales pueden contactar soporte para subir límites. Tanto usuarios gratis como de pago usan la base de cómputo propia + socia de XABLE para inferencia estable.
13. Facturación
XABLE usa facturación por uso, cobrando en tiempo real por tokens consumidos, con precios separados de entrada/salida.
Reglas de facturación
| Elemento | Descripción |
|---|---|
| Unidad de facturación | Por 1000 tokens (~700–800 caracteres) |
| Cargo mínimo | Mín ¥0.005 por llamada |
| Facturación | El uso se descuenta del saldo en tiempo real, sin consumo mínimo; saldo insuficiente devuelve 402 XB_INSUFFICIENT_BALANCE. |
| Método de cobro | Descontado del saldo en tiempo real, sin facturación post-pago |
| Consulta de saldo | Inicia sesión en la consola para ver saldo y uso |
Precios
Los precios varían por modelo. Consulta página de Model API para el precio de entrada/salida de cada modelo. En general, los modelos open-source/gratis son más baratos; los insignia cuestan más pero son más capaces.
💡 Consejos para ahorrar
- • Usa modelos open-source/gratis (p. ej. deepseek-v4-flash) para tareas simples en vez de modelos insignia
- • Define un max_tokens razonable para evitar salida muy larga
- • Usa streaming (stream: true) para menor latencia del primer token
- • Los usuarios empresariales pueden contactar soporte para precios exclusivos y mayor concurrencia
Preguntas frecuentes
¿Cómo obtengo una API Key?
Tras registrarte e iniciar sesión, créala en la página «API Key» de la consola. El prefijo es xb_live_; cópiala y guárdala tras crearla.
¿Qué protocolo usa la API?
Totalmente compatible con OpenAI. Soporta el endpoint chat/completions y los SDK OpenAI de Python/Node.js.
¿Diferencia entre usuarios gratis y de pago?
Los gratis prueban chat IA básico. Los de pago (saldo > 0) tienen mayor concurrencia, servicio más estable y acceso total a modelos.
¿Cómo se factura?
Facturación en tiempo real por tokens, entrada y salida separados. Mín ¥0.005 (0.5 céntimos) por llamada.
¿Qué SDK se soportan?
Todos los SDK OpenAI: Python, Node.js, Go, Java, .NET, etc. Solo cambia base_url y api_key.
¿Cuál es el límite de concurrencia?
Por defecto 10 concurrentes. Los empresariales pueden subirlo vía soporte.