Cargotime

Vizion

Переход с Vizion на Cargotime API v2: ключи доступа, запросы и обработка ответов

Руководство описывает переход с Vizion Container Tracking API на Cargotime API v2. В Vizion reference — запись отслеживания номера, а update — данные, полученные при отдельном обновлении. При переходе сохраните ID записей и нужную историю обновлений.

Общий порядок переноса номеров и настройки уведомлений приведён в порядке перехода. Полные схемы Cargotime — в справочнике API.

Аутентификация

Vizion передаёт ключ в заголовке X-API-Key. Базовый адрес Vizion — https://prod.vizionapi.com.

Для перехода на Cargotime:

  1. Создайте ключ в личном кабинете Cargotime.
  2. Замените базовый адрес на https://tracking.cargotime.ru/v2. Например, полный адрес запроса отслеживания — https://tracking.cargotime.ru/v2/tracking.
  3. Передавайте новый ключ в параметре URL api_key каждого запроса, включая пакетные задачи и управление вебхуками. Ключи и токены прежнего сервиса не подходят.

Правила использования ключа и ограничения запросов — в разделе аутентификации.

Отслеживания и идентификаторы

VizionCargotimeЧто изменить
referenceshipmentСохраните связь ID reference с новым ID отслеживания. Для управления записью используйте новый ID.
parent reference / child referencesshipment + containers[]Для коносамента или букинга обрабатывайте контейнеры внутри одного результата. Связи исходных родительских и дочерних ID сохраните у себя.
update / milestoneДанные обновления / containers[].events[]Получайте текущие данные из записи отслеживания, события перевозки из containers[].events[]. Для истории обновлений сохраняйте получаемые вебхуки.

Соответствие операций

VizionCargotimeЧто изменить
POST /referencesPOST /v2/tracking/batch → GET /v2/tracking/batchОтправьте номера, получите результат задачи и сохраните постоянный ID из data.results[].data.tracking_metadata.id.
GET /referencesGET /v2/shipments?status=ACTIVEПолучайте действующие записи постранично через page и limit. Для архива используйте отдельный запрос с status=ARCHIVED.
GET /references/{referenceId}GET /v2/shipmentsПолучите страницы списка и найдите запись по новому ID из вашей таблицы соответствий. Отдельного запроса по ID нет.
GET /references/{referenceId}/updates/v2/webhooks + сохранение снимковВыгрузите прошлые обновления из Vizion. Для будущей истории настройте вебхуки и сохраняйте каждое полученное уведомление у себя.
GET /references/last-known-positionsGET /v2/shipments?need_route=trueПолучайте route_info.current_position у сохранённого отслеживания. Историю координат Vizion сохраните отдельно.
GET /carriersGET /v2/companiesСопоставьте код Vizion со SCAC из нового справочника. Проверьте поддержку нужного типа номера в cn, bl, bk.
POST/DELETE /tags, привязка теговPATCH /v2/shipments/{id} (частично)Перенесите одну подпись до 40 символов в note. Коллекцию тегов и связи с отслеживаниями храните в своей системе.
DELETE /references/{referenceId}DELETE /v2/shipmentsПередайте новые ID в массиве shipmentIds. Проверьте правила архивации и удаления в жизненном цикле.

Параметры запроса

VizionCargotimeЧто изменить
container_id / bill_of_lading / booking_numbertracked_items[].track_number.value + typeВыберите основной номер и передайте его в track_number.value. Для контейнера укажите type: "container", коносамента — bl, букинга — bk.
carrier_code / scactracked_items[].companyНайдите соответствующий SCAC в GET /v2/companies. Не считайте внутренний код Vizion подходящим без проверки.
callback_urlPOST /v2/webhooksУберите callback_url из запроса отслеживания. Создайте вебхук отдельным POST /v2/webhooks по руководству.
tags / reference metadatanote + ваша системаПосле получения постоянного ID сохраните одну подпись в note через PATCH /v2/shipments/{id}. Остальные данные храните у себя.
pagination / filterspage / limit / statusИспользуйте page, limit и фильтр подписки status. Остальные условия отбора применяйте у себя после получения страниц.

Поля ответа

В ответе GET /v2/shipments выберите запись из data.data[]. Пути, начинающиеся с tracked_item, указаны относительно этой записи. Контейнеры находятся в tracked_item.data.data.containers[], события — в events[] каждого контейнера. В ответе GET /v2/tracking данные перевозки находятся сразу в data.

VizionCargotimeКак обработать ответ
reference.id / iddata.data[].idСохраните новый data.data[].id рядом с исходным ID Vizion. Эти ID выданы разными системами и не совпадают.
activedata.data[].statusЗамените проверку логического active на сравнение со строками ACTIVE и ARCHIVED.
last_update_statustracked_item.data.success / statusПроверяйте наличие данных по вложенным success и status. Ошибки доставки вебхука проверяйте отдельно в журнале уведомлений.
update.payload.milestones[]tracked_item.data.data.containers[].events[]Получайте события из containers[].events[]. Замените timestamp на date, description на status, а planned — на обратное значение actual.
geolocation.latitude / longituderoute_info.current_positionПолучайте координаты из массива current_position: первый элемент — широта, второй — долгота. Обработайте возможный null.
timestamp / mode_detailsroute_info.last_updated / частичноlast_updated относится к обновлению текущей позиции и может быть null. Источник позиции может отличаться от Vizion; полного объекта mode_details нет.

Примеры ответов

В каждой паре подписаны ответы прежнего сервиса и Cargotime. Большие JSON-примеры можно раскрыть отдельно от таблиц сопоставления. Это сокращённые примеры с условными данными. Над каждым JSON указан путь к показанной части ответа. Пути в следующей таблице начинаются от этой части.

Запись отслеживания, номер и статус подписки

Как сопоставить

VizionCargotimeЧто изменить
id = "33333333-3333-4333-8333-333333333333"id = "11111111-1111-4111-8111-111111111111"Свяжите исходный ID reference с новым id в своей базе. Не передавайте ID Vizion в методы управления отслеживанием.
container_id = "MSCU1234567"tracked_item.track_number = "MSCU1234567"Здесь container_id содержит номер контейнера. Получайте тот же номер из tracked_item.track_number.
active = truestatus = "ACTIVE"Вместо active=true проверяйте status: "ACTIVE". Это статус подписки, а не этап перевозки.
last_update_status = "data_received"tracked_item.data.status = "OK"Значению data_received в примере соответствует вложенный status: "OK". Состояние перевозки проверяйте отдельно в shipment_status.
carrier_code = "MSCU"tracked_item.data.data.summary.company.scacs = ["MEDU","MSCU"]Ищите MSCU в массиве scacs. В других записях сначала проверьте соответствие кода Vizion новому справочнику.
latest_update_id = "55555555-5555-4555-8555-555555555555"Нет прямого аналогаОтдельного ID обновления в текущем ответе нет. Сохраните старый latest_update_id вместе с архивом обновлений, если он нужен.

События и плановые даты перевозки

Как сопоставить

VizionCargotimeЧто изменить
payload.container_id = "MSCU1234567"containers[0].number = "MSCU1234567"Найдите контейнер по containers[].number и обрабатывайте события именно этого контейнера.
payload.milestones[0].description = "Loaded"containers[0].events[1].status = "Loaded"Текст Loaded находится в status. Для программной обработки погрузки в порту отправления используйте status_code: "CLL".
payload.milestones[0].planned = falsecontainers[0].events[1].actual = trueДля фактического события замените planned=false на actual=true.
payload.milestones[1].planned = truecontainers[0].events[0].actual = falseДля планового события замените planned=true на actual=false.
payload.milestones[0].locationlocations[0]Ищите объект места в locations по значению event.location. Не ожидайте вложенный объект внутри события.
payload.milestones[0].timestamp = "2026-10-01T04:00:00Z"containers[0].events[1].date = "2026-10-01T12:00:00"В примере 04:00 UTC соответствует 12:00 в Сингапуре. При сравнении дат учитывайте часовой пояс места, а не просто удаляйте Z.
payload.container_iso = "45G1"Нет прямого аналогаОтдельного ISO-кода оборудования нет. Сохраните 45G1 у себя, если ваша система использует этот классификатор.

В примере Vizion показано одно обновление из массива, а в примере Cargotime — текущие данные сохранённого отслеживания. Для хранения всех прошлых обновлений нужен отдельный архив.

Последняя позиция и сведения о судне

Vizion — GET /references/last-known-positions

Фрагмент: [0].

{
    "reference_id": "33333333-3333-4333-8333-333333333333",
    "container_id": "MSCU1234567",
    "timestamp": "2026-10-03T08:30:00Z",
    "mode": "Vessel",
    "mode_details": {
        "vessel": "EXAMPLE VESSEL",
        "vessel_imo": "9000003"
    },
    "geolocation": {
        "latitude": 1.25,
        "longitude": 103.75
    }
}

Cargotime — GET /v2/shipments?need_route=true

Фрагмент: data.data[0].

{
    "id": "11111111-1111-4111-8111-111111111111",
    "tracked_item": {
        "data": {
            "data": {
                "route_info": {
                    "current_position": [1.25, 103.75],
                    "last_updated": "2026-10-03T09:00:00"
                }
            }
        }
    }
}

Как сопоставить

VizionCargotimeЧто изменить
reference_id = "33333333-3333-4333-8333-333333333333"id = "11111111-1111-4111-8111-111111111111"Найдите новый ID по сохранённой связи с reference_id. Исходный ID Vizion в новом ответе не появится.
geolocationtracked_item.data.data.route_info.current_position = [1.25,103.75]Получайте точку из массива [широта, долгота], например [1.25, 103.75].
timestamp = "2026-10-03T08:30:00Z"tracked_item.data.data.route_info.last_updated = "2026-10-03T09:00:00"last_updated относится к текущей позиции нового ответа. Она может быть получена из другого источника, поэтому сохраняйте исходную метку Vizion отдельно.
mode_details.vessel_imo = "9000003"Нет прямого аналогаIMO судна отдельным полем не возвращается. Храните его у себя, если он нужен для связи с внешними данными о судах.

Что сохранить отдельно

Выгрузите нужные обновления Vizion до отключения сервиса. Для будущей истории сохраняйте входящие вебхуки у себя. Список /v2/shipments возвращает текущие данные, а журнал /v2/webhook-notifications — сведения о доставке уведомлений. Для получения существующей записи используйте список, а не повторный запуск /v2/tracking.

Обновлено