Методы для работы с сессиями, сообщениями и изображениями.
Администратор создаёт приложение и выдаёт API-ключ. Ключ определяет модель, инструкции и квоты. Держите его на вашем backend, не в браузерном коде.
export BASE_URL="https://chat.coreless.site"
export API_KEY="cl_ваш_ключ"
# 1. Создайте сессию
curl "$BASE_URL/v1/sessions" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Первый диалог"}'
# 2. Используйте id из ответа
curl "$BASE_URL/v1/sessions/SESSION_ID/messages" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Привет!","stream":false}'Продолжайте отправлять сообщения в ту же сессию. История автоматически включается в контекст. В случае ошибки пара сообщений не сохраняется; можно повторить запрос. При повторе после потери сети сначала проверьте историю, чтобы избежать дублирования.
{
"id": "uuid сообщения",
"session_id": "uuid сессии",
"role": "assistant",
"text": "Здравствуйте! Чем могу помочь?",
"usage": { "inputTokens": 100, "outputTokens": 15 },
"request_id": "uuid запроса"
}| Метод | Endpoint | Назначение |
|---|---|---|
| GET | /v1/models | Модель приложения |
| POST | /v1/sessions | Создать сессию: {"title":"…"} |
| GET | /v1/sessions?limit=50 | Последние сессии приложения |
| GET | /v1/sessions/{id} | Информация о сессии |
| DELETE | /v1/sessions/{id} | Удалить сессию и историю |
| GET | /v1/sessions/{id}/messages?limit=50 | Последние сообщения, от старых к новым |
| POST | /v1/sessions/{id}/messages | Текст, изображения, stream |
| POST | /v1/images | Загрузить: {"data_url":"data:image/…"} |
| GET | /v1/images/{id} | Получить байты изображения |
| DELETE | /v1/images/{id} | Удалить загрузку |
Каждый метод требует Authorization: Bearer <API_KEY>. Сессии, сообщения и изображения других приложений возвращают 404. Списки поддерживают limit от 1 до 100, по умолчанию 50. Модель задаёт администратор. Изменение инструкций через API доступно ключам с режимом разработчика.
В images передавайте data URL с Base64 или ID, полученный через POST /v1/images. Поддерживаются PNG, JPEG, WebP и GIF. Внешние URL и пути к файлам не принимаются.
{
"text": "Опиши изображение",
"images": ["data:image/png;base64,iVBORw0KGgo..."],
"stream": false
}Количество и размер ограничиваются настройками приложения; максимум 10 изображений во всём контексте диалога. Загруженные изображения хранятся в изолированном пространстве приложения (до 256 МБ). После отправки в сообщении сохраняется собственная копия: удаление загрузки не удаляет вложение из истории. Чтобы удалить его полностью, удалите сессию.
Установите "stream": true. Ответ будет иметь тип text/event-stream. Используйте fetch с чтением потока на backend: стандартный EventSource не поддерживает POST и Bearer-заголовок.
event: start
data: {"request_id":"…","session_id":"…"}
event: delta
data: {"text":"Привет"}
event: done
data: {"id":"…","text":"Привет!","session_id":"…","role":"assistant","usage":{},"request_id":"…"}События delta содержат фрагменты, done — полный результат. При неудаче приходит event: error с полями code, message, request_id. Ответ HTTP 200 означает лишь открытие потока: успех подтверждает только done. Отключение клиента отменяет генерацию; неполный ответ не сохраняется.
При выпуске ключа администратор может включить режим разработчика. Такой ключ может читать и изменять системный промпт и правила поведения своего приложения. Обычные ключи получают 403 developer_mode_required.
GET /v1/application/instructions
Authorization: Bearer cl_…
PATCH /v1/application/instructions
Authorization: Bearer cl_…
Content-Type: application/json
{
"system_prompt": "Ты помощник по подбору фильмов.",
"behavior_rules": "Отвечай на русском языке."
}PATCH принимает одно или оба поля. Пропущенное поле сохраняет значение, пустая строка очищает его. Лимит: 30 000 символов для system_prompt и 10 000 для behavior_rules. В ответе возвращаются оба актуальных значения.
Изменения сохраняются для всего приложения и применяются к следующим генерациям, включая продолжение существующих чатов. Модель, квоты и разрешения ключа менять нельзя. При перевыпуске режим сохраняется; ранее созданные ключи остаются обычными.
{"error":{"code":"daily_limit","message":"Daily request limit reached (UTC)","request_id":"…"}}401 — отсутствующий или отозванный ключ. 403 — приложение отключено или у ключа нет режима разработчика. 404 — ресурс не существует или принадлежит другому приложению. 409 — сессия занята генерацией. 413 — слишком большой запрос или изображение. 422 — неверные поля либо превышение размера контекста. 429 — частотная, суточная или параллельная квота. 502 — генерация не завершилась. 503 — аккаунт Codex не подключён.
Для 429 ориентируйтесь на код ошибки и заголовок Retry-After. Суточная квота сбрасывается в 00:00 UTC. Каждый запущенный запрос, включая завершившийся ошибкой, учитывается в квотах. Одновременно в одной сессии допускается один запрос, на всём сервере — до восьми генераций. Повторяйте временные ошибки с увеличивающейся задержкой.
История входит в лимит входных символов. При превышении максимальной длины ответа генерация отменяется с кодом output_limit, частичный ответ не сохраняется. Тайм-аут генерации — 180 секунд. У приложений общий лимит подключённой подписки; серверные квоты не резервируют и не расширяют лимиты OpenAI.
Срок хранения — от 1 до 365 дней, задаётся администратором. Раз в час удаляются неактивные сессии, старые загрузки и журналы. Удаление сессии удаляет все её сообщения. Правила поведения передаются модели как инструкции и не гарантируют абсолютного соблюдения. Инструменты, команды, файловый доступ, веб-поиск и внешние коннекторы отключены.