Документация → Обзор API
API LazyCRM
Сайт, приложение или подрядчик ресторана получает гостей, сегменты и запускает SMS-рассылки без входа в кабинет.
Первый раз? Начните с быстрого старта — от ключа до отправленной рассылки за 10 минут.
Что умеет API
API LazyCRM даёт сайту доставки, приложению или подрядчику ресторана доступ к данным этого ресторана: найти гостя по телефону, выгрузить базу гостей с суммой заказов, посмотреть сегменты и запустить SMS-рассылку по сегменту без входа в кабинет. Один ключ — один ресторан.
| Метод | Путь | Право | Что делает |
|---|---|---|---|
| GET | /v1/guests | guests:read | Выгрузка базы гостей постранично. Платная опция |
| GET | /v1/guests/lookup | guests:read | Гость по телефону |
| GET | /v1/guests/{id} | guests:read | Один гость |
| GET | /v1/segments | guests:read | Сегменты с числом гостей |
| GET | /v1/segments/{id} | guests:read | Один сегмент |
| POST | /v1/campaigns | campaigns:write | Черновик SMS-рассылки по сегменту |
| GET | /v1/campaigns/{id} | campaigns:read | Статус, доставка, стоимость |
| POST | /v1/campaigns/{id}/send | campaigns:write | Отправить сейчас или по расписанию |
| POST | /v1/campaigns/{id}/cancel | campaigns:write | Снять с расписания |
| GET | /v1/events | campaigns:read | Журнал событий |
Машиночитаемая схема OpenAPI: https://app.lazycrm.ru/v1/openapi.json.
Ключ и права
Ключ выпускает сам ресторан: кабинет → Интеграции → API → «Выпустить ключ». Полный ключ показывается один раз — сохраните его сразу; в LazyCRM хранится только его отпечаток. Ненужный ключ отзывается там же.
| Доступ | Права | Что можно |
|---|---|---|
| Только чтение | guests:read, campaigns:read | Гости, сегменты, статусы рассылок, события |
| Полный доступ | guests:read, campaigns:read, campaigns:write | Всё выше плюс создание и отправка рассылок |
Ключ передаётся в заголовке каждого запроса. Ресторан определяется только ключом: параметров вроде tenant_id нет.
curl https://app.lazycrm.ru/v1/segments \
-H "Authorization: Bearer lcrm_live_…"Тестовый ключ
Ключ lcrm_test_… работает на демо-ресторане: гости демонстрационные, отправка симулируется — статусы, счётчики и события идут как у настоящей рассылки, SMS никому не уходят, деньги не списываются. Попросите тестовый ключ у менеджера LazyCRM.
Формат данных
- Id — непрозрачная строка с префиксом типа:
gst_гость,seg_сегмент,cmp_рассылка,evt_событие. - Деньги — строка с двумя знаками и валюта:
{"amount": "1500.00", "currency": "RUB"}. - Момент — RFC 3339 в UTC:
2026-10-14T09:30:00Z. Дата заказа —YYYY-MM-DDв поясе ресторана. - Неизвестное значение —
null. Поляstatus,kind,failure_reasonи типы событий расширяемые: код клиента обязан спокойно принимать новые значения.
Списки и курсор
Каждый список отдаёт data, has_more и next_cursor. Следующая страница — тот же запрос с cursor=<next_cursor>; limit от 1 до 100, по умолчанию 50. Курсор непрозрачный и привязан к фильтрам запроса.
{"data": [ … ], "has_more": true, "next_cursor": "c_eyJ2Ijpb…"}Повтор запроса
POST принимает заголовок Idempotency-Key (например, UUID), а у отправки рассылки он обязателен. Повтор с тем же ключом в течение 24 часов вернёт тот же ответ и ничего не выполнит второй раз — после обрыва сети запрос можно смело повторить. Тот же ключ с другим запросом даст 422 idempotency_key_reused.
Лимиты
- 600 запросов в минуту на ключ; сверх —
429 rate_limitedи заголовокRetry-After. - 20 отправок рассылок в сутки на ресторан (по его времени); 21-я —
429 send_limit_reached. - Частотный лимит ресторана действует и для API: гость получает не больше одной SMS за окно, сколько бы рассылок ни создал интегратор. Отписавшиеся и гости без телефона исключаются автоматически.
Ошибки
Любая ошибка — HTTP-статус 4xx/5xx и тело application/problem+json с машинным code и request_id. Ветвитесь по code, а detail показывайте человеку. Полный список — коды ошибок. При обращении в поддержку приложите request_id или заголовок Request-Id ответа.
HTTP/1.1 404 Not Found
Content-Type: application/problem+json
Request-Id: req_3f9a1c0b2e7d4a51
{
"type": "https://lazycrm.ru/docs/api/errors#not_found",
"code": "not_found",
"title": "Объект не найден",
"status": 404,
"detail": "Гостя с таким телефоном нет в базе ресторана.",
"request_id": "req_3f9a1c0b2e7d4a51"
}
