Skip to main content
AI Chat v2 API (/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 та інші сучасні моделі.
Водночас запити повністю сумісні з v1: достатньо передати 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:
Приклад відповіді:
Приклад на Python:
Доступні значення 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 тощо
Правила тарифікації дивіться у картці Pricing на сторінці сервісу.

Багатокрокові діалоги

Як і у v1, передайте stateful: true для збереження сесії. API поверне id; у наступних запитах передавайте цей id, щоб продовжити діалог без необхідності зберігати історію повідомлень. Перший запит:
Відповідь:
Другий запит із тим самим id:
Відповідь:
За замовчуванням stateful дорівнює true. Якщо не хочете, щоб сервер зберігав діалог, встановіть stateful: false.

Потокова відповідь

v2 підтримує два формати потокової передачі, які вибираються через заголовок accept:

Приклад NDJSON

Кожен рядок NDJSON — це структурована подія, найпоширеніша — text_delta:

Приклад SSE

У браузері EventSource не підтримує кастомний body запиту, тому рекомендується використовувати fetch з ручним парсингом по \n\n:

Типи потокових подій

Клієнти, які цікавляться лише кінцевою відповіддю, можуть просто об’єднати всі 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 на початок.
Отже, якщо хочете просто перейти з v1 без зміни тіла запиту, замініть шлях на /aichat2/conversations, а references працюватимуть як раніше. Для більш тонкого контролю (наприклад, вставити кілька зображень між текстом або зберегти порядок) використовуйте масив message.

Виклик інструментів і MCP

Головне покращення v2 — модель може самостійно викликати інструменти для багатокрокових завдань, за замовчуванням увімкнено, без додаткових налаштувань у запиті. Типові сценарії:
  • Користувач питає: «Пошукай, які нові виставки в Шанхаї» → модель викликає вбудований web search → формує відповідь.
  • Користувач: «Прочитай цей PDF і напиши резюме» → модель викликає file_read → створює резюме.
  • Користувач уже авторизував Google Drive / GitHub / Notion у Connections → модель може читати/писати через відповідні MCP-інструменти.
У потоках NDJSON / SSE виклики інструментів відображаються подіями 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 майже не вимагає змін у коді:
  1. Змініть URL з https://api.xhuoapi.ai/v1/aichat/conversations на https://api.xhuoapi.ai/v1/aichat2/conversations.
  2. Якщо раніше використовували моделі v1 (наприклад, gpt-3.5, gpt-4-browsing), рекомендується оновити до сучасних моделей v2 (gpt-5.4, claude-opus-4-7, gemini-3.1-pro тощо).
  3. Потокові поля NDJSON залишаються сумісними: кожна подія text_delta має delta_answer і id, тому клієнти, які парсили delta_answer по рядках, працюватимуть без змін.
Після міграції можна поступово використовувати нові можливості v2 (багатомодальні 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":"..."}, після чого потік завершується.

Висновок

AI Chat v2 API зберігає сумісність з v1, але трансформує діалог у «агентський спостережуваний діалог» з багатомодальним введенням, викликами інструментів, можливістю паузи та відновлення, потоковими структурованими подіями та вбудованим CRUD. Рекомендуємо новим користувачам одразу інтегрувати v2; існуючі інтеграції v1 можуть мігрувати поступово. Якщо виникнуть питання, звертайтеся до нашої технічної підтримки.