Yatra – Travel Booking & Tour Operator Software
Description
βοΈ Yatra is the WordPress travel booking plugin built for tour operators, activity providers, travel agencies and adventure businesses that need real trip inventory β not a generic shop. The free version is a full booking office: trips, availability, checkout, customer records, transactional emails and a customer account area. Yatra Pro unlocks premium payment gateways plus a suite of 20 Pro modules you switch on as your business grows β from Channel Manager (Viator + GetYourGuide) to AI Assistant, White Label and WhatsApp Notifications.
Official site: π wpyatra.com Β· π docs.wpyatra.com Β· π³ Pricing Β· β¨ All features Β· π― Live demo Β· π¬ Support forum
π¬ See Yatra in action
π₯ Watch Yatra in 60 seconds on YouTube β the complete tour booking system, from building a trip to getting paid. More tutorials on the MantraBrain YouTube channel.
βοΈ Why tour operators pick Yatra
- πΊοΈ Travel-first data model β Departures, capacity, traveler types and itineraries match how tours are actually sold, not how an e-commerce shop sells products.
- π§ One admin workspace β Modern Yatra dashboard inside wp-admin; less tab-hopping than bolting travel onto a generic commerce stack.
- βοΈ Honest Free vs Pro β Core booking, CRM-style records, reviews and PayPal / Pay Later are in the free plugin. Card gateways and advanced modules are in Pro β no surprise paywalls on basics.
- π Your site, your data β Bookings and customer data stay in your WordPress database; payments go through the gateways you configure. No proxy, no markup, no per-booking fee.
- β 700+ active installs Β· β 4.6 / 5 on WordPress.org β Active development since 2018, weekly updates.
π What you get in the free Yatra plugin
Trips and catalog (free)
- Trips & Itineraries β unlimited trips with rich descriptions, gallery, difficulty, duration, meeting points, included / excluded lists, day-by-day itinerary builder, per-trip FAQs and custom attributes
- Departures & Availability β scheduled departures, capacity, recurring availability rules
- Customer Accounts β booking history, payments, profile, and document access (invoices, vouchers, itineraries)
- Reviews & Ratings β moderation and trip-level display
- Sales Reports β admin reports for bookings, revenue, and trends
- Discounts & Coupons β sale and regular pricing, traveler-based pricing, coupon engine
- Enquiries Inbox β capture pre-booking questions per trip
- PDF Documents β generated invoices, vouchers, traveler itineraries
- Transactional Emails β booking confirmation, payment receipt, cancellation, reminder
Free payment gateways
- PayPal β cards, PayPal balance, Pay-in-4
- Pay Later β book now, confirm or pay offline (ideal for bank transfer, cash on arrival, invoice workflows)
Front-end + extensibility
- Templates for trip listings, single trip, booking flow, checkout, and account
- 4 Gutenberg blocks + 8 shortcodes to place trips, search, login and account on any page
- Compatible with most well-coded block themes, classic themes and major page builders
- PHP 7.4 or newer, structured codebase, hooks and filters, template overrides
- REST-oriented flows for booking and account experiences
π Yatra Pro β 20 modules across 3 tiers
Compare plans and buy Yatra Pro β three plans (Starter Β· Growth Β· Scale), each available yearly or lifetime.
Starter β $99/yr (sale, regular $149) Β· 1 site license Β· everything below included
- Dynamic Pricing β seasonality, demand, early bird, last-minute, inventory rules
- Flexible Payments β deposits and partial payments
- Scheduled Payments β instalment plans
- Advanced Discount β group-style discounts alongside coupons
- Additional Services β sell extras with the trip
- Email Automation β multi-step sequences, audience filters, per-send delivery logs
- Abandoned Booking Recovery β recover incomplete bookings
- Mailchimp Integration β sync travelers + bookings to lists
- Facebook Pixel β server-side + browser events
- Google Analytics 4 Enhanced β booking funnel + revenue events
- Google Calendar sync β departures and bookings into Google Calendar
- Custom Landing Pages β per-trip conversion-focused landing pages
- Dynamic Form Field β drag-and-drop custom booking questions
- Trip Consent β digital waivers and signatures
- Premium payment gateways: Stripe Β· Razorpay Β· Mollie Β· Paystack Β· Square Β· Authorize.Net Β· Bank Transfer
Growth β $149/yr (sale, regular $199) Β· 1 site license Β· everything in Starter, plus
- AI Assistant β generate itineraries, draft descriptions, suggest replies (bring your own OpenAI or Anthropic key)
- WhatsApp Notifications β booking confirmations, payment receipts and departure reminders over WhatsApp (Meta Cloud API)
Scale β from $349/yr (sale) Β· 1-site $349/yr (regular $449) or 15-site $599/yr (regular $749) Β· everything in Growth, plus
- Channel Manager β sell on Viator + GetYourGuide from one WordPress dashboard. Signed webhooks, anti-overbooking locks, real-time inventory sync.
- White Label β rebrand the admin, emails, PDFs and frontend. Full agency theming.
- Team & Access β granular roles + capability-based access for multi-staff agencies. 8 built-in roles, custom role builder, magic-link invitations, time-windowed access for contractors, scope filtering (per-destination / per-trip), append-only audit log. Defense-in-depth: every action gated on the server, UI mirrors via cap-aware controls.
- Webhooks β outbound HTTP delivery on booking / payment / customer events. HMAC-signed payloads, retry queue with exponential backoff, dead-letter queue, certificate pinning. Wire Yatra into Zapier, Make, n8n, or your own internal systems.
Lifetime plans also available: Starter $499 Β· Growth $699 Β· Scale $1,299 (1 site) / $1,999 (15 sites) β pay once, own it forever.
See full plan comparison and pricing
π₯ How Yatra compares
Considering Yatra against a SaaS booking platform or another WordPress travel plugin? We’ve written honest, side-by-side comparisons against each major alternative:
- π Yatra vs Rezdy β Sell on Viator + GetYourGuide without the $99β$499 / month Rezdy SaaS bill. Lifetime license Β· GPL Β· your data, your gateway.
- π Yatra vs Bokun β Skip the per-OTA-booking fee Bokun charges (typically 2.5% per booking). Independent open-source alternative to Tripadvisor-owned Bokun.
- π Yatra vs WP Travel Engine β Same WordPress philosophy, modern architecture, broader Pro modules. Custom database tables for performance vs. WP Travel Engine’s custom post types.
Each page covers the feature matrix, pricing math, migration steps and FAQ β written without overpromising. Read the verdict, then try Yatra Pro free before you commit.
π Native integrations
Yatra ships with bring-your-own-credential integrations β no proxy, no markup, no per-event fees. Full directory: All integrations on wpyatra.com.
- Payments: PayPal Β· Pay Later Β· Stripe Β· Razorpay Β· Mollie Β· Paystack Β· Square Β· Authorize.Net Β· Bank Transfer
- OTAs: Viator Β· GetYourGuide Β· Other OTAs (by request)
- Email & Messaging: Mailchimp Β· WhatsApp Cloud API
- Analytics & Marketing: Google Analytics 4 Β· Meta / Facebook Pixel
- Calendars & Scheduling: Google Calendar
- AI Providers: OpenAI Β· Anthropic Claude
- WordPress Ecosystem: Gutenberg blocks (4 native) Β· Elementor (via Shortcode) Β· WooCommerce (coexistence) Β· Loco Translate
π Built-in travel SEO
Yatra is built to rank β your trips, destinations and activities are search-engine ready out of the box, with no extra SEO plugin required:
- π§± Schema.org structured data β automatic structured markup for trips and listing pages so search engines can surface rich results for your tours.
- π·οΈ Meta titles, descriptions & Open Graph / Twitter cards β per-trip and per-archive, with
{name}-style tokens, for clean search snippets and shareable social previews. - πΊοΈ XML sitemap β Yatra publishes one sitemap of every trip, destination, activity and category at
/yatra-sitemap.xml, advertised inrobots.txtand integrated automatically with WordPress core, Yoast, Rank Math and All in One SEO sitemaps. (Yatra stores content in fast custom tables, so this is what keeps it fully discoverable.) - π Clean, keyword-friendly permalinks β
/trip/β¦,/destination/β¦,/activity/β¦URL bases you control under Settings. - π Translation-ready interface β every label, button and email is translatable with standard
.po/.mofiles via Loco Translate, WPML String Translation or Polylang string translation.
π§© Blocks and shortcodes
Use the block editor or classic shortcodes to drop catalog widgets, search and account UI into any page.
Blocks (search the inserter for “Yatra” or the block name):
- Trip β block name
yatra/tour(trip grid; the registered name staysyatra/tourfor backward compatibility, but the inserter title and UI now read Trip). Trip Settings (layout, Featured Priority β restrict to Featured, New, or Limited Time picked on the trip form’s Categorization Featured Priority) and Filters: each taxonomy (destinations, activities, trip categories, difficulty / fitness level) supports Listing scope β either All published (no ID filter saved) or Only selected, with search plus checkboxes to pick numeric classification IDs. - Activity β
yatra/activity: same taxonomy picker pattern (All published vs search + IDs) in the sidebar; matches[yatra_activity]ID rules. - Destination β
yatra/destination: same pattern; matches[yatra_destination]ID rules. - Trip categories β
yatra/trip-category(same card layout as destinations; links use your trip category base from Settings).
Shortcodes (all accept string values as in the plugin defaults β use yes / no or 0 / 1 where noted):
[yatra_trip]β Trip listing. Alias:[yatra_tour]. Filters:destination,activity,categoryaccept comma-separated classification IDs. Optional:order,featured_priority(featured/new/limited),per_page,difficulty,price_min,price_max,duration_min,duration_max,search,columns,show_pagination,title,card_layout. Pagination:trip_page. Examples:[yatra_trip],[yatra_trip destination="44" activity="12"],[yatra_trip featured_priority="new" per_page="6"],[yatra_trip card_layout="compact_all"].[yatra_activity]β Activity listing cards.[yatra_destination]β Destination showcase.[yatra_trip_category]β Trip category cards.[yatra_search]β Advanced trip search form. Per-field visibility attributes βkeyword,destination,activities,duration,budgetβ eachyes/no. Omit one to inherit its Settings Search & Listing toggle; pass a value to force it on/off for that placement. Example:[yatra_search budget="no" duration="no"]. (The built-in listing page sets these automatically from your settings.)[yatra_login]β Customer login form.[yatra_my_account]β Account dashboard for logged-in users.[yatra_discount_and_deals]β Discounted trips.
Empty-term filtering (hide_empty): [yatra_destination], [yatra_activity] and [yatra_trip_category] accept hide_empty="yes" to skip taxonomy terms that have zero published trips. Opt-in (default no).
Card layout (card_layout): [yatra_trip] / [yatra_tour] and [yatra_discount_and_deals] accept card_layout to set how the trip cards look for that one listing, overriding the site-wide Settings Design Listing Card Layout default. Values: inherit (default β follow the site setting), standard (full card), compact_mobile (compact horizontal cards on phones only, unchanged on desktop), compact_all (compact everywhere). The compact card shows image, title, price and a View Details button. Each listing is independent, so different listings on the same page can use different layouts. Example: [yatra_trip per_page="6" card_layout="compact_all"]. The Trip block offers the same choice under Trip Settings Card layout.
Note: If you’re migrating from an older build, [yatra_cart], [yatra_checkout] and [yatra_mini_cart] are no longer registered β checkout and the booking flow now use Yatra’s own front-end routes and templates. See docs.wpyatra.com for full shortcode reference, URLs and page setup.
π¨ Compatible WordPress travel themes
Yatra works with most well-coded block themes, classic themes and major page builders. Recommended themes (optional β Yatra works with any theme):
- π§³ Resa β the official Yatra travel theme β Lighthouse-fast, mobile-first, Gutenberg + WooCommerce ready, free on the WordPress.org theme directory. Trip card grid, departure widgets, traveler-account dashboard all pre-styled for Yatra.
- π§± Blocksy β modern block theme
- β‘ Kadence β fast, flexible theme
π Quick links
- π wpyatra.com β official site
- π³ Pricing β Starter Β· Growth Β· Scale Β· Lifetime plans
- β¨ All features β full Free + Pro capability list
- π Integrations β every native partner
- π₯ Yatra vs alternatives β head-to-head comparisons
- π¨ WordPress travel theme (Resa) β recommended pairing
- π Documentation β installation, blocks, shortcodes, operations
- π― Live demo β see Yatra on a real WordPress demo
- π Support / contact β help and commercial support routing
π Join the community
- β Rate Yatra five stars β helps other tour operators find the plugin
- π¬ Facebook community β connect with other Yatra users
- π§ Email support β direct email for product questions
- π GitHub β issues & contributions β bug reports and pull requests
π Try Yatra risk-free
- π§ͺ Try the free Yatra plugin in WordPress Playground β spin up a temporary WordPress site with the free Yatra plugin pre-installed. No local setup, no signup, no credit card.
- π Try Yatra Pro free β full Pro trial environment with every module enabled. No credit card required.
- π° 14-day refund on every paid Yatra Pro plan β see the pricing page for the refund window terms.
Additional Information
Privacy
Booking and customer data are stored in your WordPress database. Payment processing is performed by the gateways you enable; review each provider’s privacy and PCI documentation. Yatra does not ship customer data to an external SaaS.
Credits
Yatra is developed by MantraBrain. Third-party libraries include components such as React (admin UI), Vite, TanStack Query, and others as shipped in the plugin package.
Contributing
Issues and contributions: GitHub β Yatra
If Yatra helps your business, a β five-star review on WordPress.org and considering π Yatra Pro when you need paid features both help sustain development. Thank you for using Yatra.
Installation
π οΈ Quick setup
- Install and activate Yatra from this screen or upload the ZIP under Plugins Add New Upload.
- Complete the setup wizard (currency, basics, permalinks as prompted).
- Add destinations and activities, then create your first trip under Yatra Trips.
- Configure PayPal and/or Pay Later under Yatra payment settings (free). Add Yatra Pro when you need card gateways or Pro modules.
- Place the booking experience on your site using Yatra templates, blocks, or shortcodes (see π§© Blocks and shortcodes in the description above and docs.wpyatra.com).
Screenshots

Trip pages that sell themselves β gallery, duration, season and a sticky “Book Now” price button on any theme

Book in a few taps, no redirects β live departure availability, traveller count and enquiry, all inline

Your whole operation at a glance β bookings, revenue and upcoming departures the moment you log in

Every trip in one organised list β search, filter by status, and see pricing, type and availability instantly

Build a complete trip in one place β basics, pricing, itinerary, media and SEO, guided step by step

Never lose track of a reservation β filter by traveller, payment state and status across every departure

Full booking detail, one-click invoice β payment summary, traveller records and a downloadable invoice

Every transaction accounted for β Stripe, PayPal, bank transfer and manual payments in one ledger

Run offers without spreadsheets β coupon codes with usage limits, expiry dates and live status
Faq
What is the best WordPress travel booking plugin for tour operators?
Yatra is the WordPress travel booking plugin built around the operational reality of selling tours β scheduled departures, capacity, traveler categories, OTA distribution, dynamic pricing and deposit handling. The free plugin covers the entire booking lifecycle (trips, availability, customer accounts, reviews, reports, PDFs, transactional emails, PayPal + Pay Later); Yatra Pro adds 20 modules across Starter, Growth and Scale tiers. Read the head-to-head comparison vs WP Travel Engine or vs Rezdy SaaS.
Is Yatra free?
Yes. The plugin on WordPress.org is free and includes the core booking stack for many tour operators. Yatra Pro is a paid upgrade for premium gateways and 20 Pro modules.
Do I need code skills to use Yatra?
No for day-to-day operation. Developers can override templates and use hooks for custom workflows.
Which payments are free vs Pro?
Free: PayPal and Pay Later. Pro: Stripe, Razorpay, Mollie, Paystack, Square, Authorize.Net, bank transfer (as supported for your account and region).
Can I take bookings without charging a card immediately?
Yes. Use Pay Later for offline confirmation, invoices, or pay-on-arrival flows.
Can I distribute my tours on Viator, GetYourGuide and other OTAs?
Yes β the Channel Manager module (Scale tier) connects Yatra directly to Viator and GetYourGuide via their official APIs. Signed webhooks pull bookings back in real time; anti-overbooking locks prevent two channels selling the same seat. Other OTAs (Klook, TripAdvisor Experiences, Booking.com Experiences, Airbnb Experiences) are available by request.
Does Yatra work with WooCommerce?
Yes. Yatra runs alongside WooCommerce on the same WordPress site β Yatra stores trips in its own custom tables while WooCommerce uses WordPress orders. Both coexist without data conflicts. Many operators use Yatra for tours and WooCommerce for merchandise or gift cards.
Does Yatra support multilingual and multi-currency travel sites?
Interface β yes. Yatra is fully translation-ready: every label, button and email translates via standard POT / .po / .mo files using Loco Translate, WPML String Translation or Polylang string translation. RTL stylesheets ship in the Resa travel theme.
Trip content β important to know. Yatra stores trips and destinations in its own fast custom tables (not WordPress posts), so WPML and Polylang β which translate posts and taxonomies β cannot translate the trip content itself. For a fully multilingual catalogue today, run one site per language (WordPress Multisite, a subsite per language). Native per-language content translation is on our roadmap.
Currency. Set your default currency in Yatra Settings (site-level).
Does Yatra work with my theme?
It works with most modern WordPress themes. Yatra ships front-end templates; your theme controls global layout and typography. For the smoothest pairing, see Resa β the dedicated Yatra travel theme by MantraBrain, free on WordPress.org.
Are invoices and vouchers only in Pro?
Travelers can access invoices, vouchers and itineraries from the account area on the free plugin when your site is configured for it. Pro expands payment choices and business modules β it does not remove core documents by default.
How do saved trips / wishlist work?
Saved trips appear when Yatra Pro is active and wishlist is enabled in Yatra settings.
Is Yatra GDPR-friendly?
Use WordPress privacy tools together with Yatra: export or delete user-related data as required by your policy. Bookings and customer data live in your own WordPress database β Yatra does not ship data to an external SaaS. Payment data is handled by your chosen gateways under their terms.
Where is documentation?
See docs.wpyatra.com and wpyatra.com for features, Pro and updates.
Where are shortcodes and blocks documented?
See π§© Blocks and shortcodes in the description above. Full walkthroughs (pages, permalinks, checkout URLs) are in the documentation.
Does Yatra provide cart or checkout shortcodes?
No. Checkout and the booking flow run on Yatra’s own front-end routes and templates β drop them on any page via the plugin’s pretty permalinks (see the Permalink settings). Catalog, search, login and account still have shortcodes and blocks as listed in the description.
What does Yatra Pro cost?
Pricing starts at $99/yr (Starter, sale) and goes up to $599/yr (Scale 15-site, sale). Lifetime plans available from $499 one-time. Every Pro tier includes a 14-day refund window. See the full pricing breakdown.
Reviews
Great plugin, responsive support and active development
By vistatours on September 2, 2026
No tool or software is perfect from the very beginning, and Yatra is no exception. But for me, what really matters is how a developer responds when issues, bugs or suggestions come up.
During my time using Yatra, I have reported several bugs and shared feedback about things that could be improved. The team has always responded quickly, taken my reports seriously and worked on solutions in a very timely manner.
What I particularly appreciate is that I no longer feel like I am simply using a finished product and reporting problems from the outside. There is a real sense of actively working together to improve the product, and that my feedback as an actual user is heard and valued.
Yatra already provides the functionality I need for managing tours and bookings for Vista-Tours, and seeing the plugin continue to improve through this kind of communication gives me a lot of confidence in its future.
For me, good software is not software that never has a bug. It is software with developers behind it who listen, react and continuously make it better.
Five stars, well deserved.
The best tour plugin ever
By basolene on May 12, 2026
I like the way Yatra plugin organizes the tours on the page and the way the elements are organized on the tour card
Clearly the Best Travel Plugin I Tested
By Just a test (justmikehere) on April 29, 2026
Iβm very satisfied with the Yatra plugin.
I tested multiple travel and booking plugins, but Yatra clearly stood out as the best option. It offers more features than the others and provides a solid, well-structured solution for building a travel website.
What I appreciate most is the support. Instead of slow email responses, they offer live chat support where you can speak directly with someone in a professional and helpful way. This makes a big difference and shows they take their users seriously.
The pricing is also very fair. Unlike other plugins that require expensive monthly subscriptions, Yatra offers great value for money without unnecessary ongoing costs.
Overall, a high-quality plugin with excellent support. Highly recommended.
Support is Horrible
By jerryrveal on July 5, 2024
I have been trying to get several features finalized and it has been 2 months now that I have been waiting for a response. I have followed up with no reply.
This software has some major challenges in the payments area and I would caution anyone looking at this to make sure you do a lot of testing to make sure it meets your needs.
Something as simple as a flat deposit by person is what I am looking for and it is not available.
I will be trying to get my money back.
Best!
By gaenat on May 8, 2024
Best plugin and amazin support!
Is anyone there?
By moiraskitchen on May 20, 2023
Was unable to purchase a license after trying with 4 different cards.
Was unable to reach anyone at the company via their chat plugin despite the mention that there are staff online.
Support forum goes to a dead page.
I would avoid. I cannot even verify they are a going concern. Their competitors seem to be more responsive.
Yatra Rocks
By Zakaria Kalatozishvili (logicaldata) on May 15, 2023
Overall, I highly recommend the Yatra plugin to anyone who wants to enhance their travel website’s functionality and provide their visitors with a top-notch booking experience. Thank you, Yatra, for creating such a great plugin!
Best plugin ever
By must1234 on December 28, 2022
I’ve been using it short time, but it is easy to manage, everything works great, I would recommend it to everyone!
Keep up the good work guys!
really impressive, highly customisable plugin well suited to tour and travel sit
By stannardp on December 8, 2022
Quick and Easy to Deal With
By asm_towhid on May 1, 2022
Changelog
3.1.0 β 1 November 2026
Fixed
* Refunds were deducted twice, leaving a negative amount paid. Recording a refund wrote the refund as its own entry and marked the original payment refunded, so the same money came off the booking twice over: a 1,000 payment with a 150 refund stored the amount paid as β150 instead of 850, reported more outstanding than the trip costs, and reset the payment status to Pending β indistinguishable from a booking that had never paid. A refund is now a single entry of its own and the original payment keeps its own record, so what you received, what you sent back and what that leaves are each counted once; the booking screen reports all three. A fully refunded booking now reads Refunded rather than Pending, including where you marked a payment refunded by hand. Because the original payment is no longer closed off, a second partial refund against the same payment is possible where it previously was not, and a new check refuses any refund that would send back more than the booking ever received. Bookings whose stored figures are already wrong are recalculated once, automatically, on the first admin page you open after updating; bookings with no refunds are not touched. Each booking’s previous figures are copied to a backup table (yatra_refund_totals_repair_backup_v1) before they change; if a copy cannot be made, that booking is left alone and retried later.
* Every booking was counted twice on the customer’s record. A customer with two bookings was shown as having four β in My Account and on the Customers screen alike. The booking count, total spent and traveller totals stored against a customer were added up by hand, and one checkout added to them twice, because both the checkout and the booking service create-or-update the customer record. Nothing ever subtracted either, so cancelling or deleting a booking left the count where it was, and a customer an operator added by hand started life showing one booking they had never made. These figures are now worked out from the bookings themselves whenever a booking is created, changed, cancelled or deleted, so they cannot drift again. Counts already stored wrong are repaired once, automatically, on the first admin page you open after updating. Before rebuilding, the current figures are copied to a backup table (yatra_customers_stats_backup_v1); if that copy cannot be made, the rebuild waits an hour and tries again.
* Cancelled trips were counted as upcoming. “Upcoming Trips” in My Account looked only at the travel date, so a trip the customer had cancelled kept being counted and listed as upcoming. A cancelled or refunded booking is no longer upcoming, and the Dashboard and Bookings pages now agree about a trip departing today β one used to count it and the other not.
* The payment section of the booking form could not be translated. On a translated site the booking form came out in the site’s language right up to the payment methods, which stayed in English β the one part of the checkout a customer cannot miss. Yatra had written each gateway’s name and description into your saved settings in English when it was installed, and several of those seeded texts did not match the gateway’s own wording, so the checkout mistook them for labels you had typed yourself and used them in place of the translatable ones. Yatra now recognises its own old defaults and lets them translate, without touching your saved settings: a name or description you genuinely customised is still shown exactly as you wrote it, and new installs no longer store these labels at all. The date-format hint in empty date fields (“YYYY-MM-DD”) is translatable too, so it can follow your locale’s convention.
* The confirmation page promised travel documents that were never sent. Under What’s Next, Yatra told every customer they would receive “a detailed itinerary and preparation guide within 24-48 hours” β nothing sends one, so customers waited for an email that was not coming and then asked where it was. The pay-later confirmation email said the same. Both now point to where the booking really lives: its details, trip itinerary and any balance due are in My Account, linked using your configured account address. A customer who booked as a guest is told how to reach it instead β create an account with the email address they booked with and the booking appears there β and if your site does not allow registration they are simply asked to keep their confirmation email, rather than being sent to a login page that holds nothing for them.
* Booking statuses were missing from the My Account bookings list. Every booking in the list showed a “Pending” badge whatever its real status, the Completed filter found nothing and the Pending filter only matched on payment, because the list did not carry the booking’s status at all (the booking detail page did, which is why the two disagreed). The list now carries it, so badges, filters and counts all read the real status.
* Late bookings never got the trip reminder. The daily reminder went only to bookings travelling exactly the configured number of days out, so a booking made or confirmed inside that window β booked one day before a three-day reminder, say β never received one, and neither did a booking whose reminder day WP-Cron missed. Every eligible booking travelling between today and the reminder day now gets its reminder on the next daily run, once, and a late reminder states the real number of days left instead of the configured number. Resend email Trip reminder on a booking now sends exactly the same email as the automatic one, including the outstanding-balance block, and reports an error instead of “sent” when the Trip reminder email is switched off.
* The archive pages’ structured data described an empty list. The trip archive and the destination, activity and trip-category listings printed CollectionPage JSON-LD with a hardcoded empty ItemList ("numberOfItems": 0) even when the page showed cards. The list now holds the cards actually shown β each with its URL, name and position β following filters, sorting and pagination (page 2 continues from position 11), and a page with no results leaves the list out instead of printing it empty. SEO titles, meta descriptions, canonical URLs, robots directives, prev/next links and sitemaps are unchanged. New filter yatra_seo_collection_page_schema to change or remove the list.
* The Payments method filter offered the wrong choices. All Methods always listed Credit Card, PayPal, Bank Transfer and Cash, whatever was set up, so most gateways named in the table could not be chosen β on a site using Stripe and Bank Transfer, Stripe could not be filtered at all, and “Bank Transfer” missed bank transfers taken at checkout. The filter now lists the payment methods you have enabled plus any method that already has payments recorded, with the same names the table shows, so a gateway you switched off stays filterable for its past payments. The two spellings of one method (a checkout “bank_transfer” and a hand-entered “Bank Transfer”) appear once and filter together in every language, and the table now shows a hand-entered method under the same translated name as the gateway.
* The enquiry page could stop with a fatal error on older setups. On PHP 7.4/8.0 with WordPress 6.0β6.4, reading a trip’s enquiry settings called a PHP 8.1 function WordPress only provides from 6.5. It now works on every supported PHP and WordPress version.
* Trip listings made a request back to your own site for every card. To decide whether to show the “Group Discounts” badge, each trip card on a listing page called the site’s REST API over HTTP while the page was being built β up to a dozen extra requests per page, and on hosts that block such loopback requests each one waited for a timeout, making listings very slow. The badge information is now read directly, with the same result and no extra requests.
* The trip listing price filter always showed “$”. The price range under Filters was redrawn by the page script with a hard-coded dollar sign, so a store in euros or pounds showed “$9 – $8,999” as soon as the page finished loading or the slider moved. It now uses your currency, symbol position, decimals and separators β exactly as prices are printed elsewhere.
* Parts of the admin stayed English on sites translated with a WordPress.org language pack. Screens that load separately from the main admin script β the Trip Consent form editor among them β never received their translations, because WordPress only loads the translation file for the main script. Those screens now get their translations whichever way the site is translated, and plural forms follow the language’s own rules. A few labels in the admin header (the Pro version, the license status badge and the dark-mode button) and the Trip Consent field-type tooltips were not translatable at all; they are now.
* A recurring departure’s booking cutoff was only enforced by the calendar. Booking Cutoff (hours before) and the “bookings open N days ahead” limit on a recurring departure correctly removed those dates from the trip calendar, but the booking itself was not checked: a date inside the cutoff matched no departure, was treated as an open-dated trip and the booking went through β from an old link, a page left open, or a request made directly. Such a booking is now refused (“Booking cutoff has passed for this departure.”, or “This departure is not open for booking.” before bookings open). Tip: the cutoff is set in hours, so 20 days is 480.
* Admin calendars always started the week on Sunday. The availability calendar and the admin date pickers ignored Settings General Week Starts On, which the frontend calendars already honoured. They now start on the configured day, and their weekday names are translatable.
* The Google Calendar settings showed a “Sync Departures” switch that did nothing. Nothing ever created an event from it. Departures reach the calendar through One event per departure, which is built from bookings, so the switch is removed and the Sync Bookings description explains this. The setting stays stored, so nothing saved is lost.
New
* Payment notes are now a history rather than a single field. The Notes box on a payment held one value, so recording why a refund was issued wrote over whatever was there before, and nothing recorded when a note was added or who added it. Payments Notes now keeps a dated, attributed list: every note stays visible as new ones are added, each showing the time and the member of staff who wrote it. Anything already in the old Notes field is still shown, first in the list and marked as recorded before the history existed β nothing is migrated or overwritten, so the old field keeps working exactly as it did.
* A separate cancellation email for cancellations you make. Yatra has only ever had one customer cancellation email, so a trip you cancelled told the customer their own cancellation had been received. Yatra already records who ended a booking; it now uses that. Switch on Email While Cancelling Cancelled by us in Settings Emails and a cancellation you make uses its own wording, while one the customer asked for β or one the unpaid-booking expiry produces β keeps the ordinary email. Off by default, so nothing changes until you ask for it, and if that wording is switched off or left empty the ordinary cancellation email is sent instead rather than nothing at all.
* Payment due dates are now shown to customers and to you. A booking with a balance outstanding showed the amount owed but never said when it was owed β not in the customer’s account, not on the booking screen, and not on the Payments screen. All three now show the next payment due date (or Overdue since, when it has passed) with the amount, and list each instalment separately where there is more than one. On Payments it is a Next Due column you switch on from the column picker, so no existing layout changes until you ask for it. Requires Yatra Pro with Scheduled Payments switched on, since that is what defines when a balance falls due; with it off there is no due date to show and nothing changes.
* The lead traveller’s date of birth and nationality now reach the customer profile. A booking collects them from the lead traveller, but the customer record was built only from the Contact section β which on a default form has no date-of-birth or nationality field β so those two stayed empty and the customer was asked for them a second time on their profile. They are now taken from the lead traveller, along with gender. An existing profile is never overwritten: only a blank is filled, so anything the customer has set themselves is kept exactly as it is.
* New {{payment_reference}} merge tag. Payment emails could only show the gateway’s Transaction ID, which is empty for anything recorded by hand β so the line either sat blank or had to be left out. Yatra’s own payment number (PAY-000004), the one already shown on the Payments screen, the invoice and the customer’s account, is now available as Payment Reference in Available Variables. It is filled for every recorded payment, so a customer always has a number to quote.
* You can now record why a booking was cancelled, and tell the customer. The cancellation email has always been able to print a reason β {{cancellation_reason}} is a documented merge tag and the booking table has a column for it β but nothing except the unpaid-booking expiry cron ever wrote to it, so an operator cancelling a booking by hand had no way to say why and the tag arrived empty. The booking screen now offers a Cancellation Reason when you set a booking to Cancelled, and it is saved with the status change so the customer’s email carries it. Leave it blank and the email is exactly what it was before.
* Email templates that cannot send are now labelled. Two of the built-in templates are older names for templates still in use β they sit on the same event, look identical in Emails Templates, and editing the wrong one has no effect at all. Such a template now carries a Not in use badge naming the one that handles the event instead, so the wording you edit is the wording that gets sent.
* Customers can now keep a postal code on their profile. The My Account profile asked for country, city and street address but had no postal/ZIP field, so a customer could never give a complete address β and the postal code already stored on their Yatra customer record was not shown back to them either. The field is now on the profile, saved to the same customer record the booking form and the admin Customers screen use, and read back when the page loads, so what the customer enters is what they see next time.
* Notes on excluded dates and periods. In a recurring availability rule, each excluded date or period now has an optional note β Easter break, guide on leave β so everyone managing availability can see why a date is closed, long after it was blocked. Notes are visible to your team only, never to customers, and are plain text up to 200 characters. Existing exclusions are unchanged and simply have no note.
* Booking-form answers in emails read like the booking page. Merge tags for booking-form answers β the contact_β¦, emergency_β¦ and lead_traveler_β¦ tags and {{traveler_custom_fields_html}} β printed the stored value: a dropdown’s internal value (spouse, gluten_free) or a country code (DE). They now print what the booking page shows β the option’s label (Spouse/Partner, Gluten Free, translated like on the booking form) and the country name (Germany) β and the traveller block uses each field’s own label. Free-text answers are unchanged.
* Choose a Google Calendar from a list. Once connected, Settings Integration Google Calendar offers the calendars the account can add events to, instead of only a Calendar ID box. Requires the matching Yatra Pro release; with an older Pro the box works as before.
* Settings for the new Google Calendar options. The Google Calendar dashboard gains Calendar time zone and Event text (your own event title and details with variables). Both need the matching Yatra Pro release and stay hidden without it.
* Resend the trip reminder from the bookings list. The row actions menu on Bookings now has Resend trip reminder, next to Resend confirmation email. It sends the same email as Resend email Trip reminder on the booking itself. It is offered only for trips still to come, not for cancelled, refunded or completed bookings.
* New yatra_booking_inserted action. Fired as soon as a booking is stored, for every booking β including one still waiting for e-mail verification, which delays yatra_booking_created. For integrations that must act at checkout time, such as recording the visitor’s consent choice.
3.0.19 β 16 October 2026
Fixed
* Pressing Book Now twice created two bookings. Nothing remembered the booking a submission had already made, so each press minted another booking, another reference and another customer email β and because the card is collected after the booking exists, an abandoned or declined payment left one behind every time. An identical resubmit now resumes the booking it already created: same reference, no second booking, no second email, and the payment step runs again so the card can be retried against it. Only an identical resubmit is absorbed β change the party, the date, the amount, the payment method, or correct a detail you had mistyped, and you get a new booking carrying the change, exactly as before. Works the same on every payment method, card or otherwise.
* “Verify your email” was sent again on every attempt. On sites that ask guests to verify their email address, each press of Book Now sent another verification link. The link from the first attempt stays valid, so one is now sent per booking every few minutes: pressing the button repeatedly sends one email, while coming back later still gets you a fresh link.
* A checkout that posted no payment method was booked as “pay on arrival”. An absent or unrecognised payment method silently fell back to Pay Later, which is an offline method: no card was taken, the booking was created and the customer was emailed. Leaving the card fields empty was the usual way to reach it. Yatra now falls back to Pay Later only on sites that actually offer it, and otherwise asks the customer to choose how they would like to pay.
New
* Choose what the customer is emailed while a card payment is still pending. A booking and its reference are created before the card is charged, because the payment gateway needs a booking to charge against β so a checkout that is abandoned at the card step, or whose card is declined, already had a confirmation email sent for it. Settings Bookings Email While Payment Is Pending now offers “Send the booking confirmation straight away” (what Yatra has always done, and still the default) or “Wait until the payment succeeds”. Pay-later, bank transfer and zero-balance bookings are unaffected either way: they have no payment to wait for.
3.0.18 β 9 October 2026
New
* Booking form fields can be pre-filled by add-ons. A new yatra_booking_form_field_prefill filter lets a value be supplied for any field by its rendered input name, covering the traveller section and operator-added fields as well as the contact details β previously only the contact section could be pre-filled, and only from an existing booking. Yatra Pro uses this to restore what a customer had typed when they return through an abandoned-booking recovery link.
* The lead traveller’s answers can now be used in emails. The booking form builder lets you mark a traveller field “lead traveller only”, but there was no merge tag to print the answer β the only way to show it was {{traveler_custom_fields_html}}, which prints every traveller’s answers to everything. Each traveller field now also has a {{lead_traveler_<field>}} tag carrying the lead traveller’s answer, listed in the Available Variables panel beside the others. Fields asked of every traveller still have no single-value tag of their own, because a booking has many travellers; the lead is the one person there is exactly one of.
* A theme can now design your trip, listing and destination pages. Yatra offers block templates for those screens so they can be edited in the Site Editor, but only an edit saved from the editor was ever used β a template file shipped by your theme appeared in the list and was then ignored on the site itself. A theme built for Yatra can now lay out those pages properly: reassurance under an itinerary, a prompt at the end of a listing, whatever it wants. Nothing changes unless your theme ships one, and an edit you have saved yourself still takes precedence over it.
* yatra_trip_reminder_due fires for each booking that reaches its trip-reminder day, whether or not the reminder email is switched on. Yatra Pro uses it to start pre-departure email sequences.
Fixed
* The link that lets a customer pay their balance was hidden from the template editor. Reminder emails can carry a secure link that opens the outstanding payment ready to pay, without the customer signing in or hunting through their account. It worked, but it was missing from the Available Variables list, so there was no way to discover it and operators linked to the account page instead. It is now listed as Pay Balance Link on the scheduled payment templates.
* Marking a booking paid could tell the customer they had paid the whole trip. The payment email announced the booking’s running total rather than the payment just taken β and when nothing had been recorded yet it fell back to the full booking price. A customer paying a deposit could be sent a receipt for the entire trip. The email now reports the amount that change actually recorded, so a deposit reads as a deposit and the balance is right.
* Marking a booking paid could leave it still owing money. When a booking already showed an amount paid that the Payments screen had no record of β an imported booking, or one taken before payments were itemised β marking it paid recorded only the balance and then set the amount paid to just that balance, losing the earlier payment. The booking read as part paid with an amount still due, and because the paid total is recalculated from the Payments screen, the next payment of any kind would undo the settlement again. The earlier payment is now written to the Payments screen as its own entry, so the two agree and the booking settles properly. The receipt still reports only the payment just taken.
* A status change no longer claims a payment arrived when none did. Re-marking an already-settled booking as paid, or moving one to partial, sent a “payment received” email for money that had not just been received. Those changes are bookkeeping, not payments, and are now silent; use Resend email on the booking to send a receipt deliberately.
* Emails no longer show an empty Transaction ID. A manually recorded payment has no transaction reference, and the row was printed anyway with nothing after the label. Any detail row whose value comes out empty is now left out.
* Destinations and activities showed a rating of 0.0 before anyone had reviewed them. The star and the score were printed whether or not there were any reviews, so a new site, or any destination nobody had reviewed yet, advertised what looked like the worst possible score. The rating now appears once there is one.
* Switching an email off in Emails Templates did not always stop it. With Yatra Pro’s Email Automation in use, the setting that switches a transactional email on or off was skipped entirely whenever Pro held a template for the same event, so an email you had turned off kept going out. The setting is now honoured. Pro still decides which wording is used; what it no longer does is override “off”. This needs the matching Yatra Pro update to take full effect β until Pro is updated, Yatra deliberately leaves the old behaviour alone rather than switch off emails on its own, so nothing stops unexpectedly while the two are out of step.
* Review request emails linked to the wrong page. The link was built from the trip’s row number rather than the trip itself, so it pointed at whatever unrelated post happened to share that number, or at nothing at all when none did β customers received a review link that went somewhere else or could not be clicked. It now points at the trip. A request that cannot be given a working link is no longer sent.
* Customers who had already left a review were asked for another one. The check for an existing review looked for two columns that reviews do not have, so it failed every time it ran and never once prevented a reminder. It now matches on the trip together with the customer’s account or the email address on the booking.
* The “Book Now” button on a trip page ignored your primary colour. The rule that colours it was written twice, and the second one painted the button a fixed green, so it was the one element on the page that never followed the colour set in Settings. It now uses your primary colour like every other main action. If you had not changed the primary colour, the button will no longer be green β set the one you want under Primary brand color in Yatra Settings.
The two most recent releases are listed below. For the complete version history, see changelog.txt.
The full history for older releases is kept with the source: https://github.com/mantrabrain/yatra/blob/master/readme.txt








