L’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) è la nuova generazione dell’interfaccia di conversazione, un aggiornamento completo rispetto a AI Chat API. Basata sulla semplicità e gestione di conversazioni multi-turno di v1, estende le funzionalità con:
- Input utente multimodale: tramite il campo strutturato
messagesi possono inviare direttamente testo + immagini + blocchi di file, senza dover usarereferencescome allegati indiretti. - Chiamata agent di strumenti: integra una serie di strumenti per ricerca online, scraping web, lettura file, ecc., e può collegarsi a server MCP autorizzati dall’utente (Google Drive, Notion, Slack, GitHub, ecc.). Il modello può autonomamente invocare strumenti multi-turno in una singola richiesta per completare compiti complessi.
- Eventi strutturati in streaming: con
accept: text/event-streamoapplication/x-ndjsonsi ricevono eventi token-per-token cometext_delta,tool_use,tool_result,thinking,citation,card,artifact, facilitando il rendering frontend per tipo. - Interruzione e ripresa: il modello emette eventi
ask_user_questione si mette in pausa quando serve input utente; la ripresa avviene inviando le risposte intool_results. - Nuove azioni CRUD: tramite il campo
actionsullo stesso endpoint si possono eseguireretrieve/retrieve_batch/update/deletesenza API di gestione sessione aggiuntive. - Lista modelli in aggiornamento continuo: accesso predefinito a modelli contemporanei come GPT-5.4, Claude Opus 4.7, Claude Sonnet 4.6, Gemini 3.1 Pro, GLM 5.1, DeepSeek V4, Kimi K2.5, ecc.
model + question (+ opzionali stateful / id / references / preset) per ottenere la stessa risposta JSON {answer, id} di v1. Quindi la migrazione da /aichat/conversations a /aichat2/conversations non richiede riscrittura client, solo la modifica del percorso.
Se stai usando /aichat/conversations, l’interfaccia vecchia rimarrà attiva, puoi migrare con calma.
Procedura di richiesta
Per usare l’API, visita la pagina corrispondente di AI Chat v2 API e clicca sul pulsante «Acquire» per ottenere le credenziali necessarie. Se non sei loggato o registrato, verrai reindirizzato automaticamente alla pagina di login; dopo registrazione e login tornerai alla pagina corrente. Al primo accesso viene offerto un credito gratuito per utilizzare l’API.Uso base
L’uso più semplice è identico a v1: inviamodel + question e ricevi {answer, id}.
Esempio CURL:
model si possono vedere nel pannello Try a destra, categorie comuni includono:
- 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, ecc. - 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, ecc. - 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, ecc. - xAI:
grok-4,grok-4-1-fast,grok-4-1-fast-reasoning,grok-3-mini-fast, ecc. - DeepSeek:
deepseek-v4-flash,deepseek-v3.2-exp,deepseek-r1-0528, ecc. - Moonshot:
kimi-k2.5,kimi-k2-thinking,kimi-k2-thinking-turbo, ecc. - Zhipu:
glm-5.1,glm-5,glm-5-turbo,glm-4.7,glm-4.5v, ecc.
Conversazioni multi-turno
Come in v1, inviastateful: true per abilitare la memorizzazione della sessione; l’API restituisce un id da usare nelle richieste successive per continuare la conversazione senza dover gestire la cronologia dei messaggi.
Prima richiesta:
id:
statefulètruedi default, omettere o specificaretrueè equivalente. Se non vuoi che il server memorizzi la conversazione, imposta esplicitamentestateful: false.
Risposta in streaming
v2 supporta due formati di streaming, selezionabili tramite l’headeraccept:
| Scenario | accept | Formato dati |
|---|---|---|
| Frontend web / EventSource | text/event-stream | data: {json}\n\n, ultima riga data: [DONE]\n\n |
| Server / CLI / parsing Node in streaming | application/x-ndjson | Ogni riga è un oggetto JSON |
| Nessuno streaming | application/json (default) | Risposta completa {answer, id} |
Esempio NDJSON
text_delta:
Esempio SSE
Il browser conEventSource non supporta corpo personalizzato, si consiglia fetch con parsing manuale su \n\n:
Tipi di eventi in streaming
type | Descrizione |
|---|---|
text_delta | Frammento incrementale di testo della risposta assistente. content è il contenuto aggiunto; per compatibilità v1 include anche delta_answer (uguale a content) e id. |
thinking | Processo di ragionamento del modello (presente solo se il modello espone reasoning). |
tool_use | Il modello decide di usare uno strumento; evento contiene tool_id, tool_name, input. |
tool_result | Risultato dell’esecuzione dello strumento, abbinato a tool_use tramite tool_id; is_error indica fallimento. |
card | Scheda strutturata prodotta dallo strumento (es. immagine, anteprima link), pronta per il rendering. |
citation | URL di fonte per integrare il testo citato. |
ask_user_question | Il modello richiede input utente, la conversazione entra in stato awaiting_user_input (vedi Ripresa conversazioni sospese). |
artifact | Prodotto indipendente generato dal modello (es. blocco codice, documento), salvabile o scaricabile. |
system_message | Messaggio di sistema (non contenuto utente/assistente), solo per indicazioni UI. |
compact | Evento di compressione contesto interno, senza necessità di gestione speciale. |
error | Errore nella conversazione, message descrive il problema. |
done | Fine dello streaming, include usage (token prompt/completion/total) e terminal_reason. |
content di text_delta per ottenere lo stesso risultato di application/json.
Input multimodale
Se l’input utente include immagini o file, inviamessage (array) invece di question. Ogni elemento è un blocco di contenuto:
text— testo semplice, campo obbligatoriotext.image_url— immagine, campo obbligatorioimage_url.url.file_url— file (PDF, CSV, TXT, ecc.), campo obbligatoriofile_url.url.
Relazione con references di v1
Per compatibilità con client vecchi, v2 riconosce ancora il campo references: ["https://...", ...]:
- URL con estensioni
jpg / jpeg / png / gif / bmp / webp / svg / heic / heifvengono convertiti automaticamente in blocchiimage_url; - altre estensioni diventano blocchi
file_url; - se è presente anche
question, viene inserito come bloccotextall’inizio.
/aichat2/conversations; l’uso di references funziona come prima.
Per un controllo più preciso (es. inserire più immagini tra testi o ordine importante), usa direttamente l’array message.
Invocazione strumenti e MCP
Il punto di forza di v2 è che il modello può autonomamente chiamare strumenti per completare compiti multi-step, attivato di default senza configurazioni aggiuntive nel client. Esempi tipici:- L’utente chiede «Cerca le nuove mostre a Shanghai» → il modello usa la ricerca web integrata → organizza i risultati nella risposta.
- L’utente chiede «Leggi questo PDF e scrivi un riassunto» → il modello usa file_read → genera il riassunto.
- L’utente ha autorizzato Google Drive / GitHub / Notion in Connections → il modello può usare gli strumenti MCP corrispondenti per leggere/scrivere dati.
tool_use e tool_result, ad esempio:
tool_use / tool_result / card / citation; la risposta finale del modello arriva comunque tramite text_delta.
max_turns limita il numero massimo di invocazioni strumenti per richiesta; il limite predefinito è deciso dalla piattaforma. Impostandolo basso (es. max_turns: 1) si forza una risposta singola senza chiamate strumenti.
Ripresa conversazioni sospese
Alcuni strumenti fanno sì che il modello «ponga domande all’utente», emettendo un eventoask_user_question e mettendo la conversazione in stato awaiting_user_input:
id e risposte in tool_results:
tool_use_id deve corrispondere esattamente al tool_id dell’evento sospeso; altrimenti si riceve errore 400. Se tool_results è presente, question / message / references vengono ignorati.
Se l’utente vuole saltare la domanda, basta inviare una nuova question o message; la piattaforma segnerà la chiamata strumento sospesa come «saltata dall’utente».
Gestione conversazioni (CRUD)
v2 offre gestione leggera delle conversazioni tramite il campoaction sullo stesso endpoint, senza API aggiuntive.
action: retrieve — Recupera una conversazione
messages, model, title, tools_used, ecc.).
action: retrieve_batch — Elenca riepiloghi conversazioni
{ items: [...], total }. Il riepilogo non include messages, adatto per liste laterali; per vedere i messaggi completi di una conversazione si usa action: retrieve.
Filtri opzionali: user_id, application_id, model_group, model.
action: update — Modifica titolo o riscrivi cronologia
messages, ma il server applica una validazione rigorosa dello schema (deve essere in forma ToolUseContent compressa); in caso contrario ritorna 400. Generalmente consigliato solo per modificare il title.
action: delete — Elimina una conversazione
{ id, success: true }. L’eliminazione è irreversibile, confermare prima di chiamare.
Migrazione fluida da v1
Se usi già/aichat/conversations, la migrazione a v2 richiede quasi nessuna modifica:
- Cambia l’URL da
https://api.xhuoapi.ai/v1/aichat/conversationsahttps://api.xhuoapi.ai/v1/aichat2/conversations. - Se usavi nomi modelli v1 (es.
gpt-3.5,gpt-4-browsing), consigliamo di aggiornare a modelli contemporanei v2 (es.gpt-5.4,claude-opus-4-7,gemini-3.1-pro). - I campi dello streaming NDJSON sono retrocompatibili: ogni evento
text_deltainclude ancoradelta_answereid, quindi client che parsanodelta_answerper riga non devono cambiare.
message, SSE, chiamate strumenti, CRUD con action) secondo i tuoi tempi.
Gestione errori
Le risposte di errore hanno formato uniforme:400 bad_request: campi obbligatori mancanti,tool_use_idnon corrispondente, schemamessagesnon valido, ecc.401 invalid_token: headerauthorizationerrato.404 not_found:idconversazione non trovato inaction: retrieve / update / delete.429 too_many_requests: limite di velocità superato.500 chat_error: errore upstream LLM ocompletion_tokens=0(non conteggiato, senza addebito).
{"type":"error","message":"..."}, seguito dalla chiusura del flusso.

