--- title: Troubleshooting description: Diagnose and fix the most common Yatra issues — REST 404s, permalinks, gateway sandbox mode, email deliverability, role / capability oddities, cache plugins, and PHP fatals. --- # Troubleshooting This page lists the issues we see most often and the fastest way through them. ## "REST returns 404 / nothing loads in the admin" **Symptom:** The admin React shell shows blank panels; the network tab shows `404` for `/wp-json/yatra/v1/...`. **Cause:** Pretty permalinks are off, or a security plugin is blocking REST. **Fix:**
  1. Go to Settings → Permalinks. Pick Post name (or any non-Plain). Click Save Changes.
  2. Visit /wp-json/yatra/v1/ in a browser. You should see JSON, not 404.
  3. If you have Wordfence, iThemes Security, etc., temporarily allow wp-json for your IP.
## "Permalinks 404 on the front of the site" **Symptom:** `/trip/`, `/book/`, `/my-account/` all return 404. **Fix:** Open Settings → Permalinks and click **Save Changes** (no need to change anything; saving flushes rewrite rules). Or run `wp rewrite flush` via WP-CLI. ## "Stripe is locked at checkout" PRO **Symptom:** PayPal works fine, but Stripe is greyed out / says "available with Pro". **Cause:** Stripe is registered with Pro tier. It only activates at checkout when a Pro license is active. **Fix:** Install Yatra Pro and activate your license under Yatra → License.
PRO Unlock Stripe + 6 more gateways
Compare Pro plans →
## "PayPal webhook shows but no booking is confirmed" **Symptom:** PayPal logs show 200 from your site, but the booking stays **pending**. **Cause:** Mode mismatch (sandbox vs live), wrong Client ID / Secret, or REST routes blocked by security. **Fix:**
  1. Open Yatra → Settings → Payment → PayPal. Confirm Mode matches the credentials you pasted (Sandbox keys won't work in Live mode and vice versa).
  2. Confirm the global Test Mode switch (under Settings → Payment → Global) matches the credentials too.
  3. Confirm REST is reachable — visit /wp-json/yatra/v1/payment/webhook/paypal (you should get a 405 method-not-allowed for GET, not 403).
  4. Check Yatra → Tools → Logs → Payment for webhook errors.
## "Stripe webhook signature mismatch" **Symptom:** Stripe says webhook delivery failed; Yatra logs say "invalid signature". **Cause:** Webhook secret in Yatra doesn't match Stripe's webhook signing secret. **Fix:**
  1. In Stripe → Developers → Webhooks → click your endpoint → Reveal secret under Signing secret (whsec_...).
  2. Paste it into Yatra → Settings → Payment → Stripe → Webhook secret.
  3. Save. Re-send a test event in Stripe.
## "Emails aren't arriving" **Symptom:** No booking confirmation / receipt / cancellation emails reach the customer. **Fix:**
  1. Install a transactional email plugin: WP Mail SMTP, FluentSMTP, or Post SMTP.
  2. Connect to a transactional ESP: SendGrid, Postmark, Amazon SES, Mailgun.
  3. Set From name and From email to a noreply@ on your sending domain.
  4. Configure SPF, DKIM, and DMARC on the From domain.
  5. Test deliverability via mail-tester.com.
PRO Email Automation logs

With Email Automation on, the Email logs tab shows every send, recipient, status, and ESP response code — invaluable for debugging delivery.

Unlock email automation →
## "Every checkout is rejected with 'A valid email address is required'" **Symptom:** After customising the Booking Form, no one can complete a booking — checkout always fails with *"A valid email address is required to complete this booking."* **Cause:** You turned the **Contact** section off (or hid/disabled its **Email** field) on Yatra → Settings → Booking Form, and **no other section collects an email**. A booking always needs an email (for the confirmation, the customer account, and the voucher). **Fix:** Either turn the Contact section back on, **or** add an `email`-type field to the **Per-Traveler** form. When the Contact section is off, Yatra uses the first traveller's email as the booking contact — but the default Per-Traveler form has no email field, so you must add one. The builder shows a warning banner when no section is set to collect an email. See [Settings → Booking Form → Turning sections on or off](/settings#turning-sections-on-or-off). ## "Featured priority filter doesn't work in shortcode / block" **Symptom:** `[yatra_trip featured_priority="featured"]` returns nothing. **Cause:** Trips don't have Featured Priority set, or the value you're filtering on doesn't match the actual enum. **Fix:**
  1. Open the trip → Categories & Attributes → set Featured Priority to one of the four valid values: None, Featured, New, or Limited.
  2. Save.
  3. Pass the lower-case value in the shortcode: featured_priority="featured", "new", or "limited".
The legacy `featured="1"` attribute is also accepted as an alias for `featured_priority="featured"`. ## "Setup wizard never finishes" **Symptom:** After activation, you can't get past the setup wizard. **Fix:**
  1. Make sure your account has manage_options.
  2. Disable WAF / Security plugins temporarily, run the wizard, re-enable.
  3. If still stuck: visit /wp-admin/admin.php?page=yatra-setup directly.
## "I deactivated Pro and lost some data" **Symptom:** After turning off Yatra Pro, dynamic pricing / trip consent / additional services disappear. **Cause:** Pro features render only when their module is on. **Stored data is preserved.** **Fix:** Re-enable the module under Yatra → Modules to bring back the UI. ## "Cache plugin breaks checkout / login" **Symptom:** Login form keeps showing logged-out state; booking flow looks blank. **Cause:** Page cache is serving the logged-out version of a session-specific page. **Fix:** Exclude these from your page cache: - `/booking/`, `/my-account/` - `/wp-json/yatra/v1/checkout/*`, `/wp-json/yatra/v1/me/*` ## "PHP fatal errors after enabling Pro" **Symptom:** White screen of death right after activating Yatra Pro. **Cause:** Mismatched plugin versions, or Pro was activated before Free. **Fix:**
  1. Add define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); to wp-config.php.
  2. Re-read the error in wp-content/debug.log.
  3. Update both plugins to the latest versions.
  4. Activate Yatra first, then Yatra Pro.
## "I'm on a case-sensitive Linux host and templates don't load" **Symptom:** A template override in your theme isn't picked up. **Cause:** macOS dev is case-insensitive; production Linux is case-sensitive. A template with the wrong case in the path silently fails. **Fix:** Match Yatra's exact casing — `templates/single-trip.php`, `templates/partials/trip-card.php`, etc. ## "REST returns 403 for an admin user" **Symptom:** Admin REST routes return `rest_forbidden`. **Cause:** Cookie session expired, missing `X-WP-Nonce`, or a role plugin removed a capability. **Fix:**
  1. Refresh the WordPress admin page (re-issues a fresh nonce).
  2. Confirm your user has manage_options.
  3. Check that a role plugin (Members, User Role Editor) didn't remove Yatra capabilities from administrator.
## "Pro license shows valid in wpyatra.com dashboard but Yatra says invalid" **Symptom:** Account dashboard says **Active**; Yatra → License says invalid. **Cause:** License key activated on too many sites, or the site URL differs (`www.` mismatch). **Fix:**
  1. Open the wpyatra.com account dashboard and confirm site limits.
  2. Deactivate old / dev URLs.
  3. Click Check status in Yatra → License.
## "Dynamic pricing rules don't apply to bookings" PRO **Symptom:** Rules look right in the admin, but customer prices don't change. **Fix:**
  1. Confirm the Dynamic Pricing module is enabled under Yatra → Modules.
  2. Open the rule. Confirm Status is Active.
  3. Confirm the rule's conditions match the trip / dates being booked. Check the Scope field: All trips, Specific trips, By category, or By destination. If you're scoped to specific trips, make sure the booking's trip is in the list.
  4. For Early Bird / Last Minute rules, double-check the days before departure number against your test booking's travel date.
  5. If two rules both match, check the Priority field and the Stack with other rules toggle — a higher-priority rule with Stack = off shortcircuits everything below it.
  6. Clear any object cache (Redis, Memcached) — pricing is cached briefly.
See [Dynamic Pricing](/modules/dynamic-pricing) for the full module reference. ## "Bulk delete dynamic pricing rules fails" **Symptom:** Bulk action runs but rules stay. **Fix:** This was fixed in a recent release — update Yatra Pro to the latest. The fix uses `Promise.allSettled` so any failed row doesn't block the rest. ## Diagnostics tools - Yatra → Tools → System Status — PHP, WP, server, plugin versions. - Yatra → Tools → Jobs — background export/import job progress. - Yatra → Tools → Logs — Error / Payment / Booking / System tabs. - Yatra → Tools → Migration — schema / data migration utilities. ## When to file a bug Before filing, please:
  1. Update both Yatra and Yatra Pro to the latest.
  2. Disable other plugins one by one to rule out conflicts.
  3. Switch to a default theme briefly to rule out theme conflicts.
  4. Capture the exact steps + a WP_DEBUG log of the error.
Then [file a bug on GitHub](https://github.com/MantraBrain/yatra) (free) or open a [priority support ticket](https://wpyatra.com/contact/?utm_source=docs&utm_medium=referral&utm_campaign=yatra-docs) (Pro). ## What's next - [Installation](/installation) - [Payments](/payment-settings) - [Email & notifications](/email-settings) - [Support](/support)