Skip to main content
Jinko webhook events can include the subject, recipient, content, and calendar files for each traveler email. Use this data to send booking and servicing emails in your own brand.

How it works

  1. Subscribe to the booking and servicing events you need.
  2. Read each entry in data.customer_emails.
  3. Render the content with your own templates and branding.
  4. Send the email to the address in customer_emails[].to.
You can send your emails alongside Jinko’s or ask Jinko to stop its own emails for your tenant.

Before you start

Create a webhook subscription for your tenant on the Webhooks page in the dashboard. The Webhooks guide explains endpoint registration, signature verification, retries, and replay. This page covers the email data carried by those events.

Events and the emails they carry

Seat confirmation: Jinko sends booking.completed and the flight booking confirmation email once the flight is ticketed, even if a seat is still pending. Read booked_ancillaries for each seat’s outcome. Keep the seat pending in your confirmation email until its outcome is known. See Webhooks and Seat maps.
  1. One event can carry several emails. A trip with a flight and a hotel can produce two entries in one booking.completed event.
  2. When Jinko emails are on, Jinko sends its email before the event.
  3. booking.partial carries no customer_emails because Jinko sends no email at that moment.
  4. Treat event_id as an opaque value. Retries of the same event reuse it.
  5. The Fallback column shows whether Jinko sends its email when your endpoint does not receive the event.
The webhook form in the dashboard lists every event. With a legacy person-bound key, pass the event names in events on POST /v1/webhooks.

What an event carries

Each event keeps the six envelope fields and any data it already had (see Webhooks). Its data gains one customer_emails entry per email and, when the email carries it, the manage-booking link:
The example shows only some fields of each content. The content shape of each template is a schema named after the template: for example FlightTicketingConfirmationEmailContent or HotelCancellationEmailContent. They are in the OpenAPI contract, and in the API reference under the delivery payload of GET /v1/webhooks/{id}/deliveries. A later version can add fields to content and entries to customer_emails, so ignore what you don’t use. The three new servicing.* events also carry operation_kind (cancel, void, exchange or refund) and, when known for that operation, booked_item_id, booking_ref and operation. servicing.completed keeps every field described in Webhooks. booking.failed keeps failure_reason and failure_message.
These payloads contain traveler data: names, email addresses, itineraries and ticket numbers. Jinko keeps the payload of each delivery for the delivery log and replay, and deletes it 30 days after the delivery’s last attempt or replay.

Use your own email delivery

Jinko can turn off its customer emails for one tenant. Email dev@gojinko.com with the tenant ID and environment.
  1. Per tenant and environment: sandbox and production are configured separately.
  2. All or nothing: Jinko turns off every email in the table for that tenant, except fallback emails.
  3. Tenant-key bookings only: bookings made with legacy person-bound keys keep Jinko emails.
  4. Fast activation: the change applies within about a minute, including to bookings already in progress.
  5. No webhook change: events and customer_emails stay the same.

When Jinko still sends its email

When Jinko emails are off, an event marked yes in the Fallback column still triggers a Jinko email if none of the tenant’s subscriptions receive it:
  1. No subscription includes the event.
  2. Every delivery reaches its last failed attempt after 8 attempts over about 80 minutes.
  3. The delivery outcome is still unknown 3 hours after the event.
Jinko sends a fallback email once. When any subscription received the event, Jinko sends nothing. A replay of the event after the fallback does not withdraw the email Jinko already sent. booking.processing has no fallback: with emails off, Jinko does not send the payment-authorized email.

Handle delivery issues

Every delivery attempt is recorded. Use the delivery log to inspect failures and replay an event.
  1. Dashboard: open Webhooks in the dashboard, select the webhook, then open Deliveries.
  2. API with a legacy person-bound key: GET /v1/webhooks/{id}/deliveries lists deliveries. POST /v1/webhooks/{id}/deliveries/{delivery_id}/replay replays one.
A replay sends the same event again: same event_id, same payload, signed with a new X-Jinko-Timestamp. It starts a fresh set of attempts and adds one to the delivery’s replay_count. Replay is accepted for a delivered or exhausted delivery. It is refused with delivery_in_progress while the delivery is pending or failed, and with payload_purged once its payload has been deleted, 30 days after the delivery’s last attempt or replay. Because a replay keeps the event_id, a receiver that deduplicates on X-Jinko-Event-Id treats it as the event it already processed, if it did.