La API AI Chat v2 (Documentation Index
Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt
Use this file to discover all available pages before exploring further.
/aichat2/conversations) es la nueva generación de la interfaz de conversación, una versión completamente mejorada de la API AI Chat. Basada en la simplicidad y gestión de conversaciones múltiples de la versión v1, se ha ampliado con:
- Entrada multimodal del usuario: a través del campo estructurado
messagese pueden enviar directamente texto + imágenes + archivos, sin necesidad de adjuntar indirectamente mediantereferences. - Llamadas a herramientas tipo agente: incluye un conjunto de herramientas integradas para búsqueda en red, rastreo web, lectura de archivos, etc., y permite conectar servidores MCP autorizados por el usuario (Google Drive, Notion, Slack, GitHub, etc.). El modelo puede llamar autónomamente a estas herramientas en múltiples rondas dentro de una sola solicitud para completar tareas complejas.
- Eventos estructurados en streaming: mediante
accept: text/event-streamoapplication/x-ndjsonse reciben eventos token a token comotext_delta,tool_use,tool_result,thinking,citation,card,artifact, facilitando la renderización diferenciada en el frontend. - Interrumpible / Reanudable: cuando el modelo necesita información adicional del usuario, emite un evento
ask_user_questiony pausa la conversación; la siguiente llamada puede continuar rellenando la respuesta mediantetool_results. - Nuevas acciones CRUD: en el mismo endpoint, mediante el campo
actionse pueden realizarretrieve/retrieve_batch/update/delete, sin necesidad de APIs adicionales para gestión de sesiones. - Lista de modelos en constante actualización: acceso por defecto a modelos contemporáneos como GPT-5.4, Claude Opus 4.7, Claude Sonnet 4.6, Gemini 3.1 Pro, GLM 5.1, DeepSeek V4, Kimi K2.5, entre otros.
model + question (+ opcional stateful / id / references / preset) para obtener una respuesta JSON {answer, id} equivalente a v1, por lo que la migración desde /aichat/conversations solo requiere cambiar la ruta a /aichat2/conversations sin reescribir el cliente.
Si actualmente usas /aichat/conversations, la interfaz antigua seguirá disponible para que migres a tu ritmo.
Proceso de solicitud
Para usar la API, primero debes solicitar el servicio correspondiente en la página de AI Chat v2 API. Al ingresar, haz clic en el botón «Acquire» para obtener las credenciales necesarias para las solicitudes. Si no has iniciado sesión o registrado, serás redirigido automáticamente a la página de inicio de sesión; tras registrarte e iniciar sesión, volverás automáticamente a esta página. Al solicitar por primera vez, recibirás un crédito gratuito para usar la API sin costo.Uso básico
El uso más sencillo es idéntico a v1: envíamodel + question y recibe {answer, id}.
Ejemplo CURL:
model se pueden ver directamente en el panel Try a la derecha, con categorías comunes como:
- OpenAI:
gpt-5.4-mini,gpt-5.4-nano,gpt-5.2-pro,gpt-5.1-all,gpt-5-all,gpt-4.1,gpt-4o,gpt-4o-image,o3,o4-mini, etc. - Anthropic:
claude-opus-4-7,claude-opus-4-6,claude-opus-4-5-20251101,claude-sonnet-4-6,claude-sonnet-4-5-20250929,claude-haiku-4-5-20251001, etc. - Google:
gemini-3.1-pro,gemini-3.1-pro-preview,gemini-3.1-flash-image-preview,gemini-3-pro-preview,gemini-2.5-flash-lite, etc. - xAI:
grok-4,grok-4-1-fast,grok-4-1-fast-reasoning,grok-3-mini-fast, etc. - DeepSeek:
deepseek-v4-flash,deepseek-v3.2-exp,deepseek-r1-0528, etc. - Moonshot:
kimi-k2.5,kimi-k2-thinking,kimi-k2-thinking-turbo, etc. - Zhipu:
glm-5.1,glm-5,glm-5-turbo,glm-4.7,glm-4.5v, etc.
Conversaciones múltiples
Como en v1, envíastateful: true para activar la conservación de la sesión; la API devolverá un id. En solicitudes posteriores, incluye el mismo id para continuar la conversación, sin necesidad de mantener el historial de mensajes por tu cuenta.
Primera solicitud:
id:
statefulestruepor defecto; omitirlo es equivalente a enviarlo explícitamente comotrue. Si no quieres que el servidor guarde la conversación, establecestateful: false.
Respuesta en streaming
v2 soporta dos formatos de streaming, seleccionados mediante el encabezadoaccept:
| Escenario | accept | Formato de datos |
|---|---|---|
| Frontend web / EventSource | text/event-stream | data: {json}\n\n, última línea data: [DONE]\n\n |
| Servidor / CLI / análisis streaming en Node | application/x-ndjson | Un objeto JSON por línea |
| Sin streaming | application/json (por defecto) | Respuesta completa {answer, id} |
Ejemplo NDJSON
text_delta:
Ejemplo SSE
El navegador conEventSource no soporta cuerpo personalizado, se recomienda usar fetch y parsear manualmente por \n\n:
Tipos de eventos en streaming
type | Significado |
|---|---|
text_delta | Fragmentos incrementales de texto de la respuesta del asistente. content es el contenido nuevo; para compatibilidad con v1, el evento también incluye delta_answer (igual a content) y id. |
thinking | Proceso de razonamiento del modelo (solo aparece en modelos que exponen razonamiento). |
tool_use | El modelo decide usar una herramienta, el evento incluye tool_id, tool_name e input. |
tool_result | Resultado de la ejecución de la herramienta, emparejado con el tool_use anterior mediante tool_id. is_error indica si falló. |
card | Tarjeta estructurada generada por la herramienta (ej. imágenes, vistas previas de enlaces), adecuada para renderizado directo. |
citation | Fuente URL que complementa un fragmento de texto citado. |
ask_user_question | El modelo solicita información adicional al usuario, la conversación entra en estado awaiting_user_input (ver Reanudar conversación pausada). |
artifact | Producto independiente generado por el modelo (ej. bloques de código, documentos), puede guardarse o descargarse. |
system_message | Mensaje del sistema (no contenido de usuario o asistente), solo para mostrar en UI. |
compact | Evento de contexto interno comprimido, no requiere tratamiento especial. |
error | Se produjo un error en esta ronda, message describe el error. |
done | Fin de la respuesta en streaming, incluye usage (tokens de prompt, completion y total) y terminal_reason. |
content de text_delta equivale a la respuesta answer en modo application/json.
Entrada multimodal
Si la entrada del usuario incluye imágenes o archivos, envíamessage (array) en lugar de question. Cada elemento es un bloque de contenido:
text— texto normal, requiere el campotext.image_url— imagen, requiereimage_url.url.file_url— archivo (PDF, CSV, TXT, etc.), requierefile_url.url.
Relación con references de v1
Para compatibilidad con clientes antiguos, v2 aún reconoce el campo references: ["https://...", ...]:
- Las URLs con extensiones
jpg / jpeg / png / gif / bmp / webp / svg / heic / heifse convierten automáticamente en bloquesimage_url. - Otras extensiones se convierten en bloques
file_url. - Si también se proporciona
question, se coloca como un bloquetextal inicio.
/aichat2/conversations y el uso original de references seguirá funcionando.
Para un control más detallado (por ejemplo, colocar varias imágenes entre textos o controlar el orden), usa directamente el array message.
Llamadas a herramientas y MCP
La mejora central de v2 es que el modelo puede llamar autónomamente a herramientas para completar tareas en múltiples pasos, esto está activado por defecto y no requiere configuración extra en la solicitud. Escenarios comunes:- Usuario pregunta: «¿Puedes buscar las nuevas exposiciones en Shanghái?» → el modelo usa la herramienta integrada de búsqueda web → organiza los resultados en la respuesta.
- Usuario pide: «Lee este PDF y haz un resumen» → el modelo usa la herramienta file_read → genera el resumen.
- Usuario ha autorizado en Connections Google Drive / GitHub / Notion, etc. → el modelo puede usar las herramientas MCP correspondientes para leer y escribir datos.
tool_use y tool_result, por ejemplo:
tool_use, tool_result, card y citation; la salida final del modelo seguirá llegando por text_delta.
max_turns puede limitar cuántas veces el modelo puede llamar a herramientas en una sola solicitud; el límite por defecto lo decide la plataforma. Establecerlo bajo (ej. max_turns: 1) fuerza respuestas únicas sin llamadas a herramientas.
Reanudar conversación pausada
Algunas herramientas hacen que el modelo «pregunte al usuario». En ese caso, el modelo emite un eventoask_user_question y la conversación queda congelada en estado awaiting_user_input:
id y rellena la respuesta en tool_results:
tool_use_id debe coincidir exactamente con el tool_id del evento pausado; si no, se devuelve un error 400. Cuando se envían tool_results, se ignoran question, message y references.
Si el usuario decide omitir esta pregunta, puede enviar una nueva question o message; la plataforma marcará automáticamente la llamada a herramienta pausada como «usuario omitió».
Gestión de conversaciones (CRUD)
v2 ofrece gestión ligera de sesiones en el mismo endpoint mediante el campoaction, sin necesidad de APIs adicionales.
action: retrieve — Obtener una conversación
messages, model, title, tools_used, etc.).
action: retrieve_batch — Listar resúmenes de conversaciones
{ items: [...], total }. Los resúmenes no incluyen messages, ideal para listas laterales; al abrir una conversación, usa action: retrieve para obtener el historial completo.
Filtros opcionales: user_id, application_id, model_group, model.
action: update — Cambiar título o reescribir historial
messages, pero el servidor realiza una validación estricta del esquema (debe ser la forma plegada ToolUseContent); si no cumple, devuelve 400. Generalmente se recomienda solo para cambiar title.
action: delete — Eliminar una conversación
{ id, success: true }. La eliminación es irreversible, confirma antes de llamar.
Migración suave desde v1
Si ya usas/aichat/conversations, migrar a v2 casi no requiere cambios:
- Cambia la URL de
https://api.xhuoapi.ai/v1/aichat/conversationsahttps://api.xhuoapi.ai/v1/aichat2/conversations. - Si usabas nombres de modelos v1 (como
gpt-3.5,gpt-4-browsing, etc.), al cambiar a v2 se recomienda actualizar a modelos contemporáneos (comogpt-5.4,claude-opus-4-7,gemini-3.1-pro, etc.). - Los campos del stream NDJSON mantienen compatibilidad hacia atrás: cada evento
text_deltasigue incluyendodelta_answereid, por lo que los clientes que parseabandelta_answerlínea a línea no necesitan modificar nada.
message, SSE, llamadas a herramientas, CRUD con action) a tu ritmo.
Manejo de errores
Las respuestas de error tienen este formato:400 bad_request: faltan campos obligatorios,tool_use_idno coincide, esquema inválido enmessages, etc.401 invalid_token: encabezadoauthorizationincorrecto.404 not_found: enaction: retrieve / update / delete, elidno existe.429 too_many_requests: se ha superado el límite de tasa.500 chat_error: error en el LLM upstream ocompletion_tokens=0en esta ronda (se considera no consumido, sin cobro).
{"type":"error","message":"..."} seguido del cierre del stream.

