Документация › Для разработчиков › Формат данных
Формат данных и интеграция фронта
[для разработчиков]Единые правила API, как выглядят успех и ошибка, пагинация, realtime, авторизация. Если строишь интеграцию или свой фронтенд, начни отсюда.
⏱ 8 мин · 👤 для разработчика · 🟢 live
За 30 секунд:
- Успех:
{ "data": … }. Ошибка:{ "error": "текст", "code": "КОД" }.- Пагинация:
?page=&limit=(по умолчанию 100, максимум 200).- Realtime: через Supabase-каналы (INSERT/UPDATE/DELETE по таблице с фильтром проекта).
- Авторизация: сессия-cookie (браузер) или API-ключ
Bearer dos_sk_live_…(API).
Конверт ответа
Все ответы API это в едином формате.
Успех:
{ "data": { ... } }HTTP 200 (или другой 2xx).
Ошибка:
{ "error": "Человеко-читаемое сообщение", "code": "ERROR_CODE" }Коды ошибок и статусы
| HTTP | code | Когда |
|---|---|---|
| 400 | INVALID_INPUT / INVALID_UUID | неверные/неполные данные |
| 401 | UNAUTHORIZED | нет/невалидны учётные данные или подпись |
| 403 | FORBIDDEN | авторизован, но нет прав (роль) |
| 404 | NOT_FOUND | объект не существует или не виден |
| 429 | RATE_LIMITED | превышен лимит (смотри заголовок Retry-After) |
| 500 | SYSTEM_ERROR | внутренняя ошибка |
Сообщения безопасны: внутренние детали (трейсы, токены) в ответ не попадают, полный текст уходит только в серверные логи.
Пагинация
Параметры запроса: ?page= и ?limit=.
- по умолчанию
limit = 100, максимум 200; pageначинается с 1 (ограничен сверху, чтобы не уехать в гигантский offset);- в ответ обычно приходит блок
pagination: { page, limit, total, has_more }.
Realtime
UI обновляется без перезагрузки через Supabase Realtime: подписка на изменения таблицы (postgres_changes) с фильтром по проекту (project_id=eq.<id>), события INSERT / UPDATE / DELETE.
Что важно интегратору:
- подписка возвращает статус (подключено / ошибка / закрыто) и умеет переподключаться после обрыва сети;
- на
DELETEприходит только первичный ключ (если не включён полный снимок строки); - глобальный индикатор «нет связи» загорается, только когда отвалились все каналы.
💡 На клиенте это обёрнуто в хукиuse-realtime-*(по одному на сущность), после любой мутации список обновляется сам. Подробнее про продукт-поведение: Диалоги.
Авторизация
| Способ | Для чего |
|---|---|
| Сессия-cookie | браузерный кабинет (httpOnly-cookie Supabase) |
API-ключ Authorization: Bearer dos_sk_live_… | внешние интеграции, серверный код, см. Публичный API |
Оба проходят одни и те же проверки доступа (роли/проекты): отдельной «облегчённой» авторизации нет. Ключ только для чтения на мутирующем методе → отказ.
Простыми словами
Это шпаргалка для тех, кто пишет код поверх платформы. Договорённости простые и одинаковые везде, если всё хорошо в ответе лежит data с данными; если плохо, error с понятным текстом и коротким code, по которому удобно ветвить логику. Списки отдаются порциями (постранично, до 200 за раз). Живые обновления (новое сообщение, новый лид) прилетают сами через подписку, не надо опрашивать сервер по таймеру.
Заходить можно двумя дверями: обычной сессией из браузера или API-ключом для своего кода, и за обеими дверями работают одни и те же правила доступа, так что ключ не даёт ничего сверх твоих прав. Если строишь свой интерфейс или интеграцию, этих правил достаточно, чтобы начать.
Дальше: → Бот не отвечает
Связано: Публичный API · Кастомные вебхуки
Не получилось? → напиши в саппорт