{"name":"Достависта Business API","vendor":"Достависта","industry":"logistics","summary":"API срочной курьерской доставки Достависта для бизнеса: расчёт стоимости, создание, изменение и отмена заказов, список заказов, данные и местоположение курьера, черновики доставок и построение маршрутов, детализация стоимости. Об изменениях в заказах и доставках сервис сообщает callback-уведомлениями. Интеграцию сначала отлаживают на тестовом стенде, затем открывают доступ к рабочему через api@dostavista.ru.","docsUrl":"https://apitest.dostavista.ru/business-api/doc","coverage":{"included":[],"excluded":[]},"scenarios":[{"id":"rasschitat-stoimost-srochnoy-dostavki","title":"Рассчитать стоимость срочной доставки","summary":"Показать покупателю цену курьерской доставки Достависты по городу.","steps":["Возьми токен в личном кабинете и передавай его в заголовке X-DV-Auth-Token. Отлаживай интеграцию на тестовом стенде https://robotapitest.dostavista.ru/api/business/1.5, доступ к рабочему открывают через api@dostavista.ru.","Посчитай: POST /calculate-order с теми же полями, что и для создания заказа: matter, points (адрес забора и адрес доставки), total_weight_kg, vehicle_type_id. Обязательных полей нет — но чем больше данных, тем точнее цена; без параметров вернётся минимальная стоимость.","Успешный ответ — is_successful: true. При ошибке — HTTP 400 и список errors; при invalid_parameters подробности в parameter_errors той же структуры, что и запрос."],"code":"curl -X POST https://robot.dostavista.ru/api/business/1.5/calculate-order \\\n  -H 'X-DV-Auth-Token: <токен>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n        \"matter\": \"Документы\",\n        \"total_weight_kg\": 1,\n        \"points\": [\n          {\"address\": \"Москва, ул. Покровка, 11\"},\n          {\"address\": \"Москва, ул. Солянка, 4\"}\n        ]\n      }'","language":"bash","methods":["POST /calculate-order"]},{"id":"sozdat-zakaz-na-kurerskuyu-dostavku","title":"Создать заказ на курьерскую доставку","summary":"Вызвать курьера: забрать заказ со склада и доставить покупателю, с оплатой при получении или без.","steps":["Создай заказ: POST /create-order с matter (что везём) и points — первая точка адрес забора, следующие — адреса доставки. Для каждой точки нужны address и contact_person.phone.","В точке доставки укажи client_order_id (номер заказа в магазине), желаемое время прибытия required_start_datetime и required_finish_datetime, а если курьер берёт деньги — taking_amount. Даты — в ISO 8601 с часовым поясом.","Тип транспорта задаёт vehicle_type_id (по умолчанию 6 — пеший курьер). Чтобы покупатель получил SMS со временем и телефоном курьера, включи is_contact_person_notification_enabled.","В ответе — order с order_id и status. Сохрани order_id: по нему отслеживают и отменяют заказ.","Ошибка order_is_duplicate значит, что такой заказ недавно уже создан, insufficient_balance — что не хватает денег на балансе."],"code":"curl -X POST https://robot.dostavista.ru/api/business/1.5/create-order \\\n  -H 'X-DV-Auth-Token: <токен>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n        \"matter\": \"Цветы\",\n        \"total_weight_kg\": 2,\n        \"is_contact_person_notification_enabled\": true,\n        \"points\": [\n          {\"address\": \"Москва, ул. Покровка, 11\", \"contact_person\": {\"phone\": \"79030000001\", \"name\": \"Склад\"}},\n          {\n            \"address\": \"Москва, ул. Солянка, 4\",\n            \"contact_person\": {\"phone\": \"79030000002\", \"name\": \"Анна\"},\n            \"client_order_id\": \"1042\",\n            \"required_start_datetime\": \"2026-10-25T14:00:00+03:00\",\n            \"required_finish_datetime\": \"2026-10-25T16:00:00+03:00\",\n            \"taking_amount\": 0\n          }\n        ]\n      }'","language":"bash","methods":["POST /create-order"]},{"id":"sledit-za-zakazom-i-kurerom","title":"Следить за заказом и курьером","summary":"Обновлять статус заказа у себя и показывать покупателю, где курьер.","steps":["Укажи в личном кабинете адрес для callback-уведомлений. Достависта пришлёт POST с JSON при создании и изменении заказа (order_created, order_changed), а также о доставках и местоположении курьера.","Проверяй подпись каждого уведомления: заголовок X-DV-Signature — HMAC-SHA256 от тела запроса с ключом Callback Secret Key из кабинета.","Для сверки запрашивай список: GET /orders с order_id или фильтром по status и датам (до 50 заказов за запрос, даты в строке запроса url-кодируй: + → %2B).","Данные и местоположение назначенного курьера — GET /courier с order_id.","Лимит — 100 запросов в минуту и не больше 5 000 в сутки, поэтому опирайся на уведомления, а не на частый опрос."],"code":"import hashlib, hmac\n\ndef is_valid(body: bytes, signature: str, callback_secret: str) -> bool:\n    expected = hmac.new(callback_secret.encode(), body, hashlib.sha256).hexdigest()\n    return hmac.compare_digest(expected, signature)\n\n# В обработчике: if not is_valid(request.body, request.headers[\"X-DV-Signature\"], SECRET): вернуть 403","language":"python","methods":["GET /orders","GET /courier"]},{"id":"otmenit-ili-izmenit-zakaz","title":"Отменить или изменить заказ","summary":"Покупатель передумал или поменял адрес — поправить или отменить заказ, пока курьер не выехал.","steps":["Изменить параметры созданного заказа можно методом POST /edit-order. Если менять уже нельзя, придёт ошибка order_cannot_be_edited.","Отменить заказ: POST /cancel-order с order_id. Отмена возможна в статусах new, available, active и delayed.","Если курьер уже посетил хотя бы одну точку, отменить нельзя — придёт order_cannot_be_canceled; в этом случае свяжись с поддержкой.","Проверь итог: GET /orders с order_id — статус должен смениться на отменённый."],"code":"curl -X POST https://robot.dostavista.ru/api/business/1.5/cancel-order \\\n  -H 'X-DV-Auth-Token: <токен>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"order_id\": 123456}'","language":"bash","methods":["POST /edit-order","POST /cancel-order","GET /orders"]}],"baseUrls":[{"label":"Боевой","url":"https://robot.dostavista.ru/api/business/1.5"},{"label":"Тестовый","url":"https://robotapitest.dostavista.ru/api/business/1.5"}],"auth":{"type":"api_key","description":"Секретный токен из личного кабинета передаётся в заголовке `X-DV-Auth-Token` в каждом запросе. Используются только методы GET (параметры в строке запроса) и POST (JSON в UTF-8), только по HTTPS.\n\nОтвет:","example":"curl --include --header 'X-DV-Auth-Token: SECRET_AUTH_TOKEN' 'https://robotapitest.dostavista.ru/api/business/1.5'"},"methods":[{"id":"POST /calculate-order","title":"Расчёт стоимости доставки","httpMethod":"POST","path":"/calculate-order","description":"Точная стоимость перед созданием заказа; чем больше параметров, тем точнее. Без параметров возвращает минимальную стоимость. Принимает те же параметры, что `create-order`, но без обязательных.","params":[],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /create-order","title":"Создание заказа","httpMethod":"POST","path":"/create-order","description":"В ответе — объект `order`: `order_id`, `order_name`, `status`, `status_description`, `points` и др.","params":[{"name":"type","in":"body","type":"string","required":false,"description":"Тип заказа, по умолчанию standard; также same_day"},{"name":"matter","in":"body","type":"string","required":true,"description":"Что везём (категория товара), до 5000 символов"},{"name":"vehicle_type_id","in":"body","type":"integer","required":false,"description":"Тип транспорта; по умолчанию 6 (пеший курьер); для same_day не передаётся"},{"name":"total_weight_kg","in":"body","type":"integer","required":false,"description":"Общий вес, кг; для same_day обязателен и больше 0"},{"name":"insurance_amount","in":"body","type":"money","required":false,"description":"Сумма страховки"},{"name":"is_client_notification_enabled","in":"body","type":"boolean","required":false,"description":"Уведомлять клиента о статусе"},{"name":"is_contact_person_notification_enabled","in":"body","type":"boolean","required":false,"description":"SMS получателям с интервалом и телефоном курьера"},{"name":"is_route_optimizer_enabled","in":"body","type":"boolean","required":false,"description":"Оптимизировать порядок адресов"},{"name":"loaders_count","in":"body","type":"integer","required":false,"description":"Число грузчиков, до 11"},{"name":"payment_method","in":"body","type":"string","required":false,"description":"Способ оплаты"},{"name":"bank_card_id","in":"body","type":"integer","required":false,"description":"Привязанная карта (для bank_card)"},{"name":"promo_code","in":"body","type":"string","required":false,"description":"Промокод"},{"name":"is_return_required","in":"body","type":"boolean","required":false,"description":"Заказ с возвратом"},{"name":"points","in":"body","type":"list","required":true,"description":"Адреса (точки) заказа"},{"name":"points[].address","in":"body","type":"string","required":true,"description":"Полный адрес: город, улица, дом; до 350 символов"},{"name":"points[].contact_person.phone","in":"body","type":"string","required":true,"description":"Телефон контактного лица"},{"name":"points[].contact_person.name","in":"body","type":"string","required":false,"description":"Имя контактного лица"},{"name":"points[].client_order_id","in":"body","type":"string","required":false,"description":"Номер заказа в магазине, до 32 символов"},{"name":"points[].latitude","in":"body","type":"coordinate","required":false,"description":"Широта"},{"name":"points[].longitude","in":"body","type":"coordinate","required":false,"description":"Долгота"},{"name":"points[].required_start_datetime","in":"body","type":"datetime","required":false,"description":"Ожидаемое прибытие курьера, от"},{"name":"points[].required_finish_datetime","in":"body","type":"datetime","required":false,"description":"Ожидаемое прибытие курьера, до"},{"name":"points[].taking_amount","in":"body","type":"money","required":false,"description":"Сумма к получению от клиента на точке"},{"name":"points[].buyout_amount","in":"body","type":"money","required":false,"description":"Сумма выкупа на точке"},{"name":"points[].note","in":"body","type":"string","required":false,"description":"Информация для курьера"},{"name":"points[].apartment_number","in":"body","type":"string","required":false,"description":"Квартира/офис"},{"name":"points[].packages","in":"body","type":"list","required":false,"description":"Товары на точке: ware_code, description, items_count, item_payment_amount"}],"requestExample":"curl --include --header 'X-DV-Auth-Token: SECRET_AUTH_TOKEN' --data '{\"matter\":\"Документы\",\"points\":[{\"address\":\"Москва, ул. Покровка, 11\",\"contact_person\":{\"phone\":\"79030000001\"}},{\"address\":\"Москва, ул. Солянка, 4\",\"contact_person\":{\"phone\":\"79030000001\"}}]}' 'https://robotapitest.dostavista.ru/api/business/1.5/create-order'","responseExample":"","docsUrl":""},{"id":"POST /edit-order","title":"Редактирование заказа","httpMethod":"POST","path":"/edit-order","description":"Изменение параметров созданного заказа.","params":[],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /cancel-order","title":"Отмена заказа","httpMethod":"POST","path":"/cancel-order","description":"Отменить можно в статусах `new`, `available`, `active` или `delayed`; если курьер посетил хотя бы одну точку — нельзя.","params":[{"name":"order_id","in":"body","type":"integer","required":true,"description":"Полный номер заказа"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /orders","title":"Список заказов","httpMethod":"GET","path":"/orders","description":"","params":[{"name":"order_id","in":"query","type":"integer","required":false,"description":"Номер заказа или список номеров"},{"name":"status","in":"query","type":"string","required":false,"description":"Статус заказов"},{"name":"created_datetime_from","in":"query","type":"datetime","required":false,"description":"Создан от (в GET — url-кодировать)"},{"name":"created_datetime_to","in":"query","type":"datetime","required":false,"description":"Создан до"},{"name":"offset","in":"query","type":"integer","required":false,"description":"Смещение"},{"name":"count","in":"query","type":"integer","required":false,"description":"Число заказов, максимум 50"},{"name":"next_page_id","in":"query","type":"integer","required":false,"description":"ID заказа, с которого начинать страницу"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /courier","title":"Курьер заказа","httpMethod":"GET","path":"/courier","description":"Данные и местоположение курьера.","params":[],"requestExample":"","responseExample":"","docsUrl":""}],"codeExamples":[],"errors":[{"code":"invalid_parameters","description":"Ошибки в параметрах, подробности в parameter_errors"},{"code":"invalid_schema","description":"Неизвестные ключи в параметрах"},{"code":"required_auth_token","description":"Не передан заголовок X-DV-Auth-Token"},{"code":"invalid_auth_token","description":"Некорректный токен"},{"code":"requests_limit_exceeded","description":"Превышен лимит запросов"},{"code":"invalid_api_version","description":"Неизвестная версия API"},{"code":"required_api_upgrade","description":"Устаревшая версия API"},{"code":"invalid_post_json","description":"Тело POST не в формате JSON"},{"code":"invalid_api_method","description":"Несуществующий метод"},{"code":"order_cannot_be_edited","description":"Заказ нельзя изменить"},{"code":"order_cannot_be_canceled","description":"Заказ нельзя отменить"},{"code":"insufficient_balance","description":"Недостаточно средств на балансе"},{"code":"order_is_duplicate","description":"Заказ — копия недавнего"},{"code":"route_not_found","description":"Маршрут не найден"},{"code":"unapproved_contract","description":"Договор ещё не одобрен"},{"code":"service_unavailable","description":"Сервис временно недоступен"},{"code":"unexpected_error","description":"Неизвестная ошибка"}],"limits":"- 100 запросов в минуту, но не больше 5 000 запросов в сутки.\n- `GET /orders` — до 50 заказов за запрос.\n- В заказе до 11 грузчиков.","gotchas":["Успешный ответ — 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 из кабинета.","Новые поля и методы добавляются без смены версии; версия меняется только при несовместимых изменениях."],"slug":"dostavista","version":2,"updatedAt":"2026-10-24T17:05:33.040Z","sources":[{"title":"Достависта Business API 1.5","url":"https://apitest.dostavista.ru/business-api/doc","kind":"research","addedAt":"2026-10-12T19:28:43.752Z"},{"title":"Интеграция по API","url":"https://dostavista.ru/integrations","kind":"research","addedAt":"2026-10-12T19:28:43.752Z"},{"title":"Вставленный текст","url":"","kind":"import","addedAt":"2026-10-12T19:28:43.752Z"},{"title":"scenarios-dostavista.md","url":"","kind":"import","addedAt":"2026-10-24T17:05:24.532Z"}],"logoUrl":null}