Summary
Add a Checkout and Orders extension for payment terms: buyer-facing payment plans composed of one or more payment schedules. This supports cases where a checkout is authorized/completed now, but one or more payments are due later.
Motivating use cases include:
- Lodging and reservations, where the buyer pays a deposit at booking and the balance at check-in
- Try before you buy, where the checkout is completed now but the full payment is due at a later date
- Net terms, where a deposit may be due now and the balance due net-30/net-60
- Installments / Buy Now Pay Later, where the first payment is immediate and the remainder follows a recurring schedule
This should be modelled as payment terms for the current checkout, independent of purchase options which influence catalogue and involve details like order recurrence or fulfillment.
Goals
- Allow businesses to disclose available payment terms for a checkout.
- Allow platforms to select a payment term for specific line items.
- Allow schedules inside a term to express:
- immediate payment,
- deferred payment,
- recurring/installment-style payment.
- Allow payment instruments to be assigned terms or schedules.
- Allow payment handlers to constrain which instruments can satisfy which terms/schedules.
- Keep schedule types extensible; avoid closed enums.
- Preserve compatibility with Split Payments for cases where multiple instruments contribute to the same or separate schedules.
Non-goals
- Modelling how to advertise purchase options at an edge like catalogue.
- Modelling fulfillment timing to empower behaviour like subscriptions, pre-orders, or ROPIS.
- Defining payment processor-specific capture, vaulting, or mandate mechanics.
- Supporting a mixed-payment term checkout (line item A has term 1 while line item B gets term 2).
Core invariants
A good payment-schedules solution should preserve these properties, regardless of the exact schema shape:
- Complete obligation disclosure: before authorization, the buyer/platform can understand what is owed, when it is owed, and what event or date makes it due.
- A quote from an old Visa framework document:
- Details about the underlying purchase must be made available to the cardholder, minimally online, including: • Description of each individual purchase, including the name of the seller • Amount and date of each individual purchase • Amount of each installment transaction • Number of installments paid and number of installments remaining
- Amount conservation: scheduled payments cover the agreed payable obligation exactly once; no ambiguous allocation.
- Timing determinism: due times resolve unambiguously from the authorized checkout context, including relative and recurring schedules.
- Authorization coverage: every scheduled payment is backed by an eligible payment method and authorization appropriate for that timing.
- No hidden commerce: payment schedules exclusively solve payments concerns. They do not silently create future purchases, subscriptions, or fulfillment obligations.
- Recoverable failure: invalid schedules, unsupported payment methods, or insufficient authorization produce actionable errors before completion.
- Interoperable with Split Payments: one instrument can satisfy an immediate schedule while another covers a deferred schedule, or two instruments can split a single scheduled payment.
- Authorization: Payment schedules are disclosure and selection primitives. They do not by themselves define:
- credential vaulting,
- future capture authorization,
- mandate format,
- card network compliance,
- regulatory disclosures,
- cancellation/refund behavior. Businesses and payment handlers remain responsible for ensuring future payments are authorized and compliant. If AP2 or another mandate mechanism is active, scheduled payment obligations should be included in the authorized checkout terms.
Examples of terms we want to solve for
Example 1: lodging deposit and balance at check-in
The business returns one available term with two schedules: one immediate payment for the first night, and one deferred payment anchored to check-in time.
{
"payment": {
"available_terms": [
{
"id": "pt_first_night_balance",
"name": "First night now, balance at check-in",
"schedules": [
{
"id": "sched_first_night",
"type": "immediate",
"amount": 1000
},
{
"id": "sched_check_in_balance",
"type": "deferred",
"due_at": {
"anchor_date": "2026-09-01T15:00:00-07:00"
},
"amount": 90000
}
]
}
]
}
}
The platform selects the term and can either assign one instrument to the whole term, or assign instruments to individual schedules.
{
"payment": {
"instruments": [
{
"id": "pi_card_1",
"handler_id": "handler_1",
"type": "card",
"credential": {
"type": "token",
"token": "tok_visa_xxxx"
},
"term_refs": [
{ "id": "pt_first_night_balance" }
]
}
]
}
}
Example 2: installments and instrument constraints
A recurring deferred schedule can represent the remaining three payments in a "Pay in 4" plan.
{
"id": "pt_pay_in_4",
"name": "Pay in 4",
"schedules": [
{
"id": "sched_installment_1",
"type": "immediate",
"percentage": 25
},
{
"id": "sched_installments_2_to_4",
"type": "deferred",
"due_at": {
"offset": "P2W",
"interval": "P2W",
"occurrences": 3
},
"percentage": 25
}
]
}
Payment handlers use the same term_refs shape for constraints. For example, a gift card can be limited to immediate schedules:
{
"type": "gift_card",
"constraints": {
"term_refs": [
{ "schedule_type": "immediate" }
]
}
}
Within term_refs, id matches a payment term, schedule_id matches a payment schedule, and schedule_type matches a schedule type. Compound refs use AND semantics.
Example 3: Split payments with terms
You can choose to provide different methods for different term schedules; splitting within one schedule id, or splitting between schedules.
A realistic scenario: you use a gift card, which cannot be vaulted, to pay for part of the deposit. You use your first credit card for the rest of the deposit, and you use your second credit card for the whole of the final balance.
{
"payment": {
"instruments": [
{
"id": "pi_gift_card_1",
"handler_id": "handler_gift_card",
"type": "gift_card",
"credential": {
"type": "token",
"token": "gc_abc123"
},
"amount": 10000,
"term_refs": [
{
"id": "pt_first_night_balance",
"schedule_id": "sched_first_night"
}
]
},
{
"id": "pi_card_deposit",
"handler_id": "handler_card",
"type": "card",
"credential": {
"type": "token",
"token": "tok_visa_deposit"
},
"amount": 20000,
"term_refs": [
{
"id": "pt_first_night_balance",
"schedule_id": "sched_first_night"
}
]
},
{
"id": "pi_card_balance",
"handler_id": "handler_card",
"type": "card",
"credential": {
"type": "token",
"token": "tok_visa_balance"
},
"term_refs": [
{
"id": "pt_first_night_balance",
"schedule_id": "sched_check_in_balance"
}
]
}
]
}
}
Summary
Add a Checkout and Orders extension for payment terms: buyer-facing payment plans composed of one or more payment schedules. This supports cases where a checkout is authorized/completed now, but one or more payments are due later.
Motivating use cases include:
This should be modelled as payment terms for the current checkout, independent of purchase options which influence catalogue and involve details like order recurrence or fulfillment.
Goals
Non-goals
Core invariants
A good payment-schedules solution should preserve these properties, regardless of the exact schema shape:
Examples of terms we want to solve for
Example 1: lodging deposit and balance at check-in
The business returns one available term with two schedules: one immediate payment for the first night, and one deferred payment anchored to check-in time.
{ "payment": { "available_terms": [ { "id": "pt_first_night_balance", "name": "First night now, balance at check-in", "schedules": [ { "id": "sched_first_night", "type": "immediate", "amount": 1000 }, { "id": "sched_check_in_balance", "type": "deferred", "due_at": { "anchor_date": "2026-09-01T15:00:00-07:00" }, "amount": 90000 } ] } ] } }The platform selects the term and can either assign one instrument to the whole term, or assign instruments to individual schedules.
{ "payment": { "instruments": [ { "id": "pi_card_1", "handler_id": "handler_1", "type": "card", "credential": { "type": "token", "token": "tok_visa_xxxx" }, "term_refs": [ { "id": "pt_first_night_balance" } ] } ] } }Example 2: installments and instrument constraints
A recurring deferred schedule can represent the remaining three payments in a "Pay in 4" plan.
{ "id": "pt_pay_in_4", "name": "Pay in 4", "schedules": [ { "id": "sched_installment_1", "type": "immediate", "percentage": 25 }, { "id": "sched_installments_2_to_4", "type": "deferred", "due_at": { "offset": "P2W", "interval": "P2W", "occurrences": 3 }, "percentage": 25 } ] }Payment handlers use the same
term_refsshape for constraints. For example, a gift card can be limited to immediate schedules:{ "type": "gift_card", "constraints": { "term_refs": [ { "schedule_type": "immediate" } ] } }Within
term_refs,idmatches a payment term,schedule_idmatches a payment schedule, andschedule_typematches a scheduletype. Compound refs use AND semantics.Example 3: Split payments with terms
You can choose to provide different methods for different term schedules; splitting within one schedule id, or splitting between schedules.
A realistic scenario: you use a gift card, which cannot be vaulted, to pay for part of the deposit. You use your first credit card for the rest of the deposit, and you use your second credit card for the whole of the final balance.
{ "payment": { "instruments": [ { "id": "pi_gift_card_1", "handler_id": "handler_gift_card", "type": "gift_card", "credential": { "type": "token", "token": "gc_abc123" }, "amount": 10000, "term_refs": [ { "id": "pt_first_night_balance", "schedule_id": "sched_first_night" } ] }, { "id": "pi_card_deposit", "handler_id": "handler_card", "type": "card", "credential": { "type": "token", "token": "tok_visa_deposit" }, "amount": 20000, "term_refs": [ { "id": "pt_first_night_balance", "schedule_id": "sched_first_night" } ] }, { "id": "pi_card_balance", "handler_id": "handler_card", "type": "card", "credential": { "type": "token", "token": "tok_visa_balance" }, "term_refs": [ { "id": "pt_first_night_balance", "schedule_id": "sched_check_in_balance" } ] } ] } }