Отрасль: Логистика и доставка. Актуально на 2026-10-24.
Клиентский протокол интеграции с логистикой СДЭК: расчёт стоимости и сроков доставки, справочники населённых пунктов и пунктов выдачи, регистрация и изменение заказов, вызов курьера, печать квитанций и штрихкодов, договорённости о доставке, возвраты и вебхуки о статусах. Создание сущностей асинхронное: запрос сначала принимается, а результат проверяют отдельным методом или получают вебхуком.
Показать покупателю цену и срок доставки СДЭК в корзине или калькуляторе на сайте.
# Токен (кешируй на expires_in секунд)
TOKEN=$(curl -s -X POST "https://api.cdek.ru/v2/oauth/token?grant_type=client_credentials&client_id=<Account>&client_secret=<Secure password>" | jq -r .access_token)
# Все тарифы: Москва → Санкт-Петербург, посылка 1,5 кг
curl -X POST https://api.cdek.ru/v2/calculator/tarifflist \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"from_location": {"code": 44},
"to_location": {"code": 137},
"packages": [{"weight": 1500, "length": 20, "width": 15, "height": 10}]
}'
Список ПВЗ и постаматов СДЭК для выбора на странице оформления заказа.
# Код города
curl -G https://api.cdek.ru/v2/location/cities \
-H "Authorization: Bearer $TOKEN" \
--data-urlencode 'city=Казань' \
--data-urlencode 'country_codes=RU'
# Пункты выдачи и постаматы в этом городе
curl -G https://api.cdek.ru/v2/deliverypoints \
-H "Authorization: Bearer $TOKEN" \
-d city_code=<код города> \
-d type=ALL \
-d is_handout=true
Передать заказ интернет-магазина в СДЭК и получить номер отправления.
# Тариф 136 — «Посылка склад-склад»: сдаёшь в ПВЗ, покупатель забирает в ПВЗ
curl -X POST https://api.cdek.ru/v2/orders \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"type": 1,
"number": "ORDER-1042",
"tariff_code": 136,
"shipment_point": "<код ПВЗ, куда сдашь посылку>",
"delivery_point": "<код ПВЗ покупателя>",
"recipient": {"name": "Иван Петров", "phones": [{"number": "+79990001122"}]},
"packages": [{
"number": "1",
"weight": 1500, "length": 20, "width": 15, "height": 10,
"items": [{"name": "Кружка", "ware_key": "SKU-17", "payment": {"value": 0}, "cost": 990, "weight": 1500, "amount": 1}]
}]
}'
# Через 2–3 секунды — проверить, создан ли заказ
curl https://api.cdek.ru/v2/orders/<uuid> -H "Authorization: Bearer $TOKEN"
Подготовить отправление к передаче: напечатать документы и заказать забор посылки со склада.
# Квитанция для двух заказов
curl -X POST https://api.cdek.ru/v2/print/orders \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"orders": [{"order_uuid": "<uuid заказа 1>"}, {"order_uuid": "<uuid заказа 2>"}], "copy_count": 2}'
# Готовый PDF
curl -o receipt.pdf https://api.cdek.ru/v2/print/orders/<uuid задания>.pdf -H "Authorization: Bearer $TOKEN"
Узнавать о движении посылки сразу, без постоянного опроса заказов.
curl -X POST https://api.cdek.ru/v2/webhooks \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"type": "ORDER_STATUS", "url": "https://example.ru/cdek/webhook"}'
https://api.cdek.ruhttps://api.edu.cdek.ruТип: OAuth 2.0
OAuth 2.0 (client credentials). Токен получают запросом POST /v2/oauth/token с grant_type=client_credentials, client_id (Account) и client_secret (Secure password) из личного кабинета СДЭК (раздел интеграции) и передают в заголовке Authorization: Bearer <token> (JWT). Для интеграции нужен договор со СДЭК.
Тестовая учётная запись для api.edu.cdek.ru (из документации):
В ответе: access_token, token_type, expires_in, scope, jti.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
grant_type |
query | string | да | client_credentials |
client_id |
query | string | да | Идентификатор клиента |
client_secret |
query | string | да | Секретный ключ клиента |
Стоимость и сроки доставки по всем доступным тарифам. Расчёт по конкретному тарифу — POST /v2/calculator/tariff, с доп. услугами — POST /v2/calculator/tariffAndService.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
date |
body | string | нет | Плановая дата передачи заказа; по умолчанию текущая |
type |
body | integer | нет | 1 — интернет-магазин (по умолчанию), 2 — доставка |
currency |
body | integer | нет | Код валюты расчёта |
lang |
body | string | нет | rus, eng, zho |
shipment_point |
body | string | нет | ПВЗ, куда клиент привезёт посылку |
delivery_point |
body | string | нет | ПВЗ доставки |
from_location |
body | object | да | Откуда: code, postal_code, country_code, city, address, координаты |
to_location |
body | object | да | Куда: те же поля |
packages |
body | array | да | Места |
packages[].weight |
body | integer | да | Вес в граммах |
packages[].length |
body | integer | нет | Длина, см |
packages[].width |
body | integer | нет | Ширина, см |
packages[].height |
body | integer | нет | Высота, см |
Создаёт заказ на доставку. Возвращает 202 Accepted с UUID заказа и статусом запроса; статус ACCEPTED не гарантирует создание заказа.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
type |
body | integer | нет | 1 — интернет-магазин, 2 — доставка |
number |
body | string | нет | Номер заказа в системе клиента (для ИМ), до 40 символов |
tariff_code |
body | integer | да | Код тарифа |
comment |
body | string | нет | Комментарий |
shipment_point |
body | string | нет | ПВЗ, куда клиент привезёт посылку; не вместе с from_location |
delivery_point |
body | string | нет | ПВЗ доставки; обязателен для тарифов «до склада» |
sender |
body | object | нет | Отправитель; обязателен для типа «доставка» |
recipient |
body | object | да | Получатель |
recipient.name |
body | string | да | ФИО контактного лица |
recipient.phones |
body | array | да | Телефоны (до 10): number, additional |
recipient.email |
body | string | нет | |
from_location |
body | object | нет | Адрес отправления; не вместе с shipment_point |
to_location |
body | object | нет | Адрес получения; не вместе с delivery_point |
to_location.address |
body | string | нет | Строка адреса |
to_location.code |
body | integer | нет | Код населённого пункта СДЭК |
delivery_recipient_cost |
body | object | нет | Доп. сбор за доставку с получателя (для ИМ) |
services |
body | array | нет | Дополнительные услуги |
packages |
body | array | да | Места, от 1 до 255 |
packages[].number |
body | string | да | Номер упаковки |
packages[].weight |
body | integer | да | Вес, граммы |
packages[].length |
body | integer | нет | Длина, см |
packages[].width |
body | integer | нет | Ширина, см |
packages[].height |
body | integer | нет | Высота, см |
packages[].items |
body | array | нет | Товары; обязательно для заказов «интернет-магазин» |
packages[].items[].name |
body | string | да | Наименование товара |
packages[].items[].ware_key |
body | string | да | Артикул |
packages[].items[].payment |
body | object | да | Оплата при получении за единицу (value ≥ 0) |
packages[].items[].cost |
body | number | да | Объявленная стоимость за единицу |
packages[].items[].weight |
body | integer | да | Вес |
packages[].items[].amount |
body | integer | да | Количество |
packages[].items[].marking |
body | string | нет | Код маркировки «Честный знак» |
print |
body | string | нет | Тип печатной формы для формирования |
Детальная информация о заказе: статусы, доставка, получатель. По номеру СДЭК или номеру ИМ — GET /v2/orders с параметрами cdek_number или im_number.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
uuid |
path | string | да | Идентификатор заказа в ИС СДЭК |
Изменение возможно только в статусах CREATED и ACCEPTED. Удаление — DELETE /v2/orders/{uuid}.
Регистрация заявки на вызов курьера за посылкой. Доступные даты — POST /v2/intakes/availableDays, статус — GET /v2/intakes/{uuid}.
Асинхронно формирует квитанцию; готовый PDF — GET /v2/print/orders/{uuid}.pdf. Штрихкод места — POST /v2/print/barcodes.
Список действующих ПВЗ и постаматов. Обновляйте список раз в сутки, не храните статично.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
code |
query | string | нет | Код ПВЗ |
type |
query | string | нет | POSTAMAT, PVZ, ALL |
postal_code |
query | string | нет | Почтовый индекс |
city_code |
query | integer | нет | Код населённого пункта СДЭК |
country_code |
query | string | нет | Код страны ISO 3166-1 alpha-2 |
region_code |
query | integer | нет | Код региона СДЭК |
have_cashless |
query | boolean | нет | Есть терминал оплаты |
allowed_cod |
query | boolean | нет | Разрешён наложенный платёж |
weight_max |
query | integer | нет | Макс. вес, кг |
is_handout |
query | boolean | нет | Пункт выдачи |
is_reception |
query | boolean | нет | Приём заказов |
size |
query | integer | нет | Размер страницы |
page |
query | integer | нет | Номер страницы |
Справочник населённых пунктов СДЭК с кодами. Поиск по названию — GET /v2/location/suggest/cities.
Список подписок — GET /v2/webhooks, удаление — DELETE /v2/webhooks/{uuid}.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
type |
body | string | да | ORDER_STATUS, ORDER_MODIFIED, PRINT_FORM, RECEIPT, DOWNLOAD_PHOTO, PREALERT_CLOSED, ACCOMPANYING_WAYBILL, OFFICE_AVAILABILITY, DELIV_PROBLEM, DELIV_AGREEMENT |
url |
body | string | да | URL для событий |
ACCEPTED означает только первичную валидацию, итог — SUCCESSFUL или INVALID. Обычно 200–500 мс, при пиковой нагрузке до 30–60 секунд; опрашивайте с паузой 2–3 секунды.POST /v2/orders нельзя одновременно передавать shipment_point и from_location, а также delivery_point и to_location.CREATED и ACCEPTED.| Код | Описание |
|---|---|
v2_internal_error |
Системная ошибка |
v2_similar_request_still_processed |
Предыдущий запрос того же типа над этой сущностью ещё не выполнен |
v2_update_forbidden |
Заказ уже принят к перевозке — изменять нельзя |
v2_bad_request |
Некорректный запрос |
v2_invalid_format |
Некорректное значение параметра |
v2_field_is_empty |
Не передано обязательное поле |
v2_parameters_empty |
Все параметры пустые |
v2_invalid_value_type |
Некорректный тип данных |
v2_entity_not_found |
Сущность не найдена или удалена |
v2_entity_forbidden |
Сущность принадлежит другому клиенту |
Если этого недостаточно — официальная документация: https://apidoc.cdek.ru/ JSON: https://mcp-everything.ru/api/integrations/cdek. MCP: https://mcp-everything.ru/mcp