Публичный API
Быстрый старт
Создайте API-клиента и передайте первый заказ.
Обновлено 20 августа 20261. Создайте API-клиента
Администратор ресторана открывает в CRM Настройки → Интеграции → API-клиенты, создаёт клиента и выбирает пресет: «Сайт», «Мобильное приложение» или «Агрегатор».
Новая рабочая интеграция получает профиль Standard: 120 запросов/минуту и 10 000/сутки. Профиль Sandbox используйте только для разработки; Business и High volume назначаются сетям и крупным интеграциям отдельно.
Сразу сохраните три значения:
- API key;
- API secret;
- webhook secret.
Секреты показываются при создании или регенерации. Не передавайте их в браузер, HTML, JavaScript публичного сайта или мобильное приложение.
Мобильное приложение вызывает ваш backend, а уже backend подписывает запрос к MenuLab API.
2. Настройте webhook
Укажите публичный HTTPS URL backend-обработчика, например:
https://integration.example.com/webhooks/menulab
Основные события заказа: order.created, order.updated, order.paid, order.completed, order.cancelled. Для всех возвратов также обрабатывайте payment.refund.requested, payment.refund.succeeded и payment.refund.failed; внешний эквайер вызывайте только при action_required: true.
3. Создайте заказ
curl -X POST "https://restaurant.example/api/v1/orders" \
-H "X-API-Key: $MENULAB_API_KEY" \
-H "X-API-Secret: $MENULAB_API_SECRET" \
-H "X-Idempotency-Key: site-order-100-create" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"external_id": "site-order-100",
"source": "website",
"type": "pickup",
"payment_method": "online",
"customer_phone": "+79991234567",
"items": [{"dish_id": 101, "quantity": 1}]
}'
Сохраните data.id из ответа рядом со своим external_id.
4. Получайте состояние
Основной канал — webhook. Для сверки или восстановления после сбоя используйте лёгкий запрос:
curl "https://restaurant.example/api/v1/orders/status?external_id=site-order-100&source=website" \
-H "X-API-Key: $MENULAB_API_KEY" \
-H "X-API-Secret: $MENULAB_API_SECRET" \
-H "Accept: application/json"
Пример ответа:
{
"success": true,
"data": {
"order_id": 3812,
"external_id": "site-order-100",
"status": "pending",
"payment_status": "pending",
"payment_method": "online"
}
}
5. Проверьте обязательные сценарии
Перед production проверьте создание, повтор запроса с тем же ключом идемпотентности, webhook, оплату, отмену из API, отмену из POS и полный онлайн-возврат.