Войти в ЛК
Разделы документации

Документация → Обзор API

API LazyCRM

Сайт, приложение или подрядчик ресторана получает гостей, сегменты и запускает SMS-рассылки без входа в кабинет.

Первый раз? Начните с быстрого старта — от ключа до отправленной рассылки за 10 минут.

Что умеет API

API LazyCRM даёт сайту доставки, приложению или подрядчику ресторана доступ к данным этого ресторана: найти гостя по телефону, выгрузить базу гостей с суммой заказов, посмотреть сегменты и запустить SMS-рассылку по сегменту без входа в кабинет. Один ключ — один ресторан.

МетодПутьПравоЧто делает
GET/v1/guestsguests:readВыгрузка базы гостей постранично. Платная опция
GET/v1/guests/lookupguests:readГость по телефону
GET/v1/guests/{id}guests:readОдин гость
GET/v1/segmentsguests:readСегменты с числом гостей
GET/v1/segments/{id}guests:readОдин сегмент
POST/v1/campaignscampaigns:writeЧерновик SMS-рассылки по сегменту
GET/v1/campaigns/{id}campaigns:readСтатус, доставка, стоимость
POST/v1/campaigns/{id}/sendcampaigns:writeОтправить сейчас или по расписанию
POST/v1/campaigns/{id}/cancelcampaigns:writeСнять с расписания
GET/v1/eventscampaigns: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"
}