Интеграция по API
Сценарии, статусы, нюансы и готовый код — от первого запроса до продакшена
Открыть Swagger-документациюСпособ интеграции
Два варианта подключения
Вариант 1
Готовый модуль
- Когда подходит: нет собственной разработки, стандартная CMS/CRM
- Что получаете: прямой доступ к боевому стенду без тестового контура
Вариант 2
Собственная разработка
- Когда подходит: нестандартная логика, своя ERP/CRM, маркетплейс
- Что получаете: ключи тестового контура, ключи боевого API, Swagger-документацию, менеджера интеграции
Платформы
Поддерживаемые CMS и CRM
Модули сделаны сторонними разработчиками. Есть как платные и бесплатные. Подробнее по ссылке.
Подключение
Заявка на подключение
Назначение менеджера интеграции
Выдача ключей
Для собственной разработки: тестовый контур + боевой API. Для готового модуля: прямой доступ к боевому стенду.
Переход в продакшн
Возможности 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 заказа.
- Номер заказа в системе Магнит Пост, задаётся партнёром
- Уникальный, переиспользовать нельзя (даже после отмены)
- Латиница + цифры
- Если не передан, генерируется по шаблону
MP-1785482222532 - Основа для
barcode, если не передан
- Идентификатор заказа во внешней системе партнёра
- Магнит Пост с ним не работает и не валидирует
- Нужен для маппинга с
customer_order_id
- Штрих-код на этикетке, сканируется на складе
- Должен быть уникальным, переиспользовать нельзя
- Если не передан, генерируется автоматически
- Одноместный: совпадает с
customer_order_id - Многоместный:
customer_order_id_1,customer_order_id_2…
- Трек-номер заказа (UUID)
- Для v2-методов: получение заказа, отмена, продление хранения
- Внутренний UUID из
parcels[].id - Для v1-методов: статусы, история, этикетки
- Для многоместного заказа у каждой посылки свой
id, отличный отtracking_number
Рекомендация: для одноместного заказа barcode должен совпадать с customer_order_id. Так проще отслеживать соответствие и исключить путаницу при приёмке на складе и при выдаче на ПВЗ.
Сценарии · 17
Сценарии интеграции
Готовые примеры запросов с пояснениями нюансов, можно копировать как заготовку.
Начало работы
Получение Bearer-токена. Токен живёт ~1 час (expires_in в секундах), обновляйте по расписанию, не запрашивайте перед каждым вызовом. Параметры передаются как application/x-www-form-urlencoded, grant_type — client_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 не влияет на ранее созданные заказы, они сохраняют данные склада на момент создания. Новые заказы будут использовать обновлённые данные.
Создание склада
Получение списка складов
Возвращает список пунктов выдачи с пагинацией. Из ответа нужно сохранить 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 — доставка по указанному адресу невозможна.
Создание заказа
Базовый сценарий создания заказа без наложенного платежа: товар уже оплачен, либо оплата не требуется через платформу. Метод подходит как для одноместных, так и для многоместных отправлений, для нескольких грузомест просто передайте несколько объектов в массиве 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.
В ответе на создание заказа блок 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 |
Если посылка уже передана в логистику, отмена не происходит мгновенно, система переводит её в обработку возврата. Закладывайте в свою интеграцию ожидание промежуточного статуса, а не мгновенное завершение операции.
Для одноместного заказа 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-statuses | id посылок (до 500) | Текущий статус каждой посылки |
GET /api/v1/magnit-post/orders/{id} | id посылки | Полные данные одной посылки |
GET /api/v1/magnit-post/orders | Фильтры (customerOrderId, статус, даты) | Список заказов с пагинацией |
GET /api/v1/magnit-post/orders/{id}/status-history | id посылки | История смены статусов |
GET /api/v2/magnit-post/orders/{tracking_number} | tracking_number заказа | Заказ + все посылки + агрегированный статус |
Для многоместного заказа tracking_number не совпадает ни с одним id посылки. Не передавайте tracking_number в v1-методы, они не вернут нужные данные.
Batch-запрос статусов посылок
Список заказов с фильтрами
Удобен для отладки и поиска конкретных заказов. Поддерживает фильтрацию по customerOrderId, externalOrderId, статусу, дате создания. Пагинация: page (от 1) и size (1-1000).
История статусов посылки
Возвращает массив всех смен статусов с временными метками, полезно для отладки и трекинга.
Данные заказа со всеми посылками (v2)
Единственный метод, который возвращает агрегированный статус заказа. Принимает tracking_number, возвращает все посылки с их id, сохраняйте их для работы с v1-методами.
У партнёра есть три способа отслеживать заказ: через публичную страницу трекинга, через трек-ссылки из 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. Для многоместного заказа агрегированный статус рассчитывается из комбинации статусов всех посылок.
Создание и приемка
Заказ создан
Начальный статус посылки. Присваивается сразу после создания заказа.
Принят на складе
Заказ принят на складе приёма. Первая точка касания посылки системой.
Доставка и выдача
В пути
Доставка началась. Посылка перемещается между складами или в ПВЗ.
Курьерская доставка
Посылка передана курьеру для доставки до двери получателя.
Готов к получению
Посылка готова к выдаче на ПВЗ.
ВыданТерминальный
Посылка выдана получателю.
Возврат
Ожидает возврата
Посылка ожидает возврата. Из этого статуса выдача ещё возможна.
Возврат начат
Инициирован возврат.
Возврат на склад
Возврат отправлен на склад.
Возврат принят на складе
Возврат принят на складе.
Возвращён поставщикуТерминальный
Посылка возвращена поставщику.
Отмена
В процессе отмены
Посылка ещё не отменена. Присваивается начиная со статуса ACCEPTED_AT_WAREHOUSE.
ОтменёнТерминальный
Заказ отменён после отгрузки.
Заказ отменёнТерминальный
Заказ отменён до отгрузки. Присваивается при отмене до приёмки на складе (ACCEPTED_AT_WAREHOUSE).
Прочее
Возможен брак
Обнаружен возможный брак на складе.
Статус заказа рассчитывается по комбинации статусов всех посылок. Для многоместных заказов доступны частичные статусы (PARTIALLY_*), когда посылки находятся на разных этапах. Отображение частичных статусов настраивается на уровне партнёра командой продукта.
Создание и приемка
Заказ создан
Начальный статус. Все посылки в статусе NEW.
Принят на складе
Все посылки приняты на склад (ACCEPTED_AT_WAREHOUSE).
Частично принят на складе
Хотя бы одна посылка принята на склад, остальные — нет.
Доставка и выдача
В пути
Все посылки в процессе доставки (DELIVERING_STARTED).
Частично в пути
Хотя бы одна посылка в процессе доставки, остальные — нет.
Курьерская доставка
Хотя бы одна посылка передана курьеру для доставки до двери получателя (ISSUED_TO_COURIER).
Частично в курьерской доставке
Хотя бы одна посылка передана курьеру, остальные — нет.
Готов к получению
Все посылки доставлены в ПВЗ и ожидают клиента (ACCEPTED_AT_POINT).
Частично готов к получению
Хотя бы одна посылка в ПВЗ, остальные — нет.
ВыданТерминальный
Все посылки выданы получателю (ISSUED).
Частично выдан
Хотя бы одна посылка выдана, остальные — нет.
Возврат
Возвращается
Хотя бы одна посылка в процессе возврата (WAITING_RETURN, RETURN_INITIATED, RETURN_SEND_TO_WAREHOUSE, RETURN_ACCEPTED_AT_WAREHOUSE).
Возвращен поставщикуТерминальный
Все посылки возвращены отправителю (RETURNED_TO_PROVIDER).
Частично возвращен поставщику
Хотя бы одна посылка возвращена, остальные — нет.
Отмена
Отмена заказа
Все посылки в процессе отмены. Следующий статус — RETURNING.
Частичная отмена заказа
Хотя бы одна посылка в процессе отмены, остальные — нет.
Заказ отменёнТерминальный
Все посылки отменены после отгрузки.
Частично отменён
Хотя бы одна посылка отменена после отгрузки, при этом в заказе остаются посылки в других статусах.
Заказ отменёнТерминальный
Заказ отменён до отгрузки. Присваивается при отмене до приёмки на складе (ACCEPTED_AT_WAREHOUSE).
Технические (не используются)
Ошибка обработки заказа
Зарезервирован на будущее. В текущей версии не используется.
Статус не определен
Зарезервирован на будущее. В текущей версии не используется.
Создание и приемка
Заказ создан
Начальный статус посылки. Присваивается сразу после создания заказа.
Принят в пункте отправления
Заказ принят в пункте отправления. Первая точка касания системой.
Доставка и выдача
В пути
Доставка началась. Посылка перемещается между складами или в ПВЗ.
Готов к получению
Посылка готова к выдаче на ПВЗ.
ВыданТерминальный
Посылка выдана получателю.
Возврат
Ожидает возврата
Посылка ожидает возврата. Из этого статуса выдача ещё возможна.
Возврат начат
Инициирован возврат.
Возврат на склад
Возврат отправлен на склад.
Возврат принят на складе
Возврат принят на складе.
Возврат принят в пункте отправления
Возврат принят в пункте отправления.
Возвращён поставщикуТерминальный
Посылка возвращена поставщику.
Отмена возврата
Возврат в процессе отмены
Возврат ещё не отменён.
Возврат отменёнТерминальный
Возврат отменён.
Отмена
Заказ удалёнТерминальный
Посылки не сданы в ПВЗ в течение 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 заказа.
Поле 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.
Готовы начать интеграцию?
Оставьте заявку, и наши менеджеры помогут вам на каждом этапе, от получения тестовых ключей до перехода в продакшн.