Tablo API
← Все статьи
19 сентября 2026 г.

API для такси-агрегаторов: как автоматизировать встречу в аэропорту

Заказ «встретить в аэропорту» — один из самых частых сценариев такси-агрегаторов, и самый чувствительный к точности данных: ранний выезд водителя — простой и лишний счётчик, поздний — недовольный пассажир с чемоданами на морозе. Оба случая решаются одним источником данных о фактическом времени прилёта вместо расписания.

Проблема: пассажир не знает код аэропорта

Пассажир указывает при заказе «встречаю рейс из Сочи, прилетаю в Москву» — но в Москве 4 аэропорта (DME, SVO, VKO, ZIA), и по одному номеру рейса не всегда очевидно, в какой конкретно. Опрашивать все четыре аэропорта отдельными запросами и на каждый настраивать свою логику — лишняя работа на стороне агрегатора.

Tablo API принимает несколько кодов через запятую в одном запросе:

curl -H "X-API-Key: YOUR_KEY" \
  "https://api.tabloapi.ru/v1/flights?airport=DME,SVO,VKO,ZIA&type=arrival&date=2026-09-20"

Или проще — фильтр по IATA-коду города, если не важно, через какой конкретно из городских аэропортов идёт рейс:

curl -H "X-API-Key: YOUR_KEY" \
  "https://api.tabloapi.ru/v1/flights?city_code=MOW&type=arrival&date=2026-09-20"

city_code=MOW — групповой IATA-код города (Москва), объединяющий все её аэропорты, а не код конкретного аэропорта. Каждый рейс в ответе также содержит city_arrival_code/city_departure_code — можно один раз сматчить рейс по городу и дальше работать с уже известным airport_code этого конкретного рейса.

Отслеживание конкретного рейса заказа

После того как рейс определён, подпишитесь на вебхук по этому конкретному номеру и дате, чтобы получить push-уведомление о посадке без опроса:

curl -X POST -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "flight_name": "SU1440",
        "airport_code": "SVO",
        "flight_date": "2026-09-20",
        "deactivate_after_hours": 3,
        "url": "https://your.app/webhook/order-9931",
        "secret": "s3cr3t"
      }' \
  "https://api.tabloapi.ru/v1/webhooks"

deactivate_after_hours: 3 отключает подписку через 3 часа после посадки — заказ к этому моменту уже закрыт, отдельно чистить подписки не нужно.

Расчёт времени выезда водителя от факта, а не от расписания

app.post('/webhook/order/:orderId', express.raw({ type: 'application/json' }), async (req, res) => {
  const sig = req.headers['x-signature'];
  const expected = crypto.createHmac('sha256', WEBHOOK_SECRET).update(req.body).digest('hex');
  if (sig !== expected) return res.status(401).end();

  const event = JSON.parse(req.body);
  if (event.new_status === 'LANDED') {
    // выезд водителя рассчитывается от фактического, а не планового времени посадки
    await scheduleDriverDispatch(req.params.orderId, { etaMinutes: 30 });
  }
  if (event.new_status === 'DELAYED') {
    await notifyDriverDelay(req.params.orderId);
  }
  res.status(200).end();
});

Пассажир получает push «водитель выезжает» через минуту после реальной посадки, а не по устаревшему расписанию — и водитель не тратит время в очереди на разгон/паркинг заранее.

Ограничение датированных вебхуков

flight_date — это UTC-календарный день, а не локальный день аэропорта вылета. Для рейсов, вылетающих в первые несколько часов после полуночи по местному времени, дата на билете и flight_date в системе могут разойтись на сутки — на практике это касается небольшой доли ночных рейсов. Для агрегатора с высоким объёмом заказов имеет смысл на своей стороне подстраховаться и запрашивать оба соседних дня, если рейс попадает в окно 00:00–03:00 по местному времени аэропорта.


Мультиаэропортовый и городской фильтр доступны на всех тарифах, датированные вебхуки — от BUSINESS. Запросить доступ к API →