Lydira API
EN

Kılavuzlar

Webhook'lar

Üç olay, bütün rezervasyon tipleri, doğrulanacak tek imza. Bir uç kaydedin ve sormayı bırakın.

Abonelik

Abonelik iki eksende daralır. events üç olaydan hangilerini alacağınızı, entities ise hangi kayıt tiplerini seçer. Birini yazmazsanız hepsini alırsınız; bu aynı zamanda sonradan eklenen bir kayıt tipinin de sizin ucunuza düşmeye başlaması demektir. Bu sizin için önemliyse açıkça seçin.

events

  • record.created
  • record.updated
  • record.deleted

entities

  • car_rentals
  • charters
  • cruises
  • customers
  • events
  • hotel_stays
  • leads
  • operator_invoices
  • supplier_bills
  • suppliers
  • tickets
  • tour_bookings
  • tour_departures
  • transfers
  • visa_cases
curl -X POST https://YOUR-CELL.lydira.com/api/v1/webhooks \
  -H 'Authorization: Bearer sek_YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "url": "https://example.com/hooks/lydira",
  "events": ["record.created", "record.updated"],
  "entities": ["hotel_stays", "tickets"]
}'

Yayınlamak ile aktarmak aynı izin değil

Şu tipler yayın yapar ve geri okunabilir, ama gönderilemez. Birine POST atmak 422 entity_not_writable döner. Ayrıca bir kalkışın iptal edildiğini ya da dolduğunu duymanın tek yolu tour_departures aboneliğidir, çünkü bu durum o kalkışta satılmış koltukların statüsünü değiştirmez.
  • charters
  • events
  • visa_cases

Gövde

Her olay aynı dört anahtarı taşır. data, kaydı GET /api/v1/imports/{entity}/records/{external_id} ile aynı biçimde verir; kayıt bir aktarımla geldiyse sizin external_id değerinizi de içerir. record.updated her yeniden hesaplamada değil, anlamlı bir alan kıpırdadığında tetiklenir.
POST your endpoint
{
  "id": "evt_8f14e45fea2c4f339a3b",
  "event": "record.updated",
  "occurred_at": "2026-03-14T09:30:00Z",
  "data": {
    "entity": "hotel_stays",
    "external_id": "HOTEL-STAY-1001",
    "status": "confirmed"
  }
}
Her teslimattaki başlıklar
X-Lydira-Event:
X-Lydira-Delivery:
X-Lydira-Attempt:
X-Lydira-Signature:

İmza doğrulama

Dört adım. X-Lydira-Signature başlığından t ve v1 değerlerini ayırın, kayıt sırasında sakladığınız whsec_ gizli anahtarının SHA-256 hex özetini alın, . üzerinde HMAC-SHA256 hesaplayın ve v1 ile sabit zamanlı karşılaştırın. Eski bir t değerini de reddedin; yoksa yakalanmış bir teslimat daha sonra size karşı tekrar oynatılabilir.
verify.js
import crypto from "node:crypto";

const SECRET = process.env.LYDIRA_WEBHOOK_SECRET;      // whsec_…
const signingKey = crypto.createHash("sha256").update(SECRET).digest("hex");

export function verify(rawBody, header) {
  const parts = Object.fromEntries(
    header.split(",").map((pair) => pair.split("=")),
  );

  // Reject anything older than five minutes: without this, a delivery
  // captured once can be replayed at you for ever.
  const age = Math.abs(Date.now() / 1000 - Number(parts.t));
  if (!parts.t || age > 300) return false;

  const expected = crypto
    .createHmac("sha256", signingKey)
    .update(`${parts.t}.${rawBody}`)
    .digest("hex");

  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(parts.v1 ?? ""),
  );
}

Teslimat

Deneme
5 kez, üstel bekleme ile
Başarı
2xx döndüren her yanıt; geri kalanı yeniden denenir
Zaman aşımı
bağlanma 10 sn, okuma 15 sn
Hedefler
yalnız genel adresler; özel, loopback ve link-local adresler reddedilir