навигация перейти esc закрыть

Интеграция по API

Сценарии, статусы, нюансы и готовый код — от первого запроса до продакшена

Открыть Swagger-документацию

Способ интеграции

Два варианта подключения

Вариант 1

Готовый модуль

  • Когда подходит: нет собственной разработки, стандартная CMS/CRM
  • Что получаете: прямой доступ к боевому стенду без тестового контура

Вариант 2

Собственная разработка

  • Когда подходит: нестандартная логика, своя ERP/CRM, маркетплейс
  • Что получаете: ключи тестового контура, ключи боевого API, Swagger-документацию, менеджера интеграции

Платформы

Поддерживаемые CMS и CRM

1С-БитриксWordPress / WooCommerce МойСкладTilda OpenCartRetailCRM InSalesCS-Cart WebAsystUMI.CMS PrestaShop

Модули сделаны сторонними разработчиками. Есть как платные и бесплатные. Подробнее по ссылке.

Подключение

1

Заявка на подключение

2

Назначение менеджера интеграции

3

Выдача ключей

Для собственной разработки: тестовый контур + боевой API. Для готового модуля: прямой доступ к боевому стенду.

4

Переход в продакшн

Возможности API

Создание заказа

Один метод для одноместных и многоместных отправлений, тип определяется автоматически по массиву parcels. После создания данные заказа можно изменить через PATCH, а сам заказ можно отменить. Сценарий →

Отмена заказа

Доступна на любом этапе, кроме финальных статусов. Для многоместных можно отменить только часть посылок через parcelIds, остальные продолжат доставку. Сценарий →

Изменение заказа

new

Частичное обновление данных созданного заказа через PATCH: данные получателя, ВГХ и объявленной ценности, смена оплаты с постоплаты на предоплату. Каждое поле имеет своё окно доступности по статусам. Сценарий →

Статусы заказа и посылок

Два уровня: детальный статус посылки (v1, по id) и агрегированный статус заказа (v2, по tracking_number). Для многоместных появляются частичные статусы PARTIALLY_*. См. статусную модель →

Расчёт стоимости и сроков доставки

Стоимость фиксирована: 150 ₽ за отправление. Метод нужен в первую очередь для оценки срока и проверки доступности ПВЗ. Два режима: расчёт до конкретного ПВЗ или предварительный, по городу/региону. Для курьерской доставки — тот же роут /api/v2/magnit-post/orders/estimate с delivery_type: courier: проверяет доступность адреса, отдаёт стоимость и слоты в блоке courier_delivery. Сценарий → Курьерский заказ →

Получение списка ПВЗ

Список меняется, пункты открываются и закрываются. Заказ на архивный ПВЗ упадёт с ошибкой при создании. Не кэшируйте надолго: обновляйте раз в сутки или при каждой сессии пользователя. Сценарий →

Карта ПВЗ и виджет выбора

Готовый компонент для встраивания на ваш сайт, пользователь выбирает ПВЗ прямо на карте. Нужны ключ Магнит Пост и ключ Яндекс Карт. Виджет и SDK →

Наложенный платёж

Только в создании заказа v2. Реализуется через parcel_payment и order_payment. Сумма к оплате формируется автоматически. Сценарий →

Многоместные отправления

Несколько грузомест в одном заказе, единый tracking_number на весь заказ, но у каждой посылки свой id. Для одноместного заказа они совпадают. Сценарий →

Трекинг заказа

Публичная страница post.magnit.ru/tracking, поиск по customer_order_id + 4 цифры номера получателя. Ссылки на трекинг также доступны через API. Сценарий →

Печать этикеток

Один запрос по id любой посылки: PDF со всеми этикетками сразу. Сценарий →

Продление срока хранения

+5 дней, один раз за весь срок жизни заказа. Доступно, только когда все посылки уже в ПВЗ. Сценарий →

Кастомное имя партнёра в SMS

Название вашей компании в SMS с кодом выдачи, полезно, если работаете под несколькими брендами. Передаётся через meta.custom_partner_name при создании заказа.

Дроп офф — сдача в ПВЗ

new

Партнёр создаёт заказ и сдаёт посылки в ПВЗ Магнита без согласования с менеджерами. В списке ПВЗ появился флаг drop_off_available — отфильтруйте ПВЗ с true и передайте его key как drop_off_key при создании заказа. На сдачу — 5 дней, затем заказ переходит в статус REMOVED. Сценарий →

C2C — отправка частными лицами

new

Физическое лицо отправляет посылку другому физлицу через ПВЗ Магнита. Создание заказа — стандартный роут POST /api/v2/magnit-post/orders, но с двумя новыми параметрами: блок sender (first_name, last_name, phone — данные отправителя) и drop_off_key — ключ ПВЗ, куда отправитель принесёт посылку для сдачи. Узнать подходящий ПВЗ можно через GET /api/v2/magnit-post/pickup-points: флаг drop_off_available: true означает, что ПВЗ принимает C2C-посылки. Остальные поля — как при стандартном создании: pickup_point (ПВЗ назначения), recipient, parcels.

Актуальная версия API: v2, поддерживает многоместные отправления, наложенный платёж и расширенную статусную модель. Рекомендуем использовать её для новых интеграций.

Ключевые параметры

Идентификаторы

В системе несколько идентификаторов, каждый имеет свою роль. Главное правило: v1-методы работают с id посылки, v2-методы: с tracking_number заказа.

customer_order_id Задаёт партнёр или генерирует система
  • Номер заказа в системе Магнит Пост, задаётся партнёром
  • Уникальный, переиспользовать нельзя (даже после отмены)
  • Латиница + цифры
  • Если не передан, генерируется по шаблону MP-1785482222532
  • Основа для barcode, если не передан
external_order_id Задаёт партнёр
  • Идентификатор заказа во внешней системе партнёра
  • Магнит Пост с ним не работает и не валидирует
  • Нужен для маппинга с customer_order_id
barcode Задаёт партнёр или генерирует система
  • Штрих-код на этикетке, сканируется на складе
  • Должен быть уникальным, переиспользовать нельзя
  • Если не передан, генерируется автоматически
  • Одноместный: совпадает с customer_order_id
  • Многоместный: customer_order_id_1, customer_order_id_2
tracking_number Генерирует система
  • Трек-номер заказа (UUID)
  • Для v2-методов: получение заказа, отмена, продление хранения
id посылки Генерирует система
  • Внутренний UUID из parcels[].id
  • Для v1-методов: статусы, история, этикетки
  • Для многоместного заказа у каждой посылки свой id, отличный от tracking_number

Рекомендация: для одноместного заказа barcode должен совпадать с customer_order_id. Так проще отслеживать соответствие и исключить путаницу при приёмке на складе и при выдаче на ПВЗ.

Сценарии · 17

Сценарии интеграции

Готовые примеры запросов с пояснениями нюансов, можно копировать как заготовку.

Начало работы

Получение Bearer-токена. Токен живёт ~1 час (expires_in в секундах), обновляйте по расписанию, не запрашивайте перед каждым вызовом. Параметры передаются как application/x-www-form-urlencoded, grant_typeclient_credentials.

client_id и client_secret выдаются менеджером интеграции. Значения в примере тестовые.

Запрос

          
Ответ

          

Полученный access_token передаётся в заголовке Authorization: Bearer <token> во всех последующих запросах.

Подготовка данных

Перед созданием заказов необходимо создать хотя бы один склад, его warehouse_id (UUID) передаётся в запросе создания заказа. Также нужен для return_warehouse_id при возврате. Склады можно создавать через ЛК Магнит Пост или через API. Максимум — 100 складов.

МетодОписание
POST .../warehousesСоздать склад, возвращает UUID
GET .../warehousesПолучить список всех складов (до 1000)
PUT .../warehousesОбновить данные склада

Обновление склада через PUT не влияет на ранее созданные заказы, они сохраняют данные склада на момент создания. Новые заказы будут использовать обновлённые данные.

Создание склада

POST /api/v1/magnit-post/warehouses

          

Получение списка складов

GET /api/v1/magnit-post/warehouses

          

Возвращает список пунктов выдачи с пагинацией. Из ответа нужно сохранить key выбранного ПВЗ, а также region и city: эти значения передаются в расчёт стоимости и создание заказа без изменений. Поле drop_off_available показывает, поддерживает ли ПВЗ приём посылок через дроп офф.

Параметры пагинации: page и pageSize. По умолчанию pageSize=100. При totalPages > 1 нужно запросить все страницы.

Список ПВЗ меняется: пункты открываются и закрываются. Заказ на архивный ПВЗ вернёт ошибку при создании. Не кэшируйте список надолго.

Ответ (фрагмент)

          

Ключевые поля для интеграции: key (передаётся как pup_key в создании заказа), region и city (передаются как pup_region и pup_city в расчёт стоимости, строго без изменений). Поле drop_off_available — флаг доступности дроп оффа: передавайте key такого ПВЗ как drop_off_key при создании заказа со сдачей. Сценарий дроп оффа →

Два режима расчёта. Если клиент уже выбрал ПВЗ, передаёте city_from и pup_key. Для предварительного расчёта без выбора ПВЗ: city_from, pup_region и pup_city.

Важно: поля pup_region и pup_city необходимо передавать точно так же, как в ответе метода /pickup-points.

Запрос: расчёт до города

            
Запрос: расчёт до ПВЗ

            
Ответ

            

Для оценки курьерской доставки используется тот же роут /api/v2/magnit-post/orders/estimate с параметром delivery_type: courier. Вместо pup_key/pup_region передаются координаты получателя и габариты посылок. Ответ содержит блок courier_delivery с оценкой двух режимов: on_click (получатель сам вызывает курьера через трекинг) и on_time (доставка к выбранному слоту).

Важно: все стоимости в блоке courier_delivery указаны в копейках. Если оценка вернула available: false — доставка по указанному адресу невозможна.

Запрос: курьерская оценка

            
Ответ: courier_delivery

            

Создание заказа

Базовый сценарий создания заказа без наложенного платежа: товар уже оплачен, либо оплата не требуется через платформу. Метод подходит как для одноместных, так и для многоместных отправлений, для нескольких грузомест просто передайте несколько объектов в массиве parcels.

customer_order_id: латиница и цифры; рекомендуемый формат: 1-3 буквы + номер (например AER015462324 или DO2343423432). Кириллица блокирует создание заказа, API вернёт 400 BAD_REQUEST с сообщением customer_order_id can not contain cyrrilic letters. Номер нельзя переиспользовать, даже после отмены заказа.

Запрос

          
Ответ

          

Оплата при выдаче: только в создании заказа v2. Для каждой посылки указывается billing_type: not_paid: клиент платит при получении, already_paid: заказ уже оплачен. Итоговая сумма в чеке формируется автоматически.

Как формируется сумма к оплате:

ПолеЕдиницаОписание
unit_priceкопейкиЦена за единицу товара
total_sum_for_itemкопейкиunit_price × quantity
total_sum_for_parcelкопейкиСумма всех товаров в посылке (без доставки)
delivery_costкопейкиСтоимость доставки, добавляется к чеку один раз
total_sum_for_orderкопейкиСумма товаров без доставки (в чек не идёт)
declared_valueрублиОбъявленная ценность для страховки, в чек не идёт

declared_value: единственное поле в рублях. Все остальные суммы передаются в копейках. Обратите внимание на это при разработке: легко передать declared_value в копейках по аналогии с остальными полями, тогда система отобразит сумму в 100 раз больше.

Итоговая сумма в чеке = total_sum_for_parcel (not_paid посылок) + delivery_cost. Если все посылки already_paid, взять с клиента только стоимость доставки невозможно.

Запрос

          

В этом примере клиент заплатит 1650 ₽: 1500 ₽ за товар (total_sum_for_parcel: 150000) + 150 ₽ доставка (delivery_cost: 15000). Все суммы в копейках, кроме declared_value.

Несколько грузомест в одном заказе: только в создании заказа v2. Грузоместа передаются массивом parcels. Если barcode не передан, система формирует его автоматически: customer_order_id_1, customer_order_id_2 и т.д.

Важно: идентификаторы. В ответе вернётся tracking_number заказа и массив parcels с id каждой посылки. tracking_number заказа не совпадает ни с одним id посылки. Для v1-методов (статусы, этикетки) используйте id посылки. Для v2-метода получения заказа: tracking_number.

Запрос

          
Ответ

          

Для получения статусов посылок, делаете отдельный запрос по каждому id. Для этикеток достаточно одного запроса с любым id: в ответе вернётся PDF со всеми этикетками заказа.

Курьерская доставка до двери. Два режима: on_click — получатель сам вызывает курьера через страницу трекинга, когда заказ поступит в ПВЗ; on_time — доставка к выбранному временному слоту. Адрес, координаты и комментарий передаются в блоке courier_delivery.

Прежде чем создавать заказ, запросите доступные слоты и стоимость через метод /api/v2/magnit-post/orders/estimate с delivery_type: courier — тот же роут, что и для расчёта до ПВЗ, но вместо pup_key передаются координаты получателя и габариты посылок (подробности в сценарии «Расчёт стоимости и срока доставки»). В ответ вернётся блок courier_delivery с оценкой обоих режимов:

  • on_click — поле available (доступен ли режим для адреса), cost и cost_with_vat в копейках, expected_interval с from/to — ожидаемый интервал прибытия курьера. При создании заказа time_slot не передаётся.
  • on_time — поле available и массив slots, каждый слот содержит from, to и cost. Выбираете подходящий слот и передаёте его from/to в поле time_slot при создании заказа.

Нюансы: pickup_point запрещён вместе с delivery_type: courier. Если в оценке available: false — доставка этим режимом по указанному адресу невозможна. Все стоимости в блоке courier_delivery указаны в копейках. В режиме on_click time_slot не передаётся, в режиме on_time — обязателен и должен совпадать с одним из слотов, возвращённых методом estimate. Создание заказа — стандартный роут /api/v2/magnit-post/orders с delivery_type: courier.

Запрос: on_click

          
Запрос: on_time

          
Ответ

          

В ответе на создание заказа блок courier_delivery не возвращается. Чтобы получить данные доставки, запросите заказ через GET /api/v2/magnit-post/orders/{tracking_number} — данные будут в поле delivery.courier_delivery.

Дроп офф — партнёр самостоятельно приносит посылки в ПВЗ Магнита, без забора со склада. Сначала проверьте drop_off_available в списке ПВЗ GET /api/v2/magnit-post/pickup-points и выберите ПВЗ с true. В запросе на создание заказа передаётся drop_off_key — ключ этого ПВЗ. Остальные поля — как при стандартном создании: pickup_point (ПВЗ назначения), recipient, parcels.

Важно: на сдачу посылок — 5 дней с момента создания заказа. Если посылки не сданы в срок, заказ переходит в статус REMOVED. Используйте только ПВЗ с drop_off_available: true из актуального списка.

Запрос

          
Ответ

          

После приёмки на ПВЗ посылка отправляется на склад (СЦ), затем — на ПВЗ назначения для выдачи получателю. Статус можно отслеживать стандартным методом GET /api/v2/magnit-post/orders/{tracking_number}. Посылка не размещается в ячейку на ПВЗ сдачи — она ожидает отгрузки на склад.

C2C (consumer-to-consumer) — физическое лицо отправляет посылку другому физлицу через ПВЗ Магнита. Создание заказа — стандартный роут /api/v2/magnit-post/orders, но с двумя новыми параметрами: блок sender с данными отправителя (first_name, last_name, phone) и drop_off_key — ключ ПВЗ, куда отправитель принесёт посылку для сдачи.

Чтобы узнать, на какой ПВЗ можно сдать C2C-посылку, вызовите список ПВЗ GET /api/v2/magnit-post/pickup-points и отфильтруйте по drop_off_available: true. Значение key подходящего ПВЗ передавайте как drop_off_key. ПВЗ назначения, куда посылка будет доставлена получателю, — в поле pickup_point как при стандартном заказе.

Нюансы: sender обязателен для C2C. Оплату производит отправитель онлайн — в parcel_payment.billing_type передавайте already_paid. В ответе на создание заказа блок sender не возвращается.

Запрос

          
Ответ

          

Управление заказом

Отмена заказа в логистике, возможна только через метод v2 для отмены заказов: в order_id передаётся трек-номер заказа, в parcelIds: id посылок, которые нужно отменить.

Статус посылки на момент отменыЧто происходит
Новый заказ (до передачи в логистику)Переходит в статус REMOVED
После отгрузки (на складе, в пути, в ПВЗ)Переходит в статус CANCELLING, затем в CANCELED

Если посылка уже передана в логистику, отмена не происходит мгновенно, система переводит её в обработку возврата. Закладывайте в свою интеграцию ожидание промежуточного статуса, а не мгновенное завершение операции.

Запрос v2: отмена посылок многоместного заказа

          

Для одноместного заказа tracking_number совпадает с id единственной посылки, поэтому в v2 в parcelIds передаётся то же значение, что и в order_id. Для многоместного (как в примере выше) это разные UUID, и в parcelIds можно передать подмножество посылок.

Успешный ответ: 204 No Content. Номер заказа (customer_order_id) после отмены повторно использовать нельзя.

Обновление данных уже созданного заказа. В URL передаётся tracking_number или customer_order_id. Конкретную посылку в массиве система находит по barcode. Какие поля доступны и до какого статуса, в таблице ниже.

ПолеОкно редактирования
recipient (ФИО, телефон)До статуса ACCEPTED_AT_POINT (приёмка на ПВЗ)
characteristic (весо-габаритные)До статуса ACCEPTED_AT_WAREHOUSE (приёмка на складе)
declared_valueДо статуса ACCEPTED_AT_WAREHOUSE (приёмка на складе). Минимум 1, в 0 поставить нельзя
parcel_paid (оплата)Смена только false → true (постоплата → предоплата). Обратно нельзя

phone_number обязателен, если в recipient передан хотя бы один параметр. Даже если меняете только имя, телефон всё равно нужно передать.

parcel_paid и billing_type: parcel_paid: true эквивалентно billing_type: already_paid, false: not_paid. Сменить можно только с постоплаты на предоплату (false → true).

Запрос

          
Ответ

          
Ошибка: попытка сменить оплату обратно

          

Если получатель не успевает забрать заказ в стандартный срок хранения на ПВЗ, можно продлить его через API. В параметре order_id передаётся трек-номер или баркод заказа, продление применяется сразу ко всем посылкам этого заказа. Продлить заказ можно только 1 раз, срок продления всегда + 5 дней.

Продление доступно, только когда все посылки заказа находятся в статусе ACCEPTED_AT_POINT (доставлены в ПВЗ). Если хотя бы одна посылка ещё в пути, запрос вернёт ошибку. Агрегированный статус заказа в этот момент: AWAITING_PICKUP.

Запрос

          

Успешный ответ: 200 OK. Новый срок хранения станет виден в поле storageEndDate при следующем запросе статуса заказа, причём у каждой посылки в заказе.

Пять методов для работы с данными заказов, от batch-проверки статусов до полной истории посылки. Все v1-методы принимают id посылки (UUID из массива parcels[].id), метод v2: tracking_number заказа. Полная статусная модель →

МетодПринимаетВозвращает
POST /api/v1/magnit-post/order-statusesid посылок (до 500)Текущий статус каждой посылки
GET /api/v1/magnit-post/orders/{id}id посылкиПолные данные одной посылки
GET /api/v1/magnit-post/ordersФильтры (customerOrderId, статус, даты)Список заказов с пагинацией
GET /api/v1/magnit-post/orders/{id}/status-historyid посылкиИстория смены статусов
GET /api/v2/magnit-post/orders/{tracking_number}tracking_number заказаЗаказ + все посылки + агрегированный статус

Для многоместного заказа tracking_number не совпадает ни с одним id посылки. Не передавайте tracking_number в v1-методы, они не вернут нужные данные.

Batch-запрос статусов посылок

POST /api/v1/magnit-post/order-statuses

          

Список заказов с фильтрами

Удобен для отладки и поиска конкретных заказов. Поддерживает фильтрацию по customerOrderId, externalOrderId, статусу, дате создания. Пагинация: page (от 1) и size (1-1000).

GET /api/v1/magnit-post/orders

          

История статусов посылки

Возвращает массив всех смен статусов с временными метками, полезно для отладки и трекинга.

GET /api/v1/magnit-post/orders/{id}/status-history

          

Данные заказа со всеми посылками (v2)

Единственный метод, который возвращает агрегированный статус заказа. Принимает tracking_number, возвращает все посылки с их id, сохраняйте их для работы с v1-методами.

GET /api/v2/magnit-post/orders/{tracking_number}

          

У партнёра есть три способа отслеживать заказ: через публичную страницу трекинга, через трек-ссылки из API или собрав длинную ссылку самостоятельно.

Публичная страница трекинга

Страница post.magnit.ru/tracking, клиент или партнёр вводит customer_order_id и 4 последние цифры номера получателя. Удобно, когда под рукой нет tracking_number.

Трек-ссылки через API

В ответе GET /api/v2/magnit-post/orders/{tracking_number} возвращаются два поля: tracking_link: короткая ссылка на отслеживание, full_tracking_link: длинная ссылка с полным tracking_number.

Сборка ссылки самостоятельно

Длинную ссылку можно собрать без запроса к API, подставьте tracking_number в шаблон:

Ссылка

          

Показывайте трек-ссылку клиенту сразу после создания заказа, статус будет обновляться автоматически по мере доставки.

Возвращает PDF-файл со всеми этикетками заказа. Параметр {order_id} в пути, это идентификатор посылки (UUID) из массива parcels[].id, который возвращается при создании заказа или через GET /api/v2/magnit-post/orders/{tracking_number}.

Для одноместного заказа tracking_number совпадает с id единственной посылки, можно передать любой из них. Для многоместного обязательно используйте id посылки, а не tracking_number заказа: они различаются, и запрос с tracking_number не вернёт корректный PDF.

Важно: для многоместного заказа достаточно одного запроса с любым id посылки из этого заказа, в ответе вернётся PDF со всеми этикетками сразу. Не нужно вызывать метод отдельно для каждого грузоместа.

Этикетка формируется не мгновенно: первые несколько минут после создания заказа метод может возвращать ошибку или пустой ответ. Реализуйте повторный запрос с задержкой (например, через 1-2 минуты), а не разовый вызов сразу после создания.

Запрос

          
Ответ

          

Возможные ошибки: 404: заказ не найден или этикетка ещё не сформирована (повторите запрос позже); 401: невалидный или истекший токен; 400: некорректный формат формат order_id.

Справочное

Только в создании заказа v2. Название компании, которое получатель видит в SMS с кодом выдачи. Полезно, если работаете под несколькими брендами.

Добавить в тело запроса создания заказа

          

Статусная модель

Статусы

Доступны детальные статусы посылки, агрегированные статусы заказа и отдельная статусная модель C2C-заказа. Детальный статус посылки доступен через v1- и v2-методы по id посылки, агрегированный статус заказа — через v2 по tracking_number. Для многоместного заказа агрегированный статус рассчитывается из комбинации статусов всех посылок.

Создание и приемка

NEW

Заказ создан

Начальный статус посылки. Присваивается сразу после создания заказа.

ACCEPTED_AT_WAREHOUSE

Принят на складе

Заказ принят на складе приёма. Первая точка касания посылки системой.

Доставка и выдача

DELIVERING_STARTED

В пути

Доставка началась. Посылка перемещается между складами или в ПВЗ.

IN_COURIER_DELIVERY

Курьерская доставка

Посылка передана курьеру для доставки до двери получателя.

ACCEPTED_AT_POINT

Готов к получению

Посылка готова к выдаче на ПВЗ.

ISSUED

ВыданТерминальный

Посылка выдана получателю.

Возврат

WAITING_RETURN

Ожидает возврата

Посылка ожидает возврата. Из этого статуса выдача ещё возможна.

RETURN_INITIATED

Возврат начат

Инициирован возврат.

RETURN_SEND_TO_WAREHOUSE

Возврат на склад

Возврат отправлен на склад.

RETURN_ACCEPTED_AT_WAREHOUSE

Возврат принят на складе

Возврат принят на складе.

RETURNED_TO_PROVIDER

Возвращён поставщикуТерминальный

Посылка возвращена поставщику.

Отмена

CANCELLING

В процессе отмены

Посылка ещё не отменена. Присваивается начиная со статуса ACCEPTED_AT_WAREHOUSE.

CANCELED

ОтменёнТерминальный

Заказ отменён после отгрузки.

REMOVED

Заказ отменёнТерминальный

Заказ отменён до отгрузки. Присваивается при отмене до приёмки на складе (ACCEPTED_AT_WAREHOUSE).

Прочее

POSSIBLY_DEFECTED

Возможен брак

Обнаружен возможный брак на складе.

Статус заказа рассчитывается по комбинации статусов всех посылок. Для многоместных заказов доступны частичные статусы (PARTIALLY_*), когда посылки находятся на разных этапах. Отображение частичных статусов настраивается на уровне партнёра командой продукта.

Создание и приемка

NEW

Заказ создан

Начальный статус. Все посылки в статусе NEW.

AT_WAREHOUSE

Принят на складе

Все посылки приняты на склад (ACCEPTED_AT_WAREHOUSE).

PARTIALLY_AT_WAREHOUSE

Частично принят на складе

Хотя бы одна посылка принята на склад, остальные — нет.

Доставка и выдача

DELIVERING

В пути

Все посылки в процессе доставки (DELIVERING_STARTED).

PARTIALLY_DELIVERING

Частично в пути

Хотя бы одна посылка в процессе доставки, остальные — нет.

IN_COURIER_DELIVERY

Курьерская доставка

Хотя бы одна посылка передана курьеру для доставки до двери получателя (ISSUED_TO_COURIER).

PARTIALLY_IN_COURIER_DELIVERY

Частично в курьерской доставке

Хотя бы одна посылка передана курьеру, остальные — нет.

AWAITING_PICKUP

Готов к получению

Все посылки доставлены в ПВЗ и ожидают клиента (ACCEPTED_AT_POINT).

PARTIALLY_AWAITING_PICKUP

Частично готов к получению

Хотя бы одна посылка в ПВЗ, остальные — нет.

DELIVERED

ВыданТерминальный

Все посылки выданы получателю (ISSUED).

PARTIALLY_DELIVERED

Частично выдан

Хотя бы одна посылка выдана, остальные — нет.

Возврат

RETURNING

Возвращается

Хотя бы одна посылка в процессе возврата (WAITING_RETURN, RETURN_INITIATED, RETURN_SEND_TO_WAREHOUSE, RETURN_ACCEPTED_AT_WAREHOUSE).

RETURNED

Возвращен поставщикуТерминальный

Все посылки возвращены отправителю (RETURNED_TO_PROVIDER).

PARTIALLY_RETURNED

Частично возвращен поставщику

Хотя бы одна посылка возвращена, остальные — нет.

Отмена

CANCELLING

Отмена заказа

Все посылки в процессе отмены. Следующий статус — RETURNING.

PARTIALLY_CANCELLING

Частичная отмена заказа

Хотя бы одна посылка в процессе отмены, остальные — нет.

CANCELED

Заказ отменёнТерминальный

Все посылки отменены после отгрузки.

PARTIALLY_CANCELED

Частично отменён

Хотя бы одна посылка отменена после отгрузки, при этом в заказе остаются посылки в других статусах.

REMOVED

Заказ отменёнТерминальный

Заказ отменён до отгрузки. Присваивается при отмене до приёмки на складе (ACCEPTED_AT_WAREHOUSE).

Технические (не используются)

FAILED

Ошибка обработки заказа

Зарезервирован на будущее. В текущей версии не используется.

UNKNOWN

Статус не определен

Зарезервирован на будущее. В текущей версии не используется.

Создание и приемка

NEW

Заказ создан

Начальный статус посылки. Присваивается сразу после создания заказа.

ACCEPTED_FROM_SENDER_AT_POINT

Принят в пункте отправления

Заказ принят в пункте отправления. Первая точка касания системой.

Доставка и выдача

DELIVERING_STARTED

В пути

Доставка началась. Посылка перемещается между складами или в ПВЗ.

ACCEPTED_AT_POINT

Готов к получению

Посылка готова к выдаче на ПВЗ.

ISSUED

ВыданТерминальный

Посылка выдана получателю.

Возврат

WAITING_RETURN

Ожидает возврата

Посылка ожидает возврата. Из этого статуса выдача ещё возможна.

RETURN_INITIATED

Возврат начат

Инициирован возврат.

RETURN_SEND_TO_WAREHOUSE

Возврат на склад

Возврат отправлен на склад.

RETURN_ACCEPTED_AT_WAREHOUSE

Возврат принят на складе

Возврат принят на складе.

RETURN_ARRIVED_TO_DESTANATION_POINT

Возврат принят в пункте отправления

Возврат принят в пункте отправления.

RETURNED_TO_PROVIDER

Возвращён поставщикуТерминальный

Посылка возвращена поставщику.

Отмена возврата

RETURN_CANCELLING

Возврат в процессе отмены

Возврат ещё не отменён.

RETURN_CANCELED

Возврат отменёнТерминальный

Возврат отменён.

Отмена

REMOVED

Заказ удалёнТерминальный

Посылки не сданы в ПВЗ в течение 5 дней при дроп оффе. Заказ удалён, требуется создать новый.

SDK и виджет

Готовые инструменты

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

  • JavaScript SDK, библиотека для работы с API Магнит Пост.
  • Виджет карты ПВЗ, готовый компонент для выбора пункта выдачи на карте. Использует тот же список ПВЗ, что и API.

Для работы виджета потребуется:

  • API-ключ Магнит Пост.
  • API-ключ Яндекс Карт.

Требования, поведение системы и типичные ошибки

Сводка фактов, которые необходимо учесть при проектировании интеграции: требования к данным, поведение системы и нюансы API, из-за которых чаще всего возникают ошибки.

Требования к данным

ID и barcode

Формат customer_order_id: 1-3 латинские буквы + номер (например AER015462324 или DO-2343423432). Кириллица блокирует создание заказа, API вернёт 400 BAD_REQUEST с сообщением customer_order_id can not contain cyrrilic letters.

Номер уникален, повторное использование невозможно, в том числе после отмены. В v2 barcode и customer_order_id проверяются независимо; barcode не должен состоять только из цифр, буквенный префикс обязателен (согласуется с менеджером). Если barcode не передан, генерируется автоматически: {customer_order_id}_1 и т.д.

Суммы: рубли vs копейки

Единственное поле в рублях: declared_value (объявленная ценность). Все остальные суммы (unit_price, delivery_cost и т.д.) в копейках. Пример в сценарии наложенного платежа →

Телефон получателя

Формат +7XXXXXXXXXX. На этот номер отправляется SMS с кодом выдачи. Несуществующий номер не блокирует создание заказа, но клиент не сможет получить посылку. Валидируйте реальность телефона на стороне вашей формы.

Список ПВЗ

Пункты выдачи открываются и закрываются. Заказ на архивный ПВЗ вернёт ошибку при создании. Не кэшируйте список ПВЗ надолго.

pup_region и pup_city

Поля pup_region и pup_city в расчёте стоимости нужно передавать точно так же, как в ответе метода /pickup-points. Например: Республика Татарстан, а не Татарстан. При несовпадении: ошибка NOT_FOUND.

Курьерская доставка: ограничения

pickup_point и courier_delivery взаимоисключающи. В режиме on_click time_slot запрещён, в on_time — обязателен.

Дроп офф: сдача в ПВЗ

Поле drop_off_available в списке ПВЗ показывает, поддерживает ли ПВЗ приём посылок. Передавайте key такого ПВЗ как drop_off_key при создании заказа. Срок сдачи — 5 дней, затем статус REMOVED. Список ПВЗ нужно актуализировать, так как флаг может меняться.

Поведение системы

Изменение через PATCH

После создания данные можно изменить методом PATCH, но каждое поле имеет своё окно: данные получателя доступны до ACCEPTED_AT_POINT, ВГХ и declared_value до ACCEPTED_AT_WAREHOUSE, оплата только false → true. Подробная таблица в сценарии PATCH →

Смена ПВЗ

Если выбранный ПВЗ закрывается после создания заказа, Магнит Пост самостоятельно переназначает новый пункт и связывается с получателем.

Этикетка

Доступна спустя несколько минут после создания заказа. Реализуйте повторный запрос с задержкой (1-2 минуты), а не разовый вызов сразу после создания.

storageEndDate

Поле появляется в ответе только когда все посылки заказа получили статус ACCEPTED_AT_POINT. Для многоместного заказа, если одна посылка ещё в пути, поле не вернётся ни по одной. Опирайтесь на наличие поля, а не на статус одной посылки.

Нюансы v1/v2 и специфичные поля

В системе два идентификатора: tracking_number (заказа) и id (посылки). Для одноместного заказа они совпадают, для многоместного: разные. v1-методы (статусы, история, этикетки, batch) принимают id посылки; v2-метод получения заказа: tracking_number. В batch-методе POST .../order-statuses в поле trackingNumbers передаются id посылок, не tracking_number заказа.

Ответ v2: поле id посылки

            
Batch-запрос: передаём id посылок

            

Поле city_from: город отправки. Принимает фиксированный набор значений, включая Краснодар и Санкт-Петербург.

Откуда отправляетеЧто передавать в city_from
Москва и Московская областьМосква
Санкт-Петербург и ЛОСанкт-Петербург
Краснодар и Краснодарский крайКраснодар
Казань, Воронеж, Екатеринбург, Ижевск, Магнитогорск, Оренбург, СаратовНазвание города
Любой другой городРегионы

Для городов из областей МСК, СПБ, Краснодара, всегда передавайте сам центр, а не название конкретного города в области. «Подольск» или «Химки» не подойдут, передавайте Москва.

Поле return_type определяет, что произойдёт с посылкой, если получатель её не забрал. Два значения:

ЗначениеЧто происходитДоп. поля
return (по умолчанию)Посылка возвращается на склад партнёраОбязательно return_warehouse_id
utilizationПосылка утилизируется, склад возврата не нужен-

Если выбран return, поле return_warehouse_id обязательно, иначе заказ не создастся. Обычно return_warehouse_id совпадает с warehouse_id, но может отличаться, если у вас отдельный склад для возвратов.

В v2 уникальность customer_order_id и barcode проверяются независимо. Убедитесь, что оба значения уникальны при каждом создании заказа.

СитуацияОтвет API
customer_order_id уже существуетorder already exists + trackingNumber
barcode уже существует, customer_order_id уникаленОшибка создания заказа, проверьте уникальность barcode

Если barcode не передаётся, система формирует его автоматически из customer_order_id.

Готовы начать интеграцию?

Оставьте заявку, и наши менеджеры помогут вам на каждом этапе, от получения тестовых ключей до перехода в продакшн.

Оставить заявку