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) — це нове покоління інтерфейсу для діалогів, повна модернізація AI Chat API. Воно розширює можливості v1, який був простим і підтримував багатокрокові діалоги, за рахунок:
- Багатомодального введення користувача: через структуроване поле
messageможна безпосередньо передавати текст + зображення + файли, без необхідності додавати їх черезreferences. - Виклик інструментів у режимі агента: вбудований набір інструментів для пошуку в мережі, скрапінгу веб-сторінок, читання файлів тощо, а також можливість підключення MCP-серверів користувача (Google Drive, Notion, Slack, GitHub тощо). Модель може в одному запиті багаторазово викликати інструменти для виконання складних завдань.
- Структуровані потокові події: через
accept: text/event-streamабоapplication/x-ndjsonможна отримувати події по одному токену:text_delta,tool_use,tool_result,thinking,citation,card,artifactтощо, що полегшує відображення на фронтенді за типами. - Можливість переривання та відновлення: модель у разі потреби додаткової інформації від користувача надсилає подію
ask_user_questionі призупиняє роботу. Наступний виклик із заповненимиtool_resultsпродовжує діалог. - Нові CRUD-операції: на тому ж endpoint через поле
actionможна виконуватиretrieve/retrieve_batch/update/deleteбез додаткових API для управління сесіями. - Постійне оновлення списку моделей: за замовчуванням доступні GPT-5.4, Claude Opus 4.7, Claude Sonnet 4.6, Gemini 3.1 Pro, GLM 5.1, DeepSeek V4, Kimi K2.5 та інші сучасні моделі.
model + question (+ опційно stateful / id / references / preset), щоб отримати еквівалентну v1 відповідь у форматі {answer, id}. Тож міграція з /aichat/conversations на /aichat2/conversations не вимагає переписування клієнта — лише замінити шлях.
Якщо ви зараз використовуєте /aichat/conversations, старий інтерфейс залишиться в роботі, тож можна мігрувати у зручному темпі.
Процес отримання доступу
Щоб користуватися API, потрібно подати заявку на відповідний сервіс на сторінці AI Chat v2 API. Після переходу натисніть кнопку «Acquire», щоб отримати необхідні облікові дані для запитів. Якщо ви не увійшли або не зареєстровані, вас автоматично перенаправить на сторінку входу. Після реєстрації та входу ви повернетесь на цю сторінку. При першому запиті надається безкоштовний ліміт для використання API.Базове використання
Найпростіший спосіб — як і у v1: передатиmodel + question і отримати {answer, id}.
Приклад CURL:
model можна побачити у випадаючому списку панелі Try праворуч. Популярні категорії:
- 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тощо - 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тощо - 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тощо - xAI:
grok-4,grok-4-1-fast,grok-4-1-fast-reasoning,grok-3-mini-fastтощо - DeepSeek:
deepseek-v4-flash,deepseek-v3.2-exp,deepseek-r1-0528тощо - Moonshot:
kimi-k2.5,kimi-k2-thinking,kimi-k2-thinking-turboтощо - Zhipu:
glm-5.1,glm-5,glm-5-turbo,glm-4.7,glm-4.5vтощо
Багатокрокові діалоги
Як і у v1, передайтеstateful: true для збереження сесії. API поверне id; у наступних запитах передавайте цей id, щоб продовжити діалог без необхідності зберігати історію повідомлень.
Перший запит:
id:
За замовчуваннямstatefulдорівнюєtrue. Якщо не хочете, щоб сервер зберігав діалог, встановітьstateful: false.
Потокова відповідь
v2 підтримує два формати потокової передачі, які вибираються через заголовокaccept:
| Сценарій | accept | Формат даних |
|---|---|---|
| Веб-фронтенд / EventSource | text/event-stream | data: {json}\n\n, останній рядок data: [DONE]\n\n |
| Сервер / CLI / Node.js потоковий парсинг | application/x-ndjson | Кожен рядок — JSON-об’єкт |
| Без потокової передачі | application/json (за замовчуванням) | Відповідь цілком {answer, id} |
Приклад NDJSON
text_delta:
Приклад SSE
У браузеріEventSource не підтримує кастомний body запиту, тому рекомендується використовувати fetch з ручним парсингом по \n\n:
Типи потокових подій
type | Значення |
|---|---|
text_delta | Інкрементальний фрагмент відповіді асистента. content — новий текст; для сумісності з v1 також є delta_answer (рівне content) і id. |
thinking | Процес мислення моделі (з’являється лише у моделях з підтримкою reasoning). |
tool_use | Модель вирішила викликати інструмент, подія містить tool_id, tool_name, input. |
tool_result | Результат виконання інструменту, пов’язаний з попереднім tool_use через tool_id, is_error вказує на помилку. |
card | Структурована картка, створена інструментом (наприклад, зображення, прев’ю посилання), підходить для прямого рендерингу. |
citation | Джерело URL для відповідного текстового фрагмента. |
ask_user_question | Модель потребує додаткової інформації від користувача, діалог переходить у стан awaiting_user_input (див. розділ Відновлення призупиненого діалогу). |
artifact | Окремий артефакт, створений моделлю (наприклад, блок коду, документ), можна зберегти або завантажити. |
system_message | Системне повідомлення (не від користувача чи асистента), використовується для UI. |
compact | Подія стиснення внутрішнього контексту, не потребує обробки. |
error | Помилка у поточному циклі, message описує проблему. |
done | Кінець потокової відповіді, містить usage (токени запиту, відповіді, всього) та terminal_reason. |
content з text_delta — це еквівалентно полю answer у режимі application/json.
Багатомодальне введення
Якщо користувач надсилає зображення або файли, замістьquestion передавайте масив message. Кожен елемент — це блок контенту:
text— звичайний текст, обов’язкове полеtext.image_url— зображення, обов’язкове полеimage_url.url.file_url— файл (PDF, CSV, TXT тощо), обов’язкове полеfile_url.url.
Відношення до references у v1
Для сумісності з клієнтами v1, v2 також розпізнає поле references: ["https://...", ...]:
- URL з розширеннями
jpg / jpeg / png / gif / bmp / webp / svg / heic / heifавтоматично конвертуються у блокиimage_url; - інші розширення — у блоки
file_url; - якщо одночасно передано
question, воно додається як блокtextна початок.
/aichat2/conversations, а references працюватимуть як раніше.
Для більш тонкого контролю (наприклад, вставити кілька зображень між текстом або зберегти порядок) використовуйте масив message.
Виклик інструментів і MCP
Головне покращення v2 — модель може самостійно викликати інструменти для багатокрокових завдань, за замовчуванням увімкнено, без додаткових налаштувань у запиті. Типові сценарії:- Користувач питає: «Пошукай, які нові виставки в Шанхаї» → модель викликає вбудований web search → формує відповідь.
- Користувач: «Прочитай цей PDF і напиши резюме» → модель викликає file_read → створює резюме.
- Користувач уже авторизував Google Drive / GitHub / Notion у Connections → модель може читати/писати через відповідні MCP-інструменти.
tool_use і tool_result, наприклад:
tool_use / tool_result / card / citation. Остаточна відповідь моделі все одно надходить через text_delta.
Параметр max_turns обмежує максимальну кількість кроків виклику інструментів у запиті. За замовчуванням ліміт встановлює платформа. Зменшення (наприклад, max_turns: 1) примусить модель відповідати одразу без виклику інструментів.
Відновлення призупиненого діалогу
Деякі інструменти можуть змусити модель «запитати користувача». У цьому випадку модель надсилає подіюask_user_question, а діалог переходить у стан awaiting_user_input:
id передайте відповідь у tool_results:
tool_use_id у тілі запиту повинен точно співпадати з tool_id події призупинення; інакше повернеться помилка 400. Якщо у запиті є tool_results, поля question / message / references ігноруються.
Якщо користувач хоче пропустити це питання, можна просто надіслати нове question або message, і платформа автоматично позначить призупинений виклик інструменту як «пропущений користувачем».
Управління сесіями (CRUD)
v2 на тому ж endpoint через полеaction надає легкий інтерфейс управління сесіями без додаткових API.
action: retrieve — отримати сесію
messages, model, title, tools_used тощо).
action: retrieve_batch — список сесій (резюме)
{ items: [...], total }. Резюме не містить messages, підходить для бокової панелі. При відкритті сесії можна окремо викликати action: retrieve.
Доступні параметри фільтрації: user_id, application_id, model_group, model.
action: update — змінити заголовок або історію
messages, але сервер виконає сувору перевірку схеми (повинна бути у вигляді складеного ToolUseContent), інакше поверне 400. Зазвичай рекомендується лише змінювати title.
action: delete — видалити сесію
{ id, success: true }. Видалення незворотне, будьте уважні.
Плавна міграція з v1
Якщо ви вже використовуєте/aichat/conversations, перехід на v2 майже не вимагає змін у коді:
- Змініть URL з
https://api.xhuoapi.ai/v1/aichat/conversationsнаhttps://api.xhuoapi.ai/v1/aichat2/conversations. - Якщо раніше використовували моделі v1 (наприклад,
gpt-3.5,gpt-4-browsing), рекомендується оновити до сучасних моделей v2 (gpt-5.4,claude-opus-4-7,gemini-3.1-proтощо). - Потокові поля NDJSON залишаються сумісними: кожна подія
text_deltaмаєdelta_answerіid, тому клієнти, які парсилиdelta_answerпо рядках, працюватимуть без змін.
message, SSE, виклики інструментів, CRUD через action) у зручному темпі.
Обробка помилок
Помилки повертаються у форматі:400 bad_request: відсутні обов’язкові поля, невідповідністьtool_use_id, некоректна схемаmessagesтощо.401 invalid_token: неправильний заголовокauthorization.404 not_found: сесія зidне знайдена приretrieve/update/delete.429 too_many_requests: перевищено ліміт запитів.500 chat_error: помилка upstream LLM абоcompletion_tokens=0(вважається, що токени не використані, оплата не стягується).
{"type":"error","message":"..."}, після чого потік завершується.

