---
slug: "yandex-delivery"
name: "Яндекс Доставка API (Доставка по России)"
vendor: "Яндекс"
industry: "logistics"
docsUrl: "https://yandex.ru/support/delivery-profile/ru/api/other-day/"
version: 2
updatedAt: "2026-10-24"
---

# Яндекс Доставка API (Доставка по России)

Отрасль: Логистика и доставка. Актуально на 2026-10-24.

API логистической платформы Яндекс Доставки для доставки заказов в другой день по России: забор с вашего склада или самопривоз в точку отгрузки, доставка до двери или в ПВЗ и постаматы. Сценарий: рассчитать стоимость, получить варианты доставки (офферы), подтвердить оффер — заявка создана, затем отслеживать статус, печатать ярлыки и акты. Отдельный API есть для экспресс-доставки в течение дня — в этот файл он не вошёл.

## Сценарии

### Рассчитать стоимость доставки

Показать покупателю цену доставки Яндекса до двери или до пункта выдачи.

1. Получи Bearer-токен в личном кабинете (раздел «Профиль») и ID своего склада отгрузки platform_station_id — его выдаёт менеджер. Для отладки есть тестовый контур https://b2b.taxi.tst.yandex.net с тестовым токеном и складом из документации.
2. Посчитай стоимость: POST /api/b2b/platform/pricing-calculator с source.platform_station_id, destination (platform_station_id пункта выдачи или address для доставки до двери), tariff (time_interval — до двери, self_pickup — до ПВЗ), total_weight и places.
3. Вес передавай в граммах, габариты dx, dy, dz — в сантиметрах. total_assessed_price — оценочная стоимость посылки.
4. Это предварительная оценка: точную цену и сроки покажут офферы при создании заявки.

```bash
curl -X POST https://b2b-authproxy.taxi.yandex.net/api/b2b/platform/pricing-calculator \
  -H "Authorization: Bearer $YD_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
        "source": {"platform_station_id": "<ID склада отгрузки>"},
        "destination": {"address": "Санкт-Петербург, Большая Монетная улица, 1к1А"},
        "tariff": "time_interval",
        "total_weight": 1500,
        "total_assessed_price": 1500,
        "client_price": 0,
        "payment_method": "already_paid",
        "places": [{"physical_dims": {"weight_gross": 1500, "dx": 20, "dy": 15, "dz": 10}}]
      }'
```

### Показать пункты выдачи и постаматы в городе

Список ПВЗ Яндекса для выбора при оформлении заказа.

1. Определи населённый пункт: POST /api/b2b/platform/location/detect с адресом или его фрагментом (например, названием города). В ответе — geo_id.
2. Запроси точки: POST /api/b2b/platform/pickup-points/list с geo_id и type = pickup_point. Для поиска на карте вместо geo_id передай диапазоны latitude и longitude видимой области.
3. Если нужны примерка или частичный выкуп, отфильтруй по pickup_services. С пустым телом метод вернёт вообще все доступные точки.
4. Сохрани ID выбранной точки — он пойдёт в destination.platform_station при создании заявки.

```bash
curl -X POST https://b2b-authproxy.taxi.yandex.net/api/b2b/platform/location/detect \
  -H "Authorization: Bearer $YD_TOKEN" -H 'Content-Type: application/json' \
  -d '{"location": "Казань"}'

curl -X POST https://b2b-authproxy.taxi.yandex.net/api/b2b/platform/pickup-points/list \
  -H "Authorization: Bearer $YD_TOKEN" -H 'Content-Type: application/json' \
  -d '{"geo_id": <geo_id>, "type": "pickup_point"}'
```

### Создать заказ: выбрать вариант доставки и подтвердить

Основной поток: получить варианты доставки (офферы) для заказа и забронировать подходящий.

1. Запроси офферы: POST /api/b2b/platform/offers/create с info.operator_request_id (уникальный номер заказа у тебя), source.platform_station.platform_id, destination (type = platform_station и ID пункта — или custom_location с адресом для доставки до двери), items, places, billing_info, recipient_info и last_mile_policy.
2. Цены товаров передавай в копейках, вес — в граммах, габариты — в сантиметрах. Одинаковые товары — одной позицией с count, иначе запишется количество 1.
3. В ответе — офферы с интервалом доставки, ценой и expires_at. Выбери подходящий и успей подтвердить до истечения срока.
4. Подтверди: POST /api/b2b/platform/offers/confirm с offer_id. В ответе request_id созданной заявки — сохрани его в заказе.
5. Если выбирать не нужно, заявку на ближайшее время можно создать одним вызовом: POST /api/b2b/platform/request/create.

```bash
curl -X POST https://b2b-authproxy.taxi.yandex.net/api/b2b/platform/offers/confirm \
  -H "Authorization: Bearer $YD_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"offer_id": "c1b139dbd76b4ee3b39b19180b516119"}'
# → {"request_id": "77241d8009bb46d0bff5c65a73077bcd-udp"}
```

### Отследить заказ и при необходимости отменить

Показать покупателю статус доставки и отменить заявку, если заказ отменён.

1. Узнай статус: GET /api/b2b/platform/request/info с request_id (или request_code — твоим номером заказа). История статусов — /api/b2b/platform/request/history, актуальная дата доставки — /api/b2b/platform/request/actual_info.
2. Для синхронизации многих заказов используй выборку за период — /api/b2b/platform/requests/info, а не опрос по одному.
3. Отмени заявку: POST /api/b2b/platform/request/cancel с request_id. Курьерскую заявку можно отменить до статуса DELIVERY_TRANSPORTATION_RECIPIENT. В ответе status, reason и description — проверь, что отмена прошла.

```bash
curl -G https://b2b-authproxy.taxi.yandex.net/api/b2b/platform/request/info \
  -H "Authorization: Bearer $YD_TOKEN" \
  -d request_id=77241d8009bb46d0bff5c65a73077bcd-udp

curl -X POST https://b2b-authproxy.taxi.yandex.net/api/b2b/platform/request/cancel \
  -H "Authorization: Bearer $YD_TOKEN" -H 'Content-Type: application/json' \
  -d '{"request_id": "77241d8009bb46d0bff5c65a73077bcd-udp"}'
```

### Напечатать ярлыки на посылки

Подготовить отгрузку: ярлыки на каждое место и акт приёма-передачи для курьера.

1. Получи ярлыки: POST /api/b2b/platform/request/generate-labels со списком request_ids. generate_type = one печатает по ярлыку на лист, many — несколько на лист; label_size_mm — размер под твой принтер (100x150 для термопринтера, 210x297 — лист A4).
2. Наклей ярлык на каждое грузоместо.
3. Для передачи курьеру сформируй акт методом /api/b2b/platform/request/get-handover-act.

```bash
curl -X POST https://b2b-authproxy.taxi.yandex.net/api/b2b/platform/request/generate-labels \
  -H "Authorization: Bearer $YD_TOKEN" -H 'Content-Type: application/json' \
  -o labels.pdf \
  -d '{"request_ids": ["77241d8009bb46d0bff5c65a73077bcd-udp"], "generate_type": "one", "label_size_mm": "100x150"}'
```

## Базовые URL

- Боевой: `https://b2b-authproxy.taxi.yandex.net`
- Тестовый: `https://b2b.taxi.tst.yandex.net`

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

Тип: Bearer-токен

Bearer-токен в заголовке `Authorization: Bearer <token>`. Для продакшена токен берут в личном кабинете в разделе «Профиль»; ID склада отгрузки (`platform_station_id`) выдаёт коммерческий менеджер.

Для тестового контура в документации даны:

Для корректной работы нужен TLS 1.2 и выше с шифрами по стандарту PCI DSS v4.

## Методы

### POST /api/b2b/platform/pricing-calculator — Предварительная оценка стоимости

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `is_oversized` | query | boolean | нет | Флаг КГТ |
| `source` | body | object | нет | Точка отправления: platform_station_id |
| `destination` | body | object | нет | Точка получения: platform_station_id или address (одно из двух) |
| `tariff` | body | string | нет | time_interval (до двери в интервал) или self_pickup (до ПВЗ) |
| `total_weight` | body | integer | нет | Суммарный вес, граммы |
| `total_assessed_price` | body | integer | нет | Оценочная стоимость |
| `client_price` | body | integer | нет | Стоимость для клиента |
| `payment_method` | body | string | нет | Способ оплаты, например already_paid |
| `places` | body | array | нет | Места: physical_dims.weight_gross, dx, dy, dz |

Пример запроса:

```
{
  "source": {
    "platform_station_id": "fbed3aa1-2cc6-4370-ab4d-59c5cc9bb924"
  },
  "destination": {
    "platform_station_id": "e1139f6d-e34f-47a9-a55f-31f032a861a6",
    "address": "Санкт-Петербург, Большая Монетная улица, 1к1А"
  },
  "tariff": "time_interval",
  "total_weight": 0,
  "total_assessed_price": 0,
  "client_price": 0,
  "payment_method": "already_paid",
  "places": [
    {
      "physical_dims": {
        "weight_gross": 100,
        "dx": 10,
        "dy": 10,
        "dz": 10
      }
    }
  ]
}
```

### POST /api/b2b/platform/location/detect — Определение geo_id по адресу

Возвращает идентификатор населённого пункта (`geo_id`) по адресу или его фрагменту.

### POST /api/b2b/platform/pickup-points/list — Точки самопривоза и ПВЗ

С пустым телом возвращает все доступные точки самопривоза, ПВЗ и постаматы.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `geo_id` | body | integer | нет | Населённый пункт |
| `type` | body | string | нет | Тип точки, например pickup_point |
| `available_for_dropoff` | body | boolean | нет | Возможность отгрузки в точку; для warehouse обязательно true |
| `is_yandex_branded` | body | boolean | нет | Только брендированные точки |
| `is_not_branded_partner_station` | body | boolean | нет | Добавить партнёрские ПВЗ |
| `payment_method` | body | string | нет | Способ оплаты |
| `latitude` | body | object | нет | Диапазон широт from/to |
| `longitude` | body | object | нет | Диапазон долгот from/to |
| `pickup_services` | body | object | нет | Услуги: примерка, частичный выкуп и др. |

### POST /api/b2b/platform/offers/create — Создание заявки (получение офферов)

Возвращает варианты доставки (офферы) для заказа. Одинаковые товары передавайте одной позицией с `count`, иначе будет записано количество 1.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `send_unix` | query | boolean | нет | Формат интервалов: true — unix, false — UTC |
| `info.operator_request_id` | body | string | нет | ID заказа у отправителя, уникальный |
| `info.comment` | body | string | нет | Комментарий |
| `info.merchant_id` | body | string | нет | ID мерчанта (если есть зарегистрированные) |
| `source.platform_station.platform_id` | body | string | нет | Склад или точка отгрузки |
| `source.interval_utc` | body | object | нет | Интервал отгрузки from/to |
| `destination.type` | body | string | нет | platform_station (ПВЗ) или custom_location (до двери) |
| `destination.platform_station` | body | object | нет | ПВЗ получения |
| `destination.custom_location` | body | object | нет | Адрес: latitude, longitude, details (full_address, locality, street, house, room и др.) |
| `destination.interval_utc` | body | object | нет | Интервал доставки |
| `items` | body | array | да | Товары: count, name, article, billing_details, physical_dims, place_barcode |
| `items[].billing_details.unit_price` | body | integer | нет | Цена за единицу, копейки |
| `items[].billing_details.assessed_unit_price` | body | integer | нет | Оценочная цена за единицу, копейки |
| `items[].billing_details.nds` | body | integer | нет | НДС: 0, 5, 7, 10, 22; без НДС — -1 |
| `places` | body | array | да | Грузоместа: physical_dims (weight_gross, dx, dy, dz), barcode |
| `billing_info` | body | object | нет | Оплата: payment_method, delivery_cost |
| `recipient_info` | body | object | нет | Данные получателя |
| `last_mile_policy` | body | string | нет | time_interval или self_pickup |
| `forbid_unboxing` | body | boolean | нет | Запрет вскрытия упаковки |
| `particular_items_refuse` | body | boolean | нет | Разрешён частичный выкуп |

Пример ответа:

```json
{
  "offers": [
    {
      "offer_id": "c1b139dbd76b4ee3b39b19180b516119",
      "expires_at": "2021-10-25T15:00:00.000000Z",
      "offer_details": {
        "delivery_interval": {
          "min": "2021-10-25T15:00:00.000000Z",
          "max": "2021-10-25T15:00:00.000000Z",
          "policy": "time_interval"
        },
        "pickup_interval": {},
        "pricing": "192.15 RUB",
        "pricing_commission_on_delivery_payment": "2.2%",
        "pricing_commission_on_delivery_payment_amount": "9.43 RUB",
        "pricing_total": "1400.96 RUB"
      }
    }
  ]
}
```

### POST /api/b2b/platform/offers/confirm — Подтверждение заявки

Бронирует выбранный оффер и создаёт заявку.

В ответе — `request_id` созданной заявки, например `77241d8009bb46d0bff5c65a73077bcd-udp`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `offer_id` | body | string | да | ID оффера |

Пример запроса:

```
{
  "offer_id": "c1b139dbd76b4ee3b39b19180b516119"
}
```

### POST /api/b2b/platform/request/create — Создание заказа на ближайшее время

Создаёт заказ сразу на ближайшее доступное время, без шага выбора оффера.

### GET /api/b2b/platform/request/info — Информация о заявке

История статусов — `GET /api/b2b/platform/request/history`, актуальная дата доставки — `GET /api/b2b/platform/request/actual_info`, заявки за период — `POST /api/b2b/platform/requests/info`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `request_id` | query | string | нет | ID заявки в платформе |
| `request_code` | query | string | нет | Номер заказа в системе заказчика |

### POST /api/b2b/platform/request/cancel — Отмена заявки

Курьерскую заявку можно отменить до статуса `DELIVERY_TRANSPORTATION_RECIPIENT`.

В ответе: `status` (`CREATED`, `SUCCESS` и др.), `reason`, `description`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `request_id` | body | string | да | ID заявки в платформе |

### POST /api/b2b/platform/request/generate-labels — Получение ярлыков

Акты приёма-передачи — `POST /api/b2b/platform/request/get-handover-act`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `request_ids` | body | array | да | ID заказов |
| `generate_type` | body | string | нет | one (по одному на лист, по умолчанию) или many |
| `label_size_mm` | body | string | нет | 210x297 (по умолчанию), 100x150, 75x120, 58x60, 58x40 |
| `language` | body | string | нет | Язык надписей, по умолчанию ru |

## Нюансы

- Основной поток — двухшаговый: `offers/create` возвращает офферы с ограниченным сроком (`expires_at`), заявка создаётся только после `offers/confirm`.
- Суммы в товарах передаются в копейках, вес — в граммах, габариты — в сантиметрах.
- Для `destination` заполняется либо `platform_station` (ПВЗ), либо `custom_location` (доставка до двери) в соответствии с `type`.
- `operator_request_id` должен быть уникальным для каждого заказа.
- В тестовом контуре используйте тестовый токен и тестовый склад из документации; продакшен-ID склада выдаёт менеджер.

## Ошибки

| Код | Описание |
|---|---|
| `400` | Ошибка в данных пользователя, например bad_request с сообщением Missing required field 'offer_id' |
| `403` | Доступ запрещён |
| `404` | Не найдено |
| `500` | Внутренняя ошибка сервера |

## Источники

- [API Доставки по России](https://yandex.ru/support/delivery-profile/ru/api/other-day/)
- [Список методов](https://yandex.ru/support/delivery-profile/ru/api/other-day/ref/)
- [Создание заявки](https://yandex.ru/support/delivery-profile/ru/api/other-day/ref/3.-Osnovnye-zaprosy/apib2bplatformofferscreate-post)
- [Подтверждение заявки](https://yandex.ru/support/delivery-profile/ru/api/other-day/ref/3.-Osnovnye-zaprosy/apib2bplatformoffersconfirm-post)
- [Отмена заявки](https://yandex.ru/support/delivery-profile/ru/api/other-day/ref/3.-Osnovnye-zaprosy/apib2bplatformrequestcancel-post)
- [Статусная модель](https://yandex.ru/support/delivery-profile/ru/api/other-day/status-model)
- [Технические детали интеграции](https://yandex.ru/support/delivery-profile/ru/api/express/integration)

---

Если этого недостаточно — официальная документация: https://yandex.ru/support/delivery-profile/ru/api/other-day/
JSON: https://mcp-everything.ru/api/integrations/yandex-delivery. MCP: https://mcp-everything.ru/mcp
