---
title: Scheduled Payments
description: Step-by-step setup for the Yatra Pro Scheduled Payments module — auto-charge the remaining booking balance on a future date using the saved gateway card. Single charge or installments.
prev:
text: Flexible Payments
link: /modules/flexible-payments
next:
text: Dynamic Pricing
link: /modules/dynamic-pricing
---
# Scheduled Payments PRO

After a customer pays a deposit or partial payment at booking, **automatically charge the remaining balance** on a future date — once, or as installments — using the card saved at the gateway. Customer never has to log back in. Works best with Stripe (which keeps the payment method on file by default).
## What you'll need
| Thing | Where to get it |
| --- | --- |
| Yatra Pro license | Yatra → License |
| Scheduled Payments module enabled | Yatra → Modules → Scheduled Payments |
| [Flexible Payments](/modules/flexible-payments) enabled too | Required — Scheduled Payments charges the *balance*, which only exists when there's been a partial/deposit payment first. |
| A gateway that supports off-session charges | **Stripe** is the supported gateway. Other gateways may fall back to email-the-customer reminders. |
## Step 1 — Enable the module
1. Open Yatra → Modules.
2. Find **Scheduled Payments** → toggle on.
3. The Scheduled Payments section under [Settings → Payment](/settings#_5-payment) becomes editable.
## Step 2 — Configure the schedule
Open Yatra → Settings → Payment → Scheduled Payments.
| Field | Setting ID | Default | Notes |
| --- | --- | --- | --- |
| **Enable scheduled balance payments** | `enable_scheduled_payments` | off | Master toggle. |
| **Schedule type** | `scheduled_payment_type` | `single` | `single` = one balance charge; `installments` = multiple payments. |
| **Days until first charge** | `scheduled_payment_days` | `7` | Days after booking before the first attempt. |
| **Number of installments** | `scheduled_payment_installments` | `3` | Shown only when *Schedule type = installments*. |
| **Days between installments** | `scheduled_payment_interval` | `30` | Shown only when *Schedule type = installments*. |
| **Payment reminder (days before)** | `scheduled_payment_reminder_days` | `3` | Yatra emails the customer this many days before each charge. |
Save.
## Step 3 — Verify with a test booking
1. Make sure [Flexible Payments](/modules/flexible-payments) is also on (so the booking has a balance to charge).
2. In a private browser window, book a trip with **Stripe** (or another off-session-capable gateway). Pay the deposit / partial amount.
3. The booking saves with status `partial` and a *Due Now* balance.
4. Yatra schedules the balance charge based on the settings above. You'll see a row in Yatra → Payments with status **Scheduled**.
5. (Optional) Manually trigger the first charge from the row's *Charge now* action to verify the flow without waiting.
6. Verify in your Stripe dashboard that the second charge went through, and the booking flips to `paid`.
## How the flow looks to the customer
```
Day 0 — Customer pays $99 deposit on a $499 trip
Day N-3 — Reminder email: "Your balance of $400 will be charged on Day N"
Day N — Yatra auto-charges $400 from the saved card
— Customer receives a Scheduled Payment Received email
— Booking status: paid
```
If the charge fails (expired card, insufficient funds), Yatra:
1. Marks the scheduled payment as **Failed**.
2. Sends the **Scheduled Payment Failed** email to the customer (with a link to update their payment method).
3. Sends the **Admin: Scheduled Payment Failed** email to you.
4. Retries on the schedule defined by your gateway's smart-retries (Stripe retries 3 times over a week by default).
## Installment example
With *Schedule type = installments*, *Number = 3*, *Days between = 30*, *Days until first = 7*:
```
Day 0 — Deposit paid: $99
Day 7 — Installment 1: $134 charged
Day 37 — Installment 2: $133 charged
Day 67 — Installment 3 (balance): $133 charged
Day 67 — Booking flips to paid
```
Yatra divides the remaining balance evenly across installments; the final installment absorbs any rounding so the total matches exactly.
## The Scheduled Payments admin
Scheduled charges show in Yatra → Payments with:
- **Status** = `scheduled` (pending) / `completed` (charged) / `failed` (retry expected)
- **Charge date** = when the attempt will run
- **Amount** = the scheduled amount
- **Linked booking** = clickable link to the booking detail
You can:
- **Charge now** — skip the schedule and attempt the charge immediately.
- **Reschedule** — change the future charge date.
- **Cancel** — stop the scheduled charge (e.g. if the customer wires the money manually).
## Required email templates (already free)
Scheduled Payments uses four templates from the [free transactional catalog](/email-settings#payment):
- `scheduled_payment_reminder` — sent N days before
- `scheduled_payment_succeeded` — sent on successful charge
- `scheduled_payment_failed` — sent to customer on failure
- `admin_scheduled_payment_failed` — sent to admin on failure
The templates are listed in the Templates tab but read-only until this module is on.
## Troubleshooting
**Charges fail with "no payment method"** — the gateway didn't save the card. Stripe saves cards by default; other gateways may require explicit *Save payment method* opt-in. Switch to Stripe or enable card-on-file in the gateway settings.
**Customer wants to use a different card for the balance** — they can update their payment method via the link in the *Scheduled Payment Reminder* email. Their account page also has a *Saved payment methods* section (Stripe only).
**Schedule date keeps slipping** — the Scheduled Payments cron runs hourly. If WordPress cron is broken, scheduled charges won't fire. Configure system cron or switch to *Action Scheduler*.
**Tax / discount applies twice on the balance** — Yatra computes the balance as `total - amount_paid`. Tax is already included in `total`; you shouldn't see double-tax. If you do, look at the booking's Payment Summary breakdown — likely an `additional_services` line is firing post-deposit.
## Useful links
- [Flexible Payments](/modules/flexible-payments) — the required companion module that creates the balance to charge.
- [Payments → Stripe](/payment-settings#stripe-pro) — gateway setup; Stripe is the recommended gateway for off-session charges.
- [Settings → Payment](/settings#_5-payment) — full field reference for the Scheduled Payments section.
- [Hooks & filters](/hooks-filters) — `yatra_scheduled_payment_due`, `yatra_scheduled_payment_succeeded`, `yatra_scheduled_payment_failed`.
## Where to read more
- [All modules](/modules#scheduled-payments) — module catalog.