Эндпоинты
POST /v1/messages
Основной эндпойнт. Отправляешь список сообщений, получаешь ответ модели. Поддерживает системные подсказки, многоповоротные диалоги, изображения, инструменты, размышление и стриминг.
Базовый вызов
Три обязательных поля: model, max_tokens и messages. Поле system опционально, но его рекомендуется задавать, чтобы управлять тоном и ограничениями.
curl https://caicaini.com/v1/messages \
-H "Authorization: Bearer cai_api_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "caicaini/sonnet",
"max_tokens": 1024,
"system": "You are a senior backend engineer. Be terse.",
"messages": [
{"role": "user", "content": "Why prefer queues over cron for retries?"}
]
}'Поля запроса
| Поле | Тип | Описание |
|---|---|---|
| modelобязательно | string | Один из пяти виртуальных id. См. Модели. |
| max_tokensобязательно | integer | Жёсткий потолок на количество токенов, которые модель может сгенерировать. Списываем за фактически использованные, но никогда больше этого потолка. |
| messagesобязательно | array | История диалога. Сообщения user и assistant чередуются, заканчиваются сообщением user. |
| system | string | Системная подсказка. Появляется один раз в начале контекста. Управляет тоном, форматом вывода и ограничениями. |
| temperature | number 0–1 | По умолчанию 1. Меньшие значения делают модель более детерминированной. |
| top_p | number 0–1 | Nucleus sampling. Лучше задавать либо temperature, либо top_p, но не оба сразу. |
| stop_sequences | string[] | До четырёх строк. Модель прекращает генерацию, как только сгенерирует любую из них. |
| stream | boolean | Когда true, ответ приходит как SSE-стрим. См. Стриминг. |
| tools | Tool[] | Описания функций, которые модель может вызывать. См. Инструменты. |
| tool_choice | object | Принудить конкретный инструмент или { type: "any" }, чтобы заставить вызвать любой инструмент. |
| thinking | object | Включает расширенное размышление на caicaini/opus. См. Размышление. |
| metadata | object | Опционально { user_id?: string }. Помогает в расследованиях злоупотреблений и в отчётности по пользователям. |
Массив messages
У каждого сообщения есть role ("user" или "assistant") и content. content может быть строкой или массивом типизированных контент-блоков. Используй массив, когда в одном повороте нужно смешать изображения, результаты инструментов или несколько текстовых сегментов.
curl https://caicaini.com/v1/messages \
-H "Authorization: Bearer cai_api_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "caicaini/auto",
"max_tokens": 512,
"messages": [
{"role": "user", "content": "Plan a 3-day Lisbon trip in October."},
{"role": "assistant", "content": "Sure. Day 1: Alfama walking tour..."},
{"role": "user", "content": "Skip the tram. I want food only."}
]
}'Ответ
{
"id": "msg_01H8fkx2N3p4q5r6s7t8u9v0wx",
"type": "message",
"role": "assistant",
"content": [
{ "type": "text", "text": "Cron pretends a job is fire-and-forget..." }
],
"model": "caicaini/sonnet",
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 38,
"output_tokens": 184,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"credits_consumed": 92
}
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
| id | string | Уникальный id этого сообщения. Сохраняй на случай тикетов поддержки. |
| type | "message" | Для /v1/messages всегда "message". |
| role | "assistant" | В ответе всегда "assistant". |
| content | ContentBlock[] | Массив типизированных блоков. Минимум один. Перебирай их — допущения «только текст» ломаются с инструментами и размышлением. |
| model | string | Виртуальный id, который ты запросил. Названия нижележащих провайдеров мы не раскрываем. |
| stop_reason | string | Одно из "end_turn", "max_tokens", "stop_sequence", "tool_use". |
| usage.input_tokens | integer | Входные токены (без учёта чтения из кеша). |
| usage.output_tokens | integer | Сгенерированные токены, включая токены блоков размышления. |
| usage.cache_creation_input_tokens | integer | Токены, записанные в кеш промпта в этом повороте. |
| usage.cache_read_input_tokens | integer | Токены, отданные из кеша промпта в этом повороте. |
| usage.credits_consumed | integer | Авторитетная сумма списанных за этот поворот кредитов. Расширение Caicaini. |
POST /v1/messages/count_tokens
Возвращает только число входных токенов для тела запроса, не запуская модель. Полезно для предварительной оценки бюджета и решений роутинга. Бесплатно, но лимиты те же, что у /v1/messages.
curl https://caicaini.com/v1/messages/count_tokens \
-H "Authorization: Bearer cai_api_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "caicaini/sonnet",
"messages": [
{"role": "user", "content": "How many tokens is this prompt?"}
]
}'Лимиты
- Тело запроса до 16 МБ. Большинство изображений умещается без проблем; очень тяжёлые vision-нагрузки лучше разбивать или предварительно суммаризировать на клиенте.
- Длина диалога ограничена только окном контекста модели. См.
context_windowв ответе Модели. max_tokensне может превышатьmax_output_tokensконкретной модели.