https://courierflow.ru/api/v1Аутентификация
Все запросы к API требуют заголовок Authorization с вашим API-ключом. Ключ генерируется в Настройках → API-ключи.
Authorization: Bearer cf_live_XXXXXXXXXXXXXXXX...curl -H "Authorization: Bearer cf_live_UIBujy5g..." \
-H "Content-Type: application/json" \
https://courierflow.ru/api/v1/deliveriesPermissions (разрешения)
Каждый ключ может иметь ограниченный набор разрешений:
deliveries:readЧтение доставокdeliveries:writeСоздание и обновление доставокcouriers:readЧтение курьеровcouriers:writeСоздание и обновление курьеровcouriers:locationОтправка геопозиции курьераwebhooks:readЧтение webhook endpointswebhooks:writeУправление webhook endpointsanalytics:readЧтение аналитикиorganization:readДанные организацииПустой массив permissions = доступ ко всему (legacy-ключи).
Rate Limiting
Защита от перегрузок на двух уровнях:
Sliding window. Настраивается при создании ключа (0–1000).
Глобальный лимит для защиты от DDoS. Не настраивается.
Заголовки ответа
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 42
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
{
"error": "rate_limit_exceeded",
"message": "Превышен лимит запросов: 60/мин. Повторите через 42с.",
"limit": 60,
"retryAfter": 42
}Формат ошибок
Все ошибки возвращают JSON с полями error и message:
{
"error": "unauthorized",
"message": "Неверный или неактивный API-ключ."
}401unauthorizedОтсутствует или неверный API-ключ403forbiddenНедостаточно прав (permissions)404not_foundРесурс не найден422validation_error / status_change_errorОшибка валидации / невозможный переход статуса429rate_limit_exceededПревышен лимит запросов500create_error / fetch_errorВнутренняя ошибка сервера/api/v1/deliveriesПолучить список доставок организации с пагинацией и фильтрацией.
Query-параметры
pagelimitstatuscreated, assigned, en_route, delivered, failed, canceledcurl -H "Authorization: Bearer cf_live_..." \
"https://courierflow.ru/api/v1/deliveries?page=1&limit=10&status=en_route"{
"data": [
{
"id": "abc123",
"organizationId": "org-xxx",
"status": "en_route",
"deliveryAddress": "ул. Ленина, 42",
"deliveryContact": "Иван Петров",
"deliveryPhone": "+79001234567",
"courierId": "courier-1",
"trackingToken": "TRK_abc123",
"scheduledDate": "2026-02-10T00:00:00Z",
"createdAt": "2026-02-08T10:30:00Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 147,
"totalPages": 15
}
}Permission: deliveries:read
/api/v1/deliveriesСоздать новую доставку. Автоматически генерируется трекинг-токен.
Body (JSON)
deliveryAddress*deliveryContactdeliveryPhonepickupAddressdescriptionweightscheduledDatetagscurl -X POST -H "Authorization: Bearer cf_live_..." \
-H "Content-Type: application/json" \
-d '{
"deliveryAddress": "ул. Ленина, 42, кв. 7",
"deliveryContact": "Иван Петров",
"deliveryPhone": "+79001234567",
"weight": 2.5,
"scheduledDate": "2026-02-10",
"tags": ["fragile"]
}' \
https://courierflow.ru/api/v1/deliveries{
"delivery": {
"id": "new-id-123",
"status": "created",
"trackingToken": "TRK_xxxx",
...
}
}Permission: deliveries:write
/api/v1/deliveries/:idПолучить доставку по ID с историей статусов.
curl -H "Authorization: Bearer cf_live_..." \
https://courierflow.ru/api/v1/deliveries/abc123{
"delivery": {
"id": "abc123",
"status": "en_route",
"deliveryAddress": "ул. Ленина, 42",
"statusHistory": [
{ "fromStatus": "assigned", "toStatus": "en_route", "createdAt": "..." },
{ "fromStatus": "created", "toStatus": "assigned", "createdAt": "..." }
],
...
}
}Permission: deliveries:read
/api/v1/deliveries/:idОбновить поля доставки или сменить статус.
Обновление полей
curl -X PATCH -H "Authorization: Bearer cf_live_..." \
-H "Content-Type: application/json" \
-d '{"deliveryAddress": "Новый адрес, 10"}' \
https://courierflow.ru/api/v1/deliveries/abc123Смена статуса
Передайте поле status в body. Сервер проверит допустимость перехода.
curl -X POST -H "Authorization: Bearer cf_live_..." \
-H "Content-Type: application/json" \
-d '{
"status": "delivered",
"note": "Оставлено у двери",
"lat": 55.7558,
"lng": 37.6173
}' \
https://courierflow.ru/api/v1/deliveries/abc123Permission: deliveries:write
/api/v1/couriersПолучить список курьеров организации.
curl -H "Authorization: Bearer cf_live_..." \
https://courierflow.ru/api/v1/couriers{
"data": [
{
"id": "c-1",
"name": "Алексей Иванов",
"phone": "+79001234567",
"status": "available",
"vehicleType": "car",
"vehicleBrand": "Kia Rio",
"vehiclePlate": "А123БВ77",
"lastLat": 55.7558,
"lastLng": 37.6173
}
],
"total": 12
}Permission: couriers:read
/api/v1/couriersДобавить нового курьера.
name*phoneemailvehicleTypefoot, bike, motorcycle, car, truckvehicleBrandvehiclePlatecurl -X POST -H "Authorization: Bearer cf_live_..." \
-H "Content-Type: application/json" \
-d '{"name": "Алексей Иванов", "phone": "+79001234567", "vehicleType": "car"}' \
https://courierflow.ru/api/v1/couriersPermission: couriers:write
/api/v1/couriers/:idПолучить курьера по ID с историей последних смен.
curl -H "Authorization: Bearer cf_live_..." \
https://courierflow.ru/api/v1/couriers/c-1Permission: couriers:read
/api/v1/couriers/:idОбновить данные курьера или отправить геопозицию.
Обновление геопозиции
Передайте lat и lng для обновления позиции курьера на карте.
curl -X POST -H "Authorization: Bearer cf_live_..." \
-H "Content-Type: application/json" \
-d '{"lat": 55.7558, "lng": 37.6173}' \
https://courierflow.ru/api/v1/couriers/c-1Обновление профиля
curl -X PATCH -H "Authorization: Bearer cf_live_..." \
-H "Content-Type: application/json" \
-d '{"vehicleBrand": "Toyota Camry", "vehiclePlate": "В456ГД77"}' \
https://courierflow.ru/api/v1/couriers/c-1Permission: couriers:write или couriers:location (для геопозиции)
Webhook-и
Webhook-и настраиваются через панель управления: Webhooks. Каждый запрос подписан HMAC-SHA256.
Формат payload
POST https://your-server.com/webhook
Content-Type: application/json
X-Webhook-Signature: a1b2c3d4e5...
X-Webhook-Event: delivery.completed
{
"event": "delivery.completed",
"payload": {
"deliveryId": "abc123",
"status": "delivered",
"courierId": "c-1",
"completedAt": "2026-02-08T14:30:00Z"
},
"timestamp": "2026-02-08T14:30:01Z",
"signature": "a1b2c3d4e5..."
}Доступные события
delivery.createdДоставка созданаdelivery.assignedКурьер назначенdelivery.en_routeКурьер выехалdelivery.completedДоставка завершенаdelivery.failedОшибка доставкиdelivery.*Все события доставокcourier.locationОбновление позиции курьераПроверка подписи
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(JSON.stringify(payload))
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature), Buffer.from(expected)
);
}Retry-политика
- 3 попытки с задержкой: 1с → 5с → 15с
- Таймаут ответа: 10 секунд
- Успех: HTTP 2xx
- Логи всех попыток видны в панели Webhooks
Готовы к интеграции?
Создайте API-ключ и начните интегрировать CourierFlow прямо сейчас