Интеграция по API с Яндекс.Доставкой - Доставка в другой день
Продолжаем серию статей по интеграции с транспортными кампаниями. В прошлой статье мы говорили о ТК СДЭК
Сегодня поговорим о интеграции Яндекс.Доставки а именно доставка в другой день.
Такая интеграция может пригодиться например интернет-магазинам, маркет плейсам и т.д.
Как и в прошлой статье мы поговорим о базовых методах:
- получение списка ПВЗ
- расчет стоимости перевозки
- создание заказа на перевозку
- получение информации о заказе
- отмена заказа
Ссылка на API документацию Яндекс.Доставки тут
Подготовка
API интеграция с Яндекс.Доставкой в другой день работает в 2х режимах:
- Боевой - зарегистрируйтесь в личном кабинете и получите Bearer-токен. Используйте хост
https://b2b-authproxy.taxi.yandex.net
- Тестовый - для доступа используйте:
- хост -
https://b2b.taxi.tst.yandex.net
- Bearer-токен - y2_AgAAAAD04omrAAAPeAAAAAACRpC94Qk6Z5rUTgOcTgYFECJllXYKFx8
- platform_station_id - fbed3aa1-2cc6-4370-ab4d-59c5cc9bb924
Получение списка ПВЗ
Для получения списка всех ПВЗ Яндекс.Доставки необходимо отправить POST-запрос на адрес /api/b2b/platform/pickup-points/list
с необязательными JSON-параметрами. С помощью параметров можно отфильтровать ПВЗ по типу, городу и другим критериям.
В ответе вы получите массив объектов ПВЗ с указанием кода, города, страны, режима работы и других параметров (см документацию).
Например, получим все ПВЗ:
curl --location --request POST 'https://b2b.taxi.tst.yandex.net/api/b2b/platform/pickup-points/list' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer y2_AgAAAAD04omrAAAPeAAAAAACRpC94Qk6Z5rUTgOcTgYFECJllXYKFx8'
Расчет стоимости перевозки
Данный этап является важным в интеграции так как предоставляет расчет стоимости по доступным тарифам и срокам доставки.
Для того что бы рассчитать стоимость доставки необходимо отправить POST-запрос на адрес /api/b2b/platform/pricing-calculator
c JSON-параметрами.
Пройдемся по важным параметрам расчета стоимости подробнее:
- source - информация о точке отправления заказа. Обязательный параметр. Это объект в котором достаточно указать:
- platform_station_id - ID склада отправки, зарегистрированного в платформе.
- destination - населенный пункт куда будет отправление. Обязательный параметр. Это объект в котором достаточно указать:
- address - Адрес получения с указанием города, улицы и номера дома. Номер квартиры, подъезда и этаж указывать не нужно.
- platform_station_id - ID ПВЗ или постамата, зарегистрированного в платформе, в который нужна доставка
- tariff - тип доставки. Обязательный параметр. Одно из двух:
- time_interval - доставка до двери в интервал
- self_pickup - доставка до ПВЗ
- total_weight - суммарный вес посылки в граммах
Все параметры можно найти в документации.
Например отправим запрос на расчет стоимости доставки из ПВЗ до адреса:
curl --location 'https://b2b.taxi.tst.yandex.net/api/b2b/platform/pricing-calculator' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer y2_AgAAAAD04omrAAAPeAAAAAACRpC94Qk6Z5rUTgOcTgYFECJllXYKFx8' \
--data '{
"source": {
"platform_station_id" : "fbed3aa1-2cc6-4370-ab4d-59c5cc9bb924"
},
"destination": {
"address": "г. Москва, ул. Тверская, 10"
},
"tariff": "time_interval",
"total_weight": 500
}'
И получим ответ:
{
"pricing_total": "346.8 RUB"
}
Создание заказа на перевозку
После успешного расчета стоимости доставки можем переходить к созданию заказа на доставку.
Для создания заказа необходимо отправить POST-запрос на адрес /api/b2b/platform/request/create
c JSON-параметрами.
Пройдемся по важным параметрам создания заказа подробнее:
- billing_info - Данные для биллинга. Обязательное поле. Это объект, в котором достаточно указать:
- payment_method - Метод оплаты. Обязательное поле. Одно из already_paid, cash_on_receipt, card_on_receipt.
- source - Информация о точке отправления заказа. Обязательное поле. Это объект, в котором достаточно указать:
- platform_station - ПВЗ отправления. Обязательное поле. Это объект, в котором достаточно указать:
- platform_id - Идентификатор станции в Логистической платформе
- platform_station - ПВЗ отправления. Обязательное поле. Это объект, в котором достаточно указать:
- destination - Информация о точке получения заказа. Обязательное поле. Это объект, в котором достаточно указать:
- type - Тип пункта назначения. Обязательное поле, custom_location - доставка до двери, platform_station - доставка до ПВЗ.
- custom_location - Описание произвольного пункта назначения. Обязательное поле, если тип указан - custom_location. Это объект, в котором достаточно указать:
- latitude - Широта
- longitude - Долгота
- details - Дополнительная информация о пункте назначения. Это объект, в котором достаточно указать:
- full_address - Полный адрес с указанием города, улицы и номера дома.
- interval - Временной интервал. Это объект, в котором достаточно указать:
- from - UNIX timestamp для нижней границы интервала
- to - UNIX timetamp для верхней границы интервала
- platform_station - Описание пункта назначения, зарегистрирована в платформе. Обязательное поле, если тип указан - platform_station. Это объект, в котором достаточно указать:
- platform_id - Идентификатор станции в Логистической платформе
- recipient_info - Данные о получателе. Обязательное поле. Это объект, в котором достаточно указать:
- first_name - Имя
- phone - Номер телефона
- info - Базовый набор данных по запросу. Обязательное поле. Это объект, в котором достаточно указать:
- operator_request_id - Идентификатор заказа у отправителя. Здесь подразумевается ваш внутренний уникальный идентификатор заказа. Можно в формате uuid.
- last_mile_policy - Способ доставки. Обязательное поле. time_interval - доставка до двери в указанный интервал, self_pickup - доставка до ПВЗ
- places - Информация о местах в заказе. Обязательное поле. Это массив объектов, в которых достаточно указать:
- barcode - Штрихкод коробки. Можно любое уникальное значение. Подменяется на стороне Яндекс.Доставки.
- physical_dims - Параметры места. Это объект, в котором достаточно указать:
- dx - Длина, сантиметры
- dy - Высота, сантиметры
- dz - Ширина, сантиметры
- weight_gross - Вес брутто, граммы
- items - Информация о предметах в заказе. Обязательное поле. Это массив объектов, в которых достаточно указать:
- article - Артикул
- billing_details - Данные по биллингу для предмета. Это объект, в котором достаточно указать:
- assessed_unit_price - Оценочная цена за единицу товара, в копейках
- unit_price - Цена за единицу товара, в копейках
- name - Название
- count - Количество
- place_barcode - Штрихкод коробки, к которой относится товар
Все параметры для создания заказа можно найти в документации.
В ответе вы получите request_id, по которому можно получить информацию и удалить заказ.
Отправим запрос на создание заказа из ПВЗ до адреса:
curl --location 'https://b2b.taxi.tst.yandex.net/api/b2b/platform/request/create' \
--header 'Accept-Language: ru-RU' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer y2_AgAAAAD04omrAAAPeAAAAAACRpC94Qk6Z5rUTgOcTgYFECJllXYKFx8' \
--data '{
"info": {
"operator_request_id": "11122233344"
},
"billing_info": {
"payment_method": "already_paid"
},
"source" : {
"platform_station": {
"platform_id": "fbed3aa1-2cc6-4370-ab4d-59c5cc9bb924"
}
},
"destination": {
"type": "custom_location",
"custom_location": {
"details": {
"full_address": "г. Москва, ул. Тверская, 10"
},
"interval": {
"from" : 1743055200,
"to": 1743087600
}
}
},
"recipient_info" : {
"first_name" : "Иванов Иван Иванович",
"phone": "79232897920"
},
"last_mile_policy": "time_interval",
"places": [
{
"barcode": "0",
"physical_dims": {
"dx": 100,
"dy": 100,
"dz": 100,
"weight_gross": 500
}
}
],
"items": [
{
"article": "0001",
"billing_details": {
"assessed_unit_price": 0,
"unit_price": 0
},
"name": "Товар 1",
"count": 1,
"place_barcode": "0"
}
]
}'
ОБратите внимание что для создания заказа обязательно необходимо указать заголовок Accept-Language: ru-RU. Без него метод работать не будет
И получим ответ:
{
"request_id": "e4aab986b4c248378140a2591f741075-udp"
}
Получение информации о заказе
Итак, мы рассчитали стоимость и создали заказ. В дальнейшем может понадобиться посмотреть детали заказа.
Для получения информации по заказу необходимо отправить GET-запрос на адрес /api/b2b/platform/request/info
с обязательным query параметром - request_id.
В ответе вы получите информацию по заказу такую как статусы, отправителя и т.д. Подробное описание информации о заказе можно найти в документации
Отправим запрос на получение информации по нашему заказу:
curl --location 'https://b2b.taxi.tst.yandex.net/api/b2b/platform/request/info?request_id=e4aab986b4c248378140a2591f741075-udp' \
--header 'Authorization: Bearer y2_AgAAAAD04omrAAAPeAAAAAACRpC94Qk6Z5rUTgOcTgYFECJllXYKFx8'
И вот ответ:
{
"route_id": null,
"request_id": "e4aab986b4c248378140a2591f741075-udp",
"request": {
"info": {
"operator_request_id": "11122233344",
"referral_source": "logistic-platform-offers"
},
"source": {
"platform_station": {
"platform_id": "fbed3aa1-2cc6-4370-ab4d-59c5cc9bb924"
}
},
"destination": {
"type": "custom_location",
"custom_location": {
"latitude": 55.76287484805335,
"longitude": 37.60839157784731,
"details": {
"country": "Россия",
"locality": "Москва",
"region": "120540",
"federal_district": "Москва",
"street": "Тверская улица",
"house": "10с1",
"full_address": "г. Москва, ул. Тверская, 10",
"geo_id": 120540
}
},
"interval": {
"from": 1743055200,
"to": 1743087600
},
"interval_utc": {
"from": "2025-03-27T06:00:00+0000",
"to": "2025-03-27T15:00:00+0000"
}
},
"items": [
{
"count": 1,
"name": "Товар 1",
"article": "0001",
"barcode": "ebec1e83206f49190ae41d786e7e8960",
"billing_details": {
"nds": 20,
"unit_price": 0,
"assessed_unit_price": 0
},
"physical_dims": {
"dx": 0,
"dy": 0,
"dz": 0
},
"place_barcode": "PmTlvDlMTWaCsi9ZmbTX/g",
"refused_count": 0
}
],
"places": [
{
"physical_dims": {
"dx": 100.0,
"dy": 100.0,
"dz": 100.0,
"weight_gross": 500.0
},
"barcode": "PmTlvDlMTWaCsi9ZmbTX/g"
}
],
"billing_info": {
"payment_method": "already_paid",
"delivery_cost": 0
},
"recipient_info": {
"first_name": "Иванов Иван Иванович",
"last_name": "",
"patronymic": "",
"phone": "+79232897920"
},
"available_actions": {
"update_dates_available": true,
"update_address_available": false,
"update_courier_to_pickup_available": false,
"update_pickup_to_courier_available": false,
"update_pickup_to_pickup_available": false,
"update_items": false,
"update_recipient": true,
"update_places": true
},
"particular_items_refuse": false,
"delivery_policy": {
"min": 1743055200,
"max": 1743087600,
"policy": "interval_strict"
}
},
"state": {
"status": "SORTING_CENTER_LOADED",
"description": "Заказ подтвержден в сортировочном центре",
"timestamp_unix": 1743007677,
"timestamp": "2025-03-26T16:47:57.000000Z"
},
"full_items_price": 0,
"sharing_url": "https://logistics-frontend.taxi.tst.yandex.ru/route/bb11cebe-a0ff-4e6a-81e3-cc854e2ee205",
"courier_name": null,
"courier_phone": null,
"courier_phone_ext": null,
"courier_order_id": "2038903"
}
Отмена заказа
В ваших бизнес-процессах может появиться необходимость отменить заказ.
В Яндекс.Доставке отмена заказа с типом доставки курьером возможна только до получения статуса DELIVERY_TRANSPORTATION_RECIPIENT.
Для отмена заказа необходимо отправить POST-запрос на адрес /api/b2b/platform/request/cancel
с обязательным JSON-параметром - request_id.
При успешном выполнении запроса будет создана задача на отмену заказа.
Например отменим наш заказ:
curl --location 'https://b2b.taxi.tst.yandex.net/api/b2b/platform/request/cancel' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer y2_AgAAAAD04omrAAAPeAAAAAACRpC94Qk6Z5rUTgOcTgYFECJllXYKFx8' \
--data '{
"request_id": "e4aab986b4c248378140a2591f741075-udp"
}'
Заказ ушел на отмену:
{
"status": "CREATED",
"reason": "cancellation_started",
"description": "Заявка создана; заказ отменяется"
}
Обратите внимание что после успешного выполнения, заказ отменяется не сразу, а создается задача на его отмену.
В этой статье мы рассмотрели базовые методы интеграции вашего сервиса с Яндекс.Доставкой. Мы не стали углубляться в более сложные методы, поскольку уверены, что после настройки базовой интеграции с Яндекс.Доставкой, вам будет легко разобраться с более сложными вариантами. В каждой транспортной компании существуют похожие методы интеграции, однако их реализация может существенно отличаться.
В следующих статьях мы подробнее расскажем о нюансах интеграции с ТК ПЭК, Деловые Линии, Байкал Сервис и другими.