Skip to content

Bookings & customers

This page covers everything under the bookings family of admin menus:

MenuWhat it manages
Yatra → BookingsEvery booking — list, detail page, manual create / edit, statuses
Yatra → CustomersCustomer profiles, loyalty tier, status, total spend (Pro)
Yatra → EnquiriesPre-sale enquiries from the trip page / contact form, with a respond-in-admin flow
Yatra → ReviewsTrip reviews and their moderation queue
Yatra → DiscountsPromo codes (free) and group-size discounts (Pro)

For the configuration side (cancellation policy, expiry, waitlist toggles), see Settings → Booking. For the form builder that shapes the public checkout, see Settings → Booking Form.


The Bookings list

Yatra Bookings listing — stats cards, status pills, default columns

Open Yatra → Bookings.

The page has three blocks:

  1. Stats cards (top) — four cards showing Total Bookings, Confirmed, Pending, Cancelled counts.
  2. Filter bar — search + status pills + sort + column visibility + reset.
  3. Bookings table.

Default columns

ColumnNotes
Booking #Monospace booking number, links to the detail page.
CustomerCustomer name; email shown as a subtitle.
TripTrip title (with trip ID), links to the Trip Builder.
TravelersNumber of travelers.
Booking DateWhen the booking was placed.
Travel DateWhen the trip starts.
AmountTotal, with "Paid: $X" subtitle when partially paid.
Payment StatusBadge (Paid / Pending / Partial / Refunded).
Booking StatusBadge (Confirmed / Pending / Cancelled / Completed).

Column visibility is per-browser; choices are saved to localStorage under yatra-bookings-visible-columns.

Status filter pills

  • All Status
  • Confirmed
  • Pending
  • Cancelled
  • Completed

Counts beside each pill come from getBookingStats().

The search box matches booking number, customer name, and trip title.

Sort

Sort by Booking Date (default), Travel Date, Booking Number, Customer, Trip, Amount, or Status — toggle ascending / descending.

Bulk actions

Tick rows, then pick from the dropdown:

  • Mark as Confirmed
  • Mark as Pending
  • Mark as Cancelled
  • Mark as Completed
  • Delete permanently

The available actions adapt to the current status filter — e.g. when you're already viewing "Confirmed" bookings, "Mark as Confirmed" is hidden.

+ Add New Booking

Unlike Trips (which use a modal), the Add New Booking button navigates to a full-page form at:

/wp-admin/admin.php?page=yatra&subpage=bookings&action=create

That form is documented under Edit a booking below.


Booking detail page

Booking detail page — full overview, payment breakdown, customer, travelers, sidebar

Clicking a booking row opens its detail page at:

/wp-admin/admin.php?page=yatra&subpage=bookings&action=view&id=<N>

Sections from top to bottom:

1. Booking Overview

The hero header with booking number, trip, booking date, travel date, and number of travelers. Immediately below: the Payment Summary breakdown.

Payment Summary

Line-by-line itemisation:

  • Trip Base Price (per-traveler × travelers)
  • Additional Services (Pro module line items, if any)
  • Discount (negative number, emerald-coloured)
  • Itinerary Costs (sum of per-day costs, if non-zero)
  • Taxable Amount
  • Tax (with tax-inclusive badge when applicable)
  • Net Amount
  • Amount Paid
  • Due Now

2. Customer Information

Name, email, phone, country.

3. Travelers Information

Renders per-traveler with the fields you've configured in Settings → Booking FormPer-traveler form. The first traveler gets a Lead badge. Common fields:

  • First / Last name
  • Passport number
  • Date of birth
  • Nationality
  • Any custom fields from your Booking Form Builder

4. Emergency Contact

Renders the fields you've configured in Settings → Booking Form → Emergency Contact form. Hidden when no data was collected.

5. Special Requests

The free-text notes field the customer filled in at checkout (booking.notes, exposed as special_requests in the API).

6. Google Calendar Sync PRO

Google Calendar Sync sidebar — Pro module status, last sync, event ID

Shown only when all three are true:

  • Yatra Pro is active.
  • The Google Calendar module is enabled.
  • This booking has a google_calendar payload.

Fields displayed:

  • Status badge — Synced / Failed / Not synced
  • Last synced timestamp
  • Calendar ID
  • Event ID
  • Error message (only when status = Failed)

7. Payment Information (sidebar)

  • Payment Status badge
  • Payment Method (gateway icon + name)
  • Trip Price per Person (with "Tax Incl." badge if your tax setting is inclusive)
  • Total Amount (with same tax-inclusive badge when applicable)

8. Discount Applied (conditional)

Visible only when discount_amount > 0. Shows:

  • Discount typeGroup or Coupon (auto-detected from the code string).
  • Code — monospace, on an emerald-coloured chip.
  • Savings — the discount value in big emerald text.

Shown only when all three are true:

  • Yatra Pro is active.
  • The Trip Consent module is enabled.
  • At least one consent form is required for this booking.

Fields:

  • Headline — All Consents Signed or Pending Signatures.
  • Signed count / Total required.
  • Progress bar.
  • Pending requests list (first 3, with a +N more link to the consent tab).
  • Manage Consents button.

10. Timeline

A simple two-row block:

RowValue
CreatedBooking creation timestamp.
Last UpdatedMost recent change. Hidden when identical to Created.

(There's no full activity feed in this build — just the two timestamps.)


Booking statuses

StatusBadge colourWhen it's used
PendingYellowCustomer completed checkout but payment hasn't cleared yet.
ConfirmedGreenPayment succeeded or an admin manually confirmed the booking.
CompletedBlueTravel date has passed and the trip is delivered.
CancelledRedCancelled by customer (self-cancel within policy) or admin.

The booking-edit form (BookingForm.tsx) also exposes two extra statuses that the listing doesn't filter by — Refunded and Failed.

Payment statuses

StatusBadge colourWhen it's used
PaidGreenFull balance settled.
PartialOrangeSome money received (deposit or first installment).
PendingYellowAwaiting payment.
RefundedGrayRefund processed via gateway dashboard + marked in Yatra.

Edit a booking

The + Add New Booking button (and the per-row Edit action) take you to a full-page form with these sections.

Customer Information

FieldRequiredNotes
Customer NameUsed as the lead-traveler name when no separate lead is filled in.
Customer EmailValidated against an email regex.
Customer PhoneOptional.
Country20+ countries in the dropdown. Drives tax computation if your tax setup is country-based.

Booking Details

FieldRequiredNotes
TripSearchable dropdown of every published trip.
Booking DateDefaults to today.
Travel DateCannot be in the past.
Number of TravelersDrives the price recalculation; default 1.
Total AmountAuto-calculated from trip.price × travelers + tax. Editable.
NotesFree-text; becomes Special Requests on the detail page.

The form shows a live Pricing Breakdown (Subtotal, Itinerary Costs, Tax, Total) above the Total Amount field.

Emergency Contact (conditional)

Rendered only if your Booking Form Builder has the Emergency Contact form enabled with at least one field. Fields are dynamic.

Travelers Information (conditional)

Per-traveler block — Add Traveler / Remove Traveler controls. Fields are pulled from your Per-traveler form configuration.

ControlOptions
Booking Statuspending / confirmed / cancelled / completed / refunded / failed
Payment Statuspending / partial / paid / refunded
Payment MethodLoaded from your enabled gateways.

Customers

Customers listing — loyalty tier, location, status

Open Yatra → Customers.

Default columns

ColumnNotes
CustomerName as link, email and phone shown as subtitle.
LocationCountry + city with a small map-pin icon.
BookingsPRO Booking count per customer.
Total SpentPRO Currency total.
LoyaltyTier badge — Bronze / Silver / Gold / Platinum with emoji.
StatusActive / Inactive / Blocked badge.
RegisteredAccount-creation date.

Status filter pills

  • All Status
  • Active (green)
  • Inactive (gray)
  • Blocked (red)

Bulk actions

  • Mark as Active
  • Mark as Inactive
  • Mark as Blocked
  • Delete permanently

Actions adapt to the current status filter (e.g. "Mark as Active" is hidden when viewing Active customers).

Add New Customer

Full-page form at &action=create — name, email, phone, country, address, status. Useful for back-filling pre-Yatra customers.

Loyalty tiers

Yatra computes a loyalty tier per customer based on lifetime spend / bookings. Tiers and their default thresholds are exposed via the filter yatra_loyalty_tiers — see Hooks & filters.

TierBadge
Bronze🥉 Bronze
Silver🥈 Silver
Gold🥇 Gold
Platinum💎 Platinum

Guest checkout

Customers don't need a WP account to book. With Settings → Booking → Allow Guest Checkout on, the customer record is created with status = active and no password — they receive a magic-link login email if they later want to log in. With Allow Guest Checkout off, the checkout asks the user to log in / sign up before completing payment.


Enquiries

Enquiries listing — pre-sale enquiry pipeline

Open Yatra → Enquiries. These are pre-sale leads from the public Enquire about this trip form (or the general contact form) — not bookings.

Default columns

ColumnNotes
CustomerName + email/phone subtitles.
TripTrip title — or General enquiry (italic) when not trip-specific.
MessageTwo-line clamped preview.
TravelersCount or dash.
Preferred DateThe customer-supplied travel date, if any.
StatusBadge — see below.
DateWhen the enquiry was received.

Status filter pills

  • All Status
  • New (blue)
  • Pending (orange)
  • Responded (yellow)
  • Converted (green) — the enquiry led to a booking.
  • Closed (gray)
  • Spam (red)
  • Trash (gray, strikethrough)

Bulk actions

Vary by current status filter:

Current viewAvailable actions
DefaultMark as Spam, Move to Trash, Delete permanently
SpamMove to Trash, Delete permanently
TrashDelete permanently

Respond to an enquiry

Per-row action Respond opens a modal containing:

  • The original enquiry message
  • Customer name, email, trip
  • A textarea for your response
  • Send Response button (sends an email via respondToEnquiry API)

No "Convert to Booking" button

Yatra doesn't currently expose a one-click Convert to Booking action from an Enquiry. To convert manually: open Yatra → Bookings → + Add New Booking and recreate the booking with the enquiry's details, then mark the enquiry Converted.


Reviews

Reviews listing — moderation queue with star rating

Open Yatra → Reviews.

Default columns

ColumnNotes
TripTrip title — links to the Trip Builder when trip_id exists.
CustomerName, email, Verified badge when the review comes from a confirmed booking.
Rating5 yellow / gray stars + numeric rating.
ReviewTitle + 2-line clamped content preview.
StatusBadge.
DateReview submission date.

Status filter pills

  • All Status
  • Approved (green)
  • Pending (yellow)
  • Spam (red)
  • Trash (gray)

Rating filter

A second dropdown filter: All Ratings, 5 Stars, 4 Stars, 3 Stars, 2 Stars, 1 Star.

Bulk actions

Current viewAvailable actions
DefaultMark as Approved, Mark as Pending, Mark as Spam, Move to Trash, Delete permanently
SpamMove to Trash, Delete permanently
TrashDelete permanently

Per-review moderation

Each row exposes: Approve, Mark as Pending, Edit, Mark as Spam, Move to Trash, Delete permanently.

Configuration for the entire review system (auto-approve, require-booking-to-review, minimum rating, review-reminder days) lives under Settings → Review.


Discounts (coupons)

Discounts listing — promo codes plus group discounts

Open Yatra → Discounts.

Discount modes

ModeFree / ProWhat it does
Promo Code✅ FreeCustomer types a code at checkout to get a discount.
Group OnlyPROAuto-applies when traveler count ≥ a threshold.
Promo + GroupPROA code that also stacks group-size logic on top of the base discount.

Default columns

ColumnNotes
Code / NameCode in monospace + a mode badge (Promo Code, Group Only, or Promo + Group). Copy-to-clipboard button on the right for non-group codes. Description shown as a subtitle.
DiscountPercentage or fixed amount. Group discounts also show their tiered ranges (10 travelers = 5%, 15 travelers = 10%, etc.).
UsageX / max_uses — or X / ∞ when unlimited.
Expiry DateFormatted date, or No expiry when blank.
StatusBadge — see below.

Status filter pills

  • All Status
  • Publish (green)
  • Draft (gray)
  • Trash (red)
  • Expired (orange)

Discount type filter

  • All Types
  • Percentage
  • Fixed Amount

Bulk actions

  • Mark as Publish / Draft / Trash / Expired
  • Delete permanently

Adapts to the current status filter.

Add a discount

Click + Add Discount → a modal opens with a mode picker (Promo Code / Group Only / Promo + Group). Group and combined modes show a 🔒 lock icon and a Pro-upgrade prompt without a Pro license.

After picking a mode you get the full form:

FieldRequiredNotes
Code✅ (Promo / Both)Monospace, validated unique. Auto-uppercased.
NameInternal name; not shown to customers.
DescriptionSubtitle on the listing.
TypePercentage or fixed amount.
AmountThe discount value (e.g. 15 for 15% off, or 25.00 for $25 off).
Max Discount AmountCaps a percentage discount at an absolute value.
Valid From / Expiry DateBoth optional; either or both can be left blank.
Usage LimitTotal uses across all customers. 0 = unlimited.
Usage Limit Per CustomerCaps per-customer redemptions.
Min Booking TotalDiscount only applies above this amount.
Applicable ToAll trips or Specific trips → picks Trip IDs.
First Time Customer OnlyRestrict the code to customers with zero previous bookings.

For Group and Promo + Group modes there are extra fields:

FieldNotes
Group Discount Min SizeSmallest traveler count that triggers the group discount.
Group Discount TypePercentage or fixed (per range).
Group Discount AmountThe value per range.
Group Discount ModeTotal (one rate for the whole booking) or Category-based (different rates per traveler category).
Category DiscountsPer-category tiered ranges when Category-based is picked.

Advanced Discount module

The Group and Promo+Group modes need the Advanced Discount Pro module to be active. See Modules → Advanced Discount.


Booking flow on the front end

A quick reminder of the order events fire so the admin behaviour above makes sense:

  1. Customer picks a trip → clicks Book Now.
  2. Customer fills in: lead traveler / contact info, per-traveler fields, optional emergency contact, optional notes — all driven by your Booking Form Builder.
  3. (Pro) Customer signs any required Trip Consent forms.
  4. Customer picks a payment method — Yatra runs the payment intent via the gateway (PayPal / Stripe / etc.).
  5. On success the booking moves from PendingConfirmed and a confirmation email goes out.
  6. (Pro) The booking is pushed to Google Calendar.
  7. (Pro) If Scheduled Payments is on, the balance charge is queued.
  8. Travel date passes → cron flips the booking to Completed.
  9. (Free) After Review Reminder Days (default 7), an email asks for a review.

Where to go next