External API
External API — это публичный интерфейс платформы для интеграций. Через него внешние сервисы (учётные системы, маркетплейсы, BI-инструменты, CRM, кастомные скрипты) могут читать и менять данные компании.
API работает в контексте одной компании, всегда. Токен принадлежит компании, и любые запросы возвращают/изменяют только её данные.
Базовый URL и версионирование
https://easymb.ru/api/external/v1Версия зашита в путь. Несовместимые изменения попадут в v2; в v1 мы делаем только аддитивные правки (новые поля, новые endpoint'ы).
Аутентификация
Используется Bearer-токен. Создаётся в админке: «Администрирование → Разработчикам → API-токены → Создать».
GET /api/external/v1/catalog/products HTTP/1.1
Authorization: Bearer emb_live_a8f3b2c4d5e6f7…Токен показывается один раз в момент создания. Сохраните его в секретном хранилище — повторно увидеть значение нельзя; если потеряли — отзовите старый и создайте новый.
Scopes
Каждый токен ограничен набором scope-строк. Формат: <module>:<action>, action ∈ {read, write}. Пример: catalog:read, orders:write.
| Scope | Назначение |
|---|---|
catalog:read | Чтение товаров, услуг и категорий |
catalog:write | Создание/изменение каталога |
clients:read | Чтение клиентов |
clients:write | Создание/изменение клиентов |
orders:read | Чтение заказов |
orders:write | Создание/изменение заказов |
sales:read | Чтение продаж и смен |
sales:write | Возвраты, операции со сменами |
warehouse:read | Чтение складов, остатков, приёмок |
warehouse:write | Складские движения, приёмки |
calendar:read | Чтение событий календаря |
calendar:write | Создание событий календаря |
audit:read | Чтение журнала действий |
users:read | Чтение пользователей компании |
*:read | Wildcard на чтение по всем ресурсам |
*:write | Wildcard на запись (включает чтение) |
<module>:write всегда подразумевает <module>:read. Wildcard *:write подразумевает *:read.
Бизнес-модули и активность
Endpoint работает только если соответствующий модуль активен у компании или является системным. Системные модули (core, catalog, calendar) доступны всегда. Остальные (cashier, warehouse, orders, clients) — только если включены в админке.
Если интегратор пытается обратиться к ресурсу выключенного модуля, ответ — 403 Forbidden с понятным сообщением.
Ресурсы и пагинация
Все списочные endpoint'ы поддерживают единый формат query-параметров:
| Параметр | Значение |
|---|---|
page | Номер страницы (с 1) |
pageSize | Размер страницы (по умолч. 20) |
sort | Поле сортировки |
order | asc / desc |
search | Полнотекстовый поиск |
Ответ:
{
"items": [...],
"total": 1234,
"page": 1,
"pageSize": 20
}Примеры
Получить список товаров
curl -H "Authorization: Bearer $MBS_TOKEN" \
"https://easymb.ru/api/external/v1/catalog/products?page=1&pageSize=50"Создать клиента
curl -X POST \
-H "Authorization: Bearer $MBS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"kind":"individual","displayName":"Иван Петров","phone":"+79991234567"}' \
https://easymb.ru/api/external/v1/clientsИзменить статус заказа
curl -X POST \
-H "Authorization: Bearer $MBS_TOKEN" \
https://easymb.ru/api/external/v1/orders/123e4567-e89b-12d3-a456-426614174000/status/completedОшибки
API возвращает JSON в формате { "statusCode": <code>, "message": <string|string[]>, "error": <string> }. Распространённые коды:
| Код | Значение |
|---|---|
| 400 | Невалидный body или query (см. message) |
| 401 | Невалидный или истекший токен |
| 403 | Недостаточно scope-ов или модуль не активен у компании |
| 404 | Ресурс не найден или принадлежит другой компании |
| 409 | Конфликт уникальности (например, SKU уже занят) |
| 422 | Бизнес-ограничение |
| 429 | Сработал rate-limit |
Аудит-лог
Все write-операции через external API попадают в журнал действий с actorId = ID сервис-аккаунта интеграции. В админке вы можете отфильтровать журнал по actorId, чтобы увидеть, что делал конкретный токен.
См. также: Webhooks.