Skip to main content
AI Chat v2 API (/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ända references som 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-stream eller application/x-ndjson kan du få token-för-token-händelser som text_delta, tool_use, tool_result, thinking, citation, card, artifact med 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 via tool_results för att fortsätta.
  • Nya CRUD-åtgärder: På samma endpoint kan du via action-fältet utföra retrieve / retrieve_batch / update / delete utan 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.
Samtidigt är förfrågningsformatet fullt bakåtkompatibelt med v1: genom att endast skicka 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: skicka model + question och få tillbaka {answer, id}. Exempel med cURL:
Svar:
Exempel i Python:
Tillgängliga 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-mini med 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-20251001 med 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-lite med flera
  • xAI: grok-4, grok-4-1-fast, grok-4-1-fast-reasoning, grok-3-mini-fast med flera
  • DeepSeek: deepseek-v4-flash, deepseek-v3.2-exp, deepseek-r1-0528 med flera
  • Moonshot: kimi-k2.5, kimi-k2-thinking, kimi-k2-thinking-turbo med flera
  • Zhipu: glm-5.1, glm-5, glm-5-turbo, glm-4.7, glm-4.5v med flera
Detaljerad prissättning finns på tjänstesidan under Pricing-kortet.

Flerrundiga konversationer

Precis som i v1, skicka stateful: 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:
Svar:
Andra anropet med samma id:
Svar:
stateful är som standard true, att utelämna det är samma som att skicka true. Om du inte vill att servern ska spara konversationen kan du explicit sätta stateful: false.

Strömmande svar

v2 stöder två typer av strömmande format, väljs via accept-header:

NDJSON-exempel

Varje rad i NDJSON är en strukturerad händelse, vanligast är text_delta:

SSE-exempel

Webbläsare med EventSource stödjer inte anpassad request body, rekommenderas att använda fetch + manuell parsning på \n\n:

Strömmande händelsetyper

Klienter som bara bryr sig om slutgiltigt svar kan sammanfoga alla 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, skicka message (en array) istället för question. Varje element i arrayen är ett innehållsblock:
Stödda blocktyper:
  • text — vanlig text, kräver fältet text.
  • image_url — bild, kräver image_url.url.
  • file_url — fil (PDF, CSV, TXT etc.), kräver file_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 / heif konverteras automatiskt till image_url-block;
  • Andra filändelser konverteras till file_url-block;
  • Om question också skickas, placeras det som ett text-block i början.
Så om du bara vill migrera från v1 utan att ändra förfrågningsformat, byt bara endpoint till /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.
I NDJSON / SSE-strömmen visas verktygsanrop via tool_use och tool_result-händelser, t.ex.:
Om du inte vill visa verktygsanropsdetaljer i frontend kan du ignorera 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 en ask_user_question-händelse och dialogen fryser i awaiting_user_input-läge:
I frontend renderar du detta som ett kort där användaren kan välja svar, och skickar sedan en ny förfrågan med samma 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 med action-fältet, utan behov av separata API:er.

action: retrieve — Hämta en konversation

Returnerar komplett konversationsdokument (inklusive messages-historik, model, title, tools_used med mera).

action: retrieve_batch — Lista konversationssammanfattningar

Returnerar { 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

Returnerar { 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:
  1. Byt URL från https://api.xhuoapi.ai/v1/aichat/conversations till https://api.xhuoapi.ai/v1/aichat2/conversations.
  2. Om du tidigare använde v1-modellnamn (t.ex. gpt-3.5, gpt-4-browsing etc.) rekommenderas att uppgradera till samtida modeller i v2 (t.ex. gpt-5.4, claude-opus-4-7, gemini-3.1-pro etc.).
  3. NDJSON-strömmen är bakåtkompatibel: varje text_delta-händelse innehåller fortfarande delta_answer och id, så klienter som parsar delta_answer radvis behöver inte ändras.
Efter migrering kan du successivt aktivera v2:s nya funktioner (multimodalt message, SSE, verktygsanrop, action CRUD) i din egen takt.

Felhantering

Fel svaras med:
Vanliga fel:
  • 400 bad_request: saknade obligatoriska fält, tool_use_id matchar inte, ogiltigt messages-schema med mera.
  • 401 invalid_token: felaktig authorization-header.
  • 404 not_found: vid action: retrieve / update / delete finns inte angiven id.
  • 429 too_many_requests: hastighetsbegränsning träffad.
  • 500 chat_error: upstream LLM-fel eller completion_tokens=0 (räknas som ej förbrukat, debiteras ej).
I strömmande svar skickas fel som {"type":"error","message":"..."}-händelse, följt av att strömmen avslutas.

Slutsats

AI Chat v2 API är bakåtkompatibelt med v1 men uppgraderar konversationer från “enrundors / flerrundors frågesvar” till “agentbaserade observerbara dialoger”: multimodala inmatningar, verktygsanrop, pausbarhet / återupptagbarhet, strömmande strukturerade händelser och inbyggd CRUD. Vi rekommenderar nya integrationer att använda v2 direkt; befintliga v1-integrationer kan migrera stegvis. Vid frågor, kontakta gärna vårt tekniska supportteam.