Расписание в вашей системе
Рейсы с судном, номером рейса, портами отправления и назначения, датами выхода и прибытия, транзитным временем и терминалом. Фильтры по линии, судну, портам и диапазону дат.
Интеграция
Данные о контейнерных перевозках — расписание рейсов, морские линии, флот и сервисы — напрямую в вашу систему. Обычные HTTP-запросы, ответы в JSON, ключ в заголовке.
Зачем это нужно
Вместо ручной выгрузки и копирования — данные приходят в вашу систему в том виде, в каком их удобно обрабатывать.
Рейсы с судном, номером рейса, портами отправления и назначения, датами выхода и прибытия, транзитным временем и терминалом. Фильтры по линии, судну, портам и диапазону дат.
Юридическое лицо, страна регистрации, бассейны работы, направления, агенты в России с контактами и терминалами. Готовый источник для карточек контрагентов.
Суда с номером IMO, типом, вместимостью в TEU, дедвейтом, годом постройки, возрастом и флагом. Пригодится для оценки провозной способности линии на трейде.
Идентификаторы сервисов, нитки маршрутов, страны отправления и прибытия. Позволяет строить подбор вариантов доставки по нужному направлению автоматически.
Данные обновляются на нашей стороне, вы получаете их при каждом запросе. В ответе всегда есть дата последнего обновления — можно синхронизировать только то, что изменилось.
Персональный ключ, суточный лимит запросов, разграничение по разделам данных. Остаток лимита виден в каждом ответе, неожиданных отключений не бывает.
Подбор ближайших отходов по маршруту прямо в CRM, без ручного поиска по сайтам линий.
Плановые даты отгрузок в ERP: расписание подтягивается автоматически и обновляется.
Выгрузка флота и сервисов в BI для оценки провозной способности и динамики трейдов.
Готовый источник справочников линий, портов и терминалов для внутренних сервисов.
Начало работы
От заявки до первого ответа обычно проходит один рабочий день.
Напишите на service@way-bill.ru и укажите название компании, какие разделы данных нужны и примерное число запросов в сутки. Для юридических лиц подготовим договор и счёт.
Мы выдадим персональный ключ вида wb_live_…,
согласуем суточный лимит и срок действия. Ключ передаётся
один раз — храните его как пароль.
Проверьте доступ на разделе /v1/meta, затем переходите
к нужным данным. Примеры кода на четырёх языках — ниже.
Быстрый старт
Ключ передаётся в заголовке X-API-Key. Больше ничего не требуется.
curl -H "X-API-Key: ВАШ_КЛЮЧ" \
-H "Accept-Encoding: gzip" \
"https://api.way-billapi.ru/v1/schedule?line=FESCO&limit=5" import requests
BASE = "https://api.way-billapi.ru/v1"
HEADERS = {"X-API-Key": "ВАШ_КЛЮЧ"}
r = requests.get(f"{BASE}/schedule",
headers=HEADERS,
params={"line": "FESCO", "limit": 5},
timeout=20)
r.raise_for_status()
payload = r.json()
for row in payload["data"]:
print(row["vessel"], row["voyage"], row["portFrom"], "→", row["portTo"], row["etd"])
print("осталось запросов:",
payload["meta"]["quota"]["limit"] - payload["meta"]["quota"]["used"]) const BASE = "https://api.way-billapi.ru/v1";
async function schedule(params) {
const url = new URL(BASE + "/schedule");
Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));
const res = await fetch(url, { headers: { "X-API-Key": "ВАШ_КЛЮЧ" } });
if (!res.ok) {
const err = await res.json();
throw new Error(err.error.code + ": " + err.error.message);
}
return res.json();
}
schedule({ line: "FESCO", limit: 5 }).then(p => console.table(p.data)); <?php
$base = "https://api.way-billapi.ru/v1";
$url = $base . "/schedule?" . http_build_query(["line" => "FESCO", "limit" => 5]);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "gzip",
CURLOPT_HTTPHEADER => ["X-API-Key: ВАШ_КЛЮЧ"],
CURLOPT_TIMEOUT => 20,
]);
$body = curl_exec($ch);
curl_close($ch);
$payload = json_decode($body, true);
foreach ($payload["data"] as $row) {
echo $row["vessel"], " ", $row["voyage"], " ", $row["etd"], PHP_EOL;
} Справочник
Версия API — v1. Все разделы доступны только по HTTPS и только методом GET.
Полный адрес запроса складывается из базового адреса и имени раздела,
например https://api.way-billapi.ru/v1/lines.
Запросы по HTTP автоматически переводятся на HTTPS.
Ключ передаётся заголовком:
X-API-Key: wb_live_a7f3c9d2e1b48605
Поддерживается и вариант Authorization: Bearer <ключ> —
удобно, если ваш HTTP-клиент заточен под этот формат.
Запрос без ключа получит ответ 401, с неизвестным
или отозванным ключом — 403.
Успешный ответ всегда устроен одинаково: данные в data, служебная информация в meta.
{
"data": [ … ],
"meta": {
"total": 1284,
"limit": 100,
"offset": 0,
"updated": "2026-08-23",
"quota": { "limit": 5000, "used": 132 }
}
}
Поле total — сколько записей всего подошло под фильтры,
updated — дата последнего обновления данных на нашей стороне,
quota — ваш суточный лимит и текущий расход.
Постраничный обход: параметры limit (по умолчанию 100,
максимум 1000) и offset. Забирайте страницы, пока
offset + limit меньше total.
Суточный лимит закрепляется за ключом и обнуляется в полночь по UTC.
Текущий расход виден в meta.quota каждого ответа —
отдельный запрос для этого делать не нужно.
При исчерпании лимита приходит 429 с кодом
daily_limit. Если лимита стабильно не хватает,
напишите нам — увеличим.
/v1/meta Даты обновления и объёмы данных Лёгкий запрос для проверки доступа и мониторинга свежести данных. Параметров нет.
{
"data": {
"schedule": { "updated": "2026-08-23", "voyages": 1284 },
"lines": { "updated": "2026-08-17", "total": 131, "active": 70 },
"vessels": 248,
"services": 125
}
} /v1/schedule Расписание рейсов | Параметр | Тип | Описание |
|---|---|---|
line | строка | Название линии, точное совпадение |
vessel | строка | Название судна |
voyage | строка | Номер рейса |
portFrom | строка | Порт отправления, поиск по вхождению |
portTo | строка | Порт назначения, поиск по вхождению |
terminal | строка | Терминал прибытия |
etdFrom | дата | Выход не раньше, формат ГГГГ-ММ-ДД |
etdTo | дата | Выход не позже |
limit, offset | число | Постраничный обход |
GET /v1/schedule?portTo=Novorossiysk&etdFrom=2026-09-01&limit=2
{
"data": [
{
"line": "AKKON LINES", "vessel": "LIDER PERIHAN", "voyage": "2536W",
"portFrom": "Gebze", "etd": "2026-09-02",
"portTo": "Novorossiysk", "terminal": "НУТЭП",
"eta": "2026-09-06", "transit": "4"
}
],
"meta": { "total": 314, "limit": 2, "offset": 0, "updated": "2026-08-23" }
} /v1/lines Каталог морских линий | Параметр | Тип | Описание |
|---|---|---|
q | строка | Поиск по названию и юридическому лицу |
basin | строка | Бассейн: Балтийский, Азово-Черноморский, Дальневосточный, Каспийский, Арктический |
active | 1 или 0 | Только действующие или только недействующие |
limit, offset | число | Постраничный обход |
В списке отдаются краткие карточки: название, слаг, юридическое лицо, страна, бассейны, статус и статистика флота.
/v1/lines/{slug} Карточка линии целиком
Слаг берётся из поля slug в списке линий, например
/v1/lines/fesco. Возвращает описание, адрес, направления,
агентов с контактами, список сервисов и полный список судов.
Если линия не найдена — 404.
/v1/vessels Флот | Параметр | Тип | Описание |
|---|---|---|
line | строка | Флот одной линии |
imo | строка | Конкретное судно по номеру IMO |
limit, offset | число | Постраничный обход |
{
"data": [
{ "line": "FESCO", "name": "FESCO SOFIA", "imo": "9237503",
"type": "Container Ship", "teu": 2702, "dwt": 33745,
"built": "2002", "age": 24, "flag": "Russia" }
]
} /v1/services Сервисы и маршруты | Параметр | Тип | Описание |
|---|---|---|
line | строка | Сервисы одной линии |
countryFrom | строка | Страна отправления |
pod | строка | Порт прибытия |
limit, offset | число | Постраничный обход |
/v1/positions Координаты судов · по согласованию
Текущие координаты судов, скорость и курс. Раздел предоставляется
по отдельному согласованию: данные поступают от внешнего
поставщика AIS, и их передача третьим лицам регулируется
его условиями. При отключённом доступе раздел отвечает
503 с пояснением.
Ошибка приходит в том же формате, что и данные, но с ключом error:
{ "error": { "code": "daily_limit", "message": "Исчерпан суточный лимит запросов." } } | Код HTTP | code | Что случилось |
|---|---|---|
| 401 | no_key | Заголовок с ключом не передан |
| 403 | bad_key | Ключ неизвестен или отозван |
| 403 | key_expired | Срок действия ключа истёк |
| 403 | scope_denied | Ключ не даёт доступа к этому разделу |
| 404 | not_found | Неизвестный адрес или линия не найдена |
| 405 | method_not_allowed | Использован метод, отличный от GET |
| 429 | daily_limit | Исчерпан суточный лимит |
| 503 | positions_disabled | Раздел позиций не подключён |
| 500 | internal | Внутренняя ошибка, повторите запрос позже |
Accept-Encoding: gzip сокращает объём ответа примерно на 84 процента.meta.updated и не тяните одно и то же по кругу.limit=1000 экономит вызовы там, где вы всё равно обрабатываете весь массив.Вопросы
Расписание рейсов — ежедневно. Справочники линий, флота и сервисов — по мере поступления изменений от линий, обычно несколько раз в месяц. Точная дата последнего обновления каждого набора приходит в поле meta.updated.
Нет. Это обычные HTTP-запросы с одним заголовком, работают из любого языка и даже из браузерной консоли. Примеры для четырёх языков есть выше.
Да. Для каждого ключа настраивается список доступных разделов. Например, ключ может открывать только расписание — обращение к остальным вернёт 403 scope_denied.
Запросы начнут получать 429 до наступления следующих суток по UTC. Доступ не блокируется и не требует восстановления — просто дождитесь обнуления счётчика или попросите увеличить лимит.
Напишите нам — отзовём старый ключ и выдадим новый в течение рабочего дня. Отзыв действует сразу.
В пределах версии v1 мы не удаляем и не переименовываем существующие поля. Новые поля могут добавляться — пишите разбор ответа так, чтобы он их игнорировал.
Расскажите о задаче — предложим набор разделов и лимит под неё, выдадим тестовый ключ.