Xtool AI API (2.0.0)
REST API нейросетей для работы с различными моделями искусственного интеллекта (OpenAI, Anthropic, Google и др.).
- Отправка запросов к текстовым и графическим моделям ИИ
- Управление сессиями диалогов с сохранением контекста
- Получение истории сообщений
- Гибкая настройка параметров генерации (temperature, max_tokens)
- Прозрачный расчет стоимости запросов
Все запросы (кроме /auth/login/) требуют JWT токен в заголовке Authorization: Bearer {token}.
Авторизация в API
Авторизация в API (генерация JWT) по логину и паролю
Request Body schema: application/jsonrequired
| login required | string Логин пользователя для авторизации в системе. Используется вместе с паролем для получения JWT токена. |
| password required | string Пароль пользователя. Передается в открытом виде через HTTPS. После успешной проверки возвращается JWT токен для дальнейшей аутентификации. |
Responses
Request samples
- Payload
- PHP
- Python
{- "login": "user@example.com",
- "password": "SecurePassword123"
}Response samples
- 200
{- "status": "ok",
- "data": {
- "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9",
- "expired_at": 1735689600
}
}Идентификатор сессии (комнаты) чата
Запрос к апи на получение пользователем идентификатора сессии (комнаты) чата и его регистрации в системе
Authorizations:
Request Body schema: application/jsonrequired
| room_id | string or null = 32 characters Идентификатор сессии (комнаты) чата в формате UUID. Если не указан или null, система сгенерирует новый room_id и вернет его в ответе. Если указан существующий room_id, запрос будет привязан к этой сессии, что позволит использовать историю сообщений через параметр chat_depth в /ai/send/. Рекомендуется сохранять полученный room_id на клиенте для продолжения диалога. |
Responses
Request samples
- Payload
- PHP
- Python
{- "room_id": "123e4567-e89b-12d3-a456-42661417"
}Response samples
- 200
{- "status": "ok",
- "data": {
- "room_id": "123e4567-e89b-12d3-a456-42661417"
}
}Request samples
- PHP
- Python
$url = 'https://api.xtool.ru/ai/settings/'; $token = 'your_jwt_token_here'; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode([]), CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Authorization: Bearer ' . $token ] ]); $response = curl_exec($ch); $result = json_decode($response, true); curl_close($ch); if ($result['status'] === 'ok') { foreach ($result['data']['ai'] as $model) { echo $model['description'] . "\n"; } }
Response samples
- 200
{- "status": "ok",
- "data": {
- "ai": [
- {
- "id": 1,
- "code": "openai",
- "model": "gpt-3.5-turbo",
- "description": "ChatGPT 3.5 Turbo",
- "description_full": "Устаревшая модель GPT для более дешевых задач...",
- "model_alias": null,
- "type": "TEXT",
- "max_input_tokens": 16385,
- "max_output_tokens": 4096,
- "min_temperature": 0,
- "max_temperature": 2,
- "is_chat_mode_allowed": 1,
- "cost_input_tokens_rub": 0.3744,
- "cost_output_tokens_rub": 0.4992,
- "cost_input_fix_rub": 1,
- "cost_output_fix_rub": 2
}
]
}
}Получение истории сообщений
История
Authorizations:
Request Body schema: application/jsonrequired
| room_id required | string or null = 32 characters Идентификатор сессии (комнаты) чата в формате UUID, для которой требуется получить историю сообщений. Используется room_id, полученный через /ai/room/ или сохраненный после предыдущих запросов. История включает все сообщения (запросы и ответы), отправленные в рамках указанной сессии. |
Responses
Request samples
- Payload
- PHP
- Python
{- "room_id": "123e4567-e89b-12d3-a456-42661417"
}Response samples
- 200
{- "status": "ok",
- "data": {
- "room_id": "123e4567-e89b-12d3-a456-42661417",
- "data": [
- {
- "message_id": "1757170259",
- "message_id_reply": "resp_68bc4a53d03c819dbe8653390af150690d5569edb7b496f0",
- "system_prompt": "Ты - опытный учитель и наставник. Ответь на вопрос.",
- "request": "Кто ты, в двух словах?",
- "response": "Наставник, помощник.",
- "ai": {
- "id": 1,
- "code": "openai",
- "model": "gpt-3.5-turbo",
- "description": "ChatGPT 3.5 Turbo",
- "description_full": "Устаревшая модель GPT для более дешевых задач...",
- "model_alias": null,
- "type": "TEXT",
- "max_input_tokens": 16385,
- "max_output_tokens": 4096,
- "min_temperature": 0,
- "max_temperature": 2,
- "is_chat_mode_allowed": 1,
- "cost_input_tokens_rub": 0.3744,
- "cost_output_tokens_rub": 0.4992,
- "cost_input_fix_rub": 1,
- "cost_output_fix_rub": 2
}, - "response_at": "1757170260",
- "created_at": "1757170259",
- "usage_prompt_tokens": "35",
- "usage_completion_tokens": "8",
- "usage_total_tokens": "43"
}
]
}
}Отправка запроса нейросети
Отправка запроса
Authorizations:
Request Body schema: application/jsonrequired
| room_id required | string = 32 characters Идентификатор сессии (комнаты) чата. UUID, который получается через /ai/room/ и используется для группировки сообщений одного диалога. В рамках одной сессии сохраняется история сообщений, доступная при использовании параметра chat_depth. |
| ai required | integer ID модели ИИ из списка доступных моделей. Получить список можно через эндпоинт /ai/settings/. Каждая модель имеет свои характеристики (тип, стоимость, лимиты токенов). |
| system_prompt | string Систем промпт - инструкция для нейросети (system prompt). Устанавливает роль, контекст и правила поведения модели перед обработкой пользовательского сообщения. Влияет на стиль, тон и формат ответов. |
| message required | string Основной текст запроса пользователя. Для TEXT моделей — вопрос или задача, для IMAGE моделей — описание изображения. |
| chat_depth | integer >= 0 Default: 0 Количество предыдущих сообщений из истории, используемых как контекст. 0 — без контекста (независимые запросы), большие значения — учет истории диалога. |
| max_output_tokens required | integer Максимальное количество токенов в ответе модели. Ограничивает длину генерируемого текста или сложность изображения. Если не указан, используется значение max_output_tokens выбранной модели из /ai/settings/. Не должен превышать максимальное значение модели. Влияет на стоимость запроса. |
| temperature | number Степень случайности генерации текста. Диапазон допустимых значений у каждой нейросети свой, но чаще всего, от 0 до 2, где 0 — максимально детерминированные ответы, 2 — максимально случайные. При значениях близких к 0 модель выбирает наиболее вероятные токены, при высоких значениях — более разнообразные варианты. |
| seed | number or null Seed для генерации изображений. Используется для получения воспроизводимых результатов при генерации изображений. Одинаковые значения seed с одинаковыми параметрами запроса дадут идентичные или очень похожие изображения. Если не указан, используется случайное значение. |
Responses
Request samples
- Payload
- PHP
- Python
{- "room_id": "123e4567-e89b-12d3-a456-42661417",
- "ai": 5,
- "system_prompt": "Ты опытный учитель и наставник. Объясняй сложные темы простым языком.",
- "message": "Почему небо голубое? Объясни простыми словами.",
- "chat_depth": 3,
- "max_output_tokens": 2000,
- "temperature": 0.5,
- "seed": 12
}Response samples
- 200
{- "status": "ok",
- "data": {
- "room_id": "123e4567-e89b-12d3-a456-42661417",
- "id": 1757170259,
- "request": "Почему небо голубое? Объясни простыми словами",
- "response": "Небо голубое из-за рассеяния солнечного света в атмосфере. Голубой свет рассеивается сильнее других цветов, поэтому мы видим небо голубым.",
- "cost_request": 0.041933,
- "cost_response": 0.025459,
- "ai": {
- "id": 1,
- "code": "openai",
- "model": "gpt-3.5-turbo",
- "description": "ChatGPT 3.5 Turbo",
- "description_full": "Устаревшая модель GPT для более дешевых задач...",
- "model_alias": null,
- "type": "TEXT",
- "max_input_tokens": 16385,
- "max_output_tokens": 4096,
- "min_temperature": 0,
- "max_temperature": 2,
- "is_chat_mode_allowed": 1,
- "cost_input_tokens_rub": 0.3744,
- "cost_output_tokens_rub": 0.4992,
- "cost_input_fix_rub": 1,
- "cost_output_fix_rub": 2
}
}
}