Reschedule the next payment

Moves the date of the next collection attempt on a recurring or instalment contract, typically to retry arrears sooner (or later) than the automatic retry schedule would. It does not create or move a charge: the contract's regular next charge date is untouched, and the money collected is whatever is already outstanding on the contract's existing charges. There is no dedicated endpoint; it is a contract update whose body carries only next_payment.

How it differs from Move the next charge: next_charge is the date the next charge is created on a recurring contract (the schedule itself); next_payment is the date the payment scheduler next tries to collect what is already owed. When the next charge is created, the scheduler resets next_payment to that moment anyway, which is why a retry date after next_charge is refused.

Where you can do this

Before you start

  • The contract is recurring or an instalment schedule (recurring, or with a charge schedule). A one-off contract is refused; a single future-dated payment (a one-off with a scheduled_date) silently ignores the field.
  • The contract is in progress: ACTIVE, PENDING, FAILING or UNRESOLVED. A cancelling, cancelled, completed or failed contract is refused; a suspended one accepts the request but the date does not stick (see Rules).
  • Something is outstanding on the contract; a date set on a contract with nothing outstanding is cleared again by the save.

Inputs

InputRequiredMeaning and constraints
next_paymentyesDate-time of the next collection attempt, yyyy-MM-ddTHH:mm:ss against the server clock, or the literal now. Not later than the contract's next_charge. On an instalment contract, not earlier than the next unpaid instalment's due date. A blank value is not a supported way to clear the date (see Rules).

Rules

Checked by the API means Shuttle refuses the request however it is sent; a screen name means only that screen refuses it, and a direct API call would be accepted.

RuleChecked byWhat you see
The body must carry a contract objectThe APIVALIDATION_ERROR: "API body error: missing contract object"
A one-off contract (ONEOFF with no scheduled date) cannot be rescheduledThe APIVALIDATION_ERROR: "cannot update non-recurring contracts"
A scheduled single payment (a one-off with a scheduled_date) is collected on its due date, changed through scheduled_date (Amend a contract's terms); a next_payment sent for one is not forwardedThe API200, next_payment unchanged
An irregular contract (a legacy type the API does not create) is not editable through this callThe APIINVALID: "Invalid value for field contract (type IRREGULAR does not support scheduled charge edits)."
A cancelling contract is not editableThe APIINVALID: "Invalid value for field contract (status PAYMENTCANCELLING is not editable)."
A cancelled, completed or failed contract is not editable; there is no clear-the-date exception on this path (that exception exists only inside the resume flow, Resume a contract)The APIINVALID: "Invalid value for field contract (status PAYMENTCANCELLED is not editable)." (or COMPLETED, FAILED)
The retry date must not be later than the contract's next_charge, when it has one; "now" is compared as the current time. Merchant View mirrors this with a toast and caps the date picker at next_chargeThe API and Merchant View screenVALIDATION_ERROR: "Invalid retry date, must not be later than next charge date"; admin app: "The next payment can't be scheduled later than the next charge."
On a charge-schedule contract the date cannot be earlier than the due date of the next instalment with money outstandingThe APIINVALID (BOLT-7086): "whenNextPayment cannot be earlier than the next unpaid charge due date (date)"
On an instalment contract the date only sticks when that next unpaid instalment is already overdue; if it is still in the future, the save's scheduler replaces the date with the instalment's own collection date (due date less any advance notice) and answers 200The API200, next_payment replaced with the instalment's collection date
The save also clears the date when the contract is in ERROR status, has an unattributed amount, has a zero amount, has nothing outstanding, or is an UNRESOLVED contract created before 2022The API200, next_payment absent
Merchant View offers Schedule payment only while the contract is in progress, not PENDING, and any existing next_payment is more than five minutes away; the server has no such rule and accepts a new date on a PENDING contract. By design: somebody scheduling a payment while one is already processing has probably misread the screen, so it is not offered. The API applies no such rule.Merchant View screen only (not the API)control hidden
Combining next_payment with other fields makes this a different function: with status SUSPENDED the suspend wins and next_payment is dropped (Suspend a contract); with bypass_validation Shuttle refuses the mix; with payment_method the explicit date overrides the retry-now default (Change the payment method on a contract); with terms it is Amend a contract's termsThe APIINVALID (BOLT-7086): "newStatus cannot be combined with other contract edit fields" for the bypass_validation case; otherwise as the linked function

What happens

  • The contract keeps its status and its regular next_charge; only the date of the next collection attempt moves, and no new charge is created.
  • The response carries the contract with next_payment as saved. It is absent when the save cleared the date (a suspended contract, or nothing outstanding), and on an instalment contract whose next unpaid instalment is not yet overdue it is replaced by that instalment's own collection date.
  • A CONTRACT.UPDATE webhook is raised.
  • At the new date (brought forward by the payment method's advance notice where it has one; at once for "now") everything already due on the contract is collected in a single attempt, which then runs as Collect a contract's arrears now does.
  • If that attempt fails, the automatic retry schedule sets the next date or, once retries are exhausted, clears it. When the next charge is created, the regular schedule takes over.

Who can do this

  • Roles: Admin only today; intended for Support as well, and being aligned.
  • Admin app: the screen needs payment_contract and the admin option recurring_edit; the option gates Merchant View only and is not checked by the server.

Related


Did this page help you?