# Достависта Business API: Следить за заказом и курьером

Сценарий из mcp-everything. Актуально на 2026-10-24.

Обновлять статус заказа у себя и показывать покупателю, где курьер.

1. Укажи в личном кабинете адрес для callback-уведомлений. Достависта пришлёт POST с JSON при создании и изменении заказа (order_created, order_changed), а также о доставках и местоположении курьера.
2. Проверяй подпись каждого уведомления: заголовок X-DV-Signature — HMAC-SHA256 от тела запроса с ключом Callback Secret Key из кабинета.
3. Для сверки запрашивай список: GET /orders с order_id или фильтром по status и датам (до 50 заказов за запрос, даты в строке запроса url-кодируй: + → %2B).
4. Данные и местоположение назначенного курьера — GET /courier с order_id.
5. Лимит — 100 запросов в минуту и не больше 5 000 в сутки, поэтому опирайся на уведомления, а не на частый опрос.

```python
import hashlib, hmac

def is_valid(body: bytes, signature: str, callback_secret: str) -> bool:
    expected = hmac.new(callback_secret.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

# В обработчике: if not is_valid(request.body, request.headers["X-DV-Signature"], SECRET): вернуть 403
```

## Базовые URL

- Боевой: `https://robot.dostavista.ru/api/business/1.5`
- Тестовый: `https://robotapitest.dostavista.ru/api/business/1.5`

## Авторизация

Тип: API-ключ

Секретный токен из личного кабинета передаётся в заголовке `X-DV-Auth-Token` в каждом запросе. Используются только методы GET (параметры в строке запроса) и POST (JSON в UTF-8), только по HTTPS.

Ответ:

```
curl --include --header 'X-DV-Auth-Token: SECRET_AUTH_TOKEN' 'https://robotapitest.dostavista.ru/api/business/1.5'
```

## Методы сценария

### GET /orders — Список заказов

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `order_id` | query | integer | нет | Номер заказа или список номеров |
| `status` | query | string | нет | Статус заказов |
| `created_datetime_from` | query | datetime | нет | Создан от (в GET — url-кодировать) |
| `created_datetime_to` | query | datetime | нет | Создан до |
| `offset` | query | integer | нет | Смещение |
| `count` | query | integer | нет | Число заказов, максимум 50 |
| `next_page_id` | query | integer | нет | ID заказа, с которого начинать страницу |

### GET /courier — Курьер заказа

Данные и местоположение курьера.

## Нюансы

- Успешный ответ — HTTP 200 и `is_successful: true`; ошибка — HTTP 400, `is_successful: false`, список `errors` и при `invalid_parameters` — объект `parameter_errors` той же структуры, что запрос.
- Неизвестные ключи в запросе дают предупреждение `invalid_schema` в `schema_warnings`; неизвестные поля в ответах нужно игнорировать.
- Даты — ISO 8601 (`YYYY-MM-DDThh:mm:ss±hh:mm` или с `Z`); в GET-запросах дату нужно url-кодировать (`+` → `%2B`).
- Callback-уведомления о заказах (`order_created`, `order_changed`), доставках и местоположении курьера приходят POST с JSON на URL из личного кабинета. Подпись — заголовок `X-DV-Signature`: HMAC-SHA256 от тела с ключом Callback Secret Key из кабинета.
- Новые поля и методы добавляются без смены версии; версия меняется только при несовместимых изменениях.

## Другие сценарии

- [Рассчитать стоимость срочной доставки](https://mcp-everything.ru/integrations/dostavista/scenarios/rasschitat-stoimost-srochnoy-dostavki.md)
- [Создать заказ на курьерскую доставку](https://mcp-everything.ru/integrations/dostavista/scenarios/sozdat-zakaz-na-kurerskuyu-dostavku.md)
- [Отменить или изменить заказ](https://mcp-everything.ru/integrations/dostavista/scenarios/otmenit-ili-izmenit-zakaz.md)

---

Если этого недостаточно — официальная документация: https://apitest.dostavista.ru/business-api/doc
Вся интеграция одним документом: https://mcp-everything.ru/integrations/dostavista.md
