AI Chat v2 API (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) är nästa generations konversationsgränssnitt och en fullständig uppgradering av AI Chat API. Det bygger vidare på v1:s enkla och hanterade flerrundiga konversationer och utökar med:
- Multimodala användarinmatningar: Genom det strukturerade
message-fältet kan du direkt skicka text + bilder + filblock utan att behöva användareferencessom mellanhand. - Agentbaserad verktygsanrop: Inbyggt stöd för nätverkssökning, webbsökning, filinläsning med mera, samt möjlighet att koppla användarauktoriserade MCP-servrar (Google Drive, Notion, Slack, GitHub etc.). Modellen kan i en enda förfrågan självständigt anropa verktyg flera gånger för att slutföra komplexa uppgifter.
- Strukturerade strömmande händelser: Genom
accept: text/event-streamellerapplication/x-ndjsonkan du få token-för-token-händelser somtext_delta,tool_use,tool_result,thinking,citation,card,artifactmed flera, vilket underlättar rendering i frontend baserat på typ. - Avbrytbar / Återupptagbar: Modellen skickar
ask_user_question-händelser och pausar när den behöver kompletterande information från användaren. Vid nästa anrop kan du fylla i svar viatool_resultsför att fortsätta. - Nya CRUD-åtgärder: På samma endpoint kan du via
action-fältet utföraretrieve/retrieve_batch/update/deleteutan behov av separata sessionhanterings-API:er. - Löpande uppdaterad modelllista: Standardåtkomst till samtida modeller som GPT-5.4, Claude Opus 4.7, Claude Sonnet 4.6, Gemini 3.1 Pro, GLM 5.1, DeepSeek V4, Kimi K2.5 med flera.
model + question (+ valfritt stateful / id / references / preset) får du samma {answer, id} JSON-svar som i v1, så migrering från /aichat/conversations kräver ingen omskrivning av klienten, bara byte av endpoint till /aichat2/conversations.
Om du för närvarande använder /aichat/conversations kommer det gamla gränssnittet fortsatt att finnas kvar, så du kan migrera i din egen takt.
Ansökningsprocess
För att använda API:t behöver du först ansöka om tjänsten på motsvarande sida för AI Chat v2 API. När du kommer till sidan klickar du på knappen “Acquire” för att få de autentiseringsuppgifter som krävs för anrop. Om du inte är inloggad eller registrerad kommer du automatiskt att omdirigeras till inloggningssidan. Efter registrering och inloggning återvänder du automatiskt till aktuell sida. Vid första ansökan får du en gratis kvot som gör att du kan använda API:t kostnadsfritt.Grundläggande användning
Det enklaste sättet att använda API:t är helt likt v1: skickamodel + question och få tillbaka {answer, id}.
Exempel med cURL:
model-värden kan ses direkt i höger sidopanel under Try, vanliga kategorier inkluderar:
- 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-minimed flera - 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-20251001med flera - Google:
gemini-3.1-pro,gemini-3.1-pro-preview,gemini-3.1-flash-image-preview,gemini-3-pro-preview,gemini-2.5-flash-litemed flera - xAI:
grok-4,grok-4-1-fast,grok-4-1-fast-reasoning,grok-3-mini-fastmed flera - DeepSeek:
deepseek-v4-flash,deepseek-v3.2-exp,deepseek-r1-0528med flera - Moonshot:
kimi-k2.5,kimi-k2-thinking,kimi-k2-thinking-turbomed flera - Zhipu:
glm-5.1,glm-5,glm-5-turbo,glm-4.7,glm-4.5vmed flera
Flerrundiga konversationer
Precis som i v1, skickastateful: true för att aktivera konversationslagring. API:t returnerar en id; i efterföljande anrop skickar du tillbaka samma id för att fortsätta konversationen utan att själv behöva hantera meddelandehistorik.
Första anropet:
id:
statefulär som standardtrue, att utelämna det är samma som att skickatrue. Om du inte vill att servern ska spara konversationen kan du explicit sättastateful: false.
Strömmande svar
v2 stöder två typer av strömmande format, väljs viaaccept-header:
| Scenario | accept | Dataformat |
|---|---|---|
| Webbfrontend / EventSource | text/event-stream | data: {json}\n\n, sista raden data: [DONE]\n\n |
| Server / CLI / Node strömmande tolkning | application/x-ndjson | En JSON-objekt per rad |
| Ingen strömning | application/json (standard) | Returnerar {answer, id} i ett enda svar |
NDJSON-exempel
text_delta:
SSE-exempel
Webbläsare medEventSource stödjer inte anpassad request body, rekommenderas att använda fetch + manuell parsning på \n\n:
Strömmande händelsetyper
type | Betydelse |
|---|---|
text_delta | Inkrementell textdel från assistenten. content är den nya texten; för v1-kompatibilitet innehåller samma händelse även delta_answer (lika med content) och id. |
thinking | Modellens resonemangsprocess (visas endast om vald modell exponerar reasoning). |
tool_use | Modellen bestämmer sig för att anropa ett verktyg, händelsen innehåller tool_id, tool_name, input. |
tool_result | Resultatet från verktyget, kopplat till föregående tool_use via tool_id; is_error indikerar om det misslyckades. |
card | Strukturerade kort från verktyg (t.ex. bilder, länkförhandsvisningar) som är lämpliga för direkt rendering. |
citation | Källa (URL) som kompletterar ett textavsnitt. |
ask_user_question | Modellen behöver kompletterande information från användaren, dialogen går in i awaiting_user_input-läge, se avsnittet Återuppta pausad konversation. |
artifact | Självständigt genererat innehåll från modellen (t.ex. kodblock, dokument) som kan sparas eller laddas ner. |
system_message | Systemmeddelanden (inte användar- eller assistentinnehåll), endast för UI-presentation. |
compact | Intern kontextkomprimering, kräver ingen särskild hantering. |
error | Fel i denna runda, message beskriver felet. |
done | Strömmande svar är klart, innehåller usage (med prompt_tokens / completion_tokens / total_tokens) och terminal_reason. |
content från text_delta för att få samma resultat som i application/json-läge.
Multimodal inmatning
Om användarens inmatning innehåller bilder eller filer, skickamessage (en array) istället för question. Varje element i arrayen är ett innehållsblock:
text— vanlig text, kräver fältettext.image_url— bild, kräverimage_url.url.file_url— fil (PDF, CSV, TXT etc.), kräverfile_url.url.
Relation till v1:s references
För bakåtkompatibilitet känner v2 fortfarande igen fältet references: ["https://...", ...]:
- URL:er med suffix
jpg / jpeg / png / gif / bmp / webp / svg / heic / heifkonverteras automatiskt tillimage_url-block; - Andra filändelser konverteras till
file_url-block; - Om
questionockså skickas, placeras det som etttext-block i början.
/aichat2/conversations och fortsätt använda references som tidigare.
För finare kontroll (t.ex. flera bilder inbäddade i text eller viktig ordning) använd direkt message-arrayen.
Verktygsanrop och MCP
En av v2:s kärnförbättringar är att modellen kan självständigt anropa verktyg för att utföra flerstegsuppgifter, detta är aktiverat som standard och kräver ingen extra konfiguration från klienten. Vanliga scenarier:- Användaren frågar “Kan du söka efter nya utställningar i Shanghai?” → modellen anropar inbyggd webbsökning → sammanställer svar.
- Användaren frågar “Kan du läsa den här PDF:en och skriva en sammanfattning?” → modellen anropar file_read → skriver sammanfattning.
- Användaren har auktoriserat Google Drive / GitHub / Notion med Connections → modellen kan anropa motsvarande MCP-verktyg för att läsa och skriva data.
tool_use och tool_result-händelser, t.ex.:
tool_use / tool_result / card / citation-händelserna; modellens slutgiltiga svar kommer ändå via text_delta.
max_turns kan begränsa hur många gånger modellen får anropa verktyg i en förfrågan. Standardgränsen sätts av plattformen. Att sätta ett lågt värde (t.ex. max_turns: 1) tvingar modellen att svara direkt utan verktygsanrop.
Återuppta pausad konversation
Vissa verktyg kan få modellen att “fråga användaren” för kompletterande data. Då skickar modellen enask_user_question-händelse och dialogen fryser i awaiting_user_input-läge:
id där svaret fylls i via tool_results:
tool_use_id i förfrågan måste exakt matcha tool_id från paushändelsen, annars returneras 400. När tool_results skickas ignoreras question / message / references.
Om användaren vill hoppa över frågan kan du istället skicka en ny question eller message; plattformen markerar då det pausade verktygsanropet som “användaren hoppade över”.
Konversationshantering (CRUD)
v2 erbjuder lättviktig konversationshantering via samma endpoint medaction-fältet, utan behov av separata API:er.
action: retrieve — Hämta en konversation
messages-historik, model, title, tools_used med mera).
action: retrieve_batch — Lista konversationssammanfattningar
{ items: [...], total }. Sammanfattningarna innehåller inte messages, lämpligt för sidopanel-listor; när användaren öppnar en konversation hämtas fullständig historik med action: retrieve.
Valbara filter: user_id, application_id, model_group, model.
action: update — Ändra titel eller omskriv historik
messages kan också skickas, men servern gör strikt schema-validering (måste vara i hopvikt ToolUseContent-format), annars returneras 400. Vanligtvis rekommenderas endast titeländring.
action: delete — Ta bort en konversation
{ id, success: true }. Raderade konversationer kan inte återställas, var säker innan du anropar.
Smidig migrering från v1
Om du redan använder/aichat/conversations krävs nästan inga kodändringar för att migrera till v2:
- Byt URL från
https://api.xhuoapi.ai/v1/aichat/conversationstillhttps://api.xhuoapi.ai/v1/aichat2/conversations. - Om du tidigare använde v1-modellnamn (t.ex.
gpt-3.5,gpt-4-browsingetc.) rekommenderas att uppgradera till samtida modeller i v2 (t.ex.gpt-5.4,claude-opus-4-7,gemini-3.1-proetc.). - NDJSON-strömmen är bakåtkompatibel: varje
text_delta-händelse innehåller fortfarandedelta_answerochid, så klienter som parsardelta_answerradvis behöver inte ändras.
message, SSE, verktygsanrop, action CRUD) i din egen takt.
Felhantering
Fel svaras med:400 bad_request: saknade obligatoriska fält,tool_use_idmatchar inte, ogiltigtmessages-schema med mera.401 invalid_token: felaktigauthorization-header.404 not_found: vidaction: retrieve / update / deletefinns inte angivenid.429 too_many_requests: hastighetsbegränsning träffad.500 chat_error: upstream LLM-fel ellercompletion_tokens=0(räknas som ej förbrukat, debiteras ej).
{"type":"error","message":"..."}-händelse, följt av att strömmen avslutas.

