Webhooks

Register a HTTPS URL and RYNT will POST a signed JSON event to it whenever something happens. Delivery is at-least-once with retries and a dead-letter after repeated failures — always dedupe on the body id.

Register an endpoint

curl -X POST .../webhooks \
  -H "Authorization: Bearer pk_test_…" -H "Content-Type: application/json" \
  -d '{"url":"https://your-system.example/rynt","events":["*"]}'

The response returns a secret (shown once) used to verify signatures. Use ["*"] for all events, or list specific ones.

Manage and debug:

  • GET /webhooks — list your endpoints (secret never returned)
  • GET /webhooks/deliveries — recent deliveries with status, attempts, last error
  • DELETE /webhooks/{id} — remove an endpoint

Events

EventFires when
booking.createdA new booking lands on RYNT
booking.approved / booking.rejectedA request-to-book is decided
booking.cancelled / booking.completedLifecycle end states
booking.pickup_confirmed / booking.return_confirmedCheck-in / check-out
booking.payment_updatedPayment status changed
availability.conflict / conflict.resolvedDouble-booking opened / cleared

Payload

{
  "id": "evt_…",
  "event": "booking.created",
  "created_at": "2026-08-17T12:40:20.838Z",
  "data": {
    "rynt_booking_id": "…",
    "vehicle": { "external_ref": "CAR-1" },
    "amount": 4536,
    "currency": "AED"
  }
}

Delivery headers: X-RYNT-Event, X-RYNT-Delivery (matches the body id), and X-RYNT-Signature (see Verifying signatures).

📘

Missed a delivery?

If your endpoint was down, poll GET /bookings?updated_since=… to reconcile — you never lose data.


Did this page help you?