This page lists the responses specific to creating a past-dated transaction on a loan that isn't being migrated onto Peach, with the cause of each and what to do next. For how these creates work, see How past-dated transactions work; errors that any create can return are in the create transaction API reference.
| Status | Message | Cause | What to do |
|---|---|---|---|
400 | effectiveTimeOfDay is required when creating and backdating a transaction in one call (i.e. when effectiveDate is provided). To create a transaction effective today, leave effectiveDate blank. | You sent effectiveDate without effectiveTimeOfDay on a one-time payment, down payment, or service credit, with no scheduledDate. | Add effectiveTimeOfDay to backdate the transaction, or remove effectiveDate to create it effective today. |
400 | effectiveDate is required when effectiveTimeOfDay is provided. | You sent effectiveTimeOfDay without effectiveDate, with no scheduledDate. | Add effectiveDate, or remove effectiveTimeOfDay. |
| Status | Message | Cause | What to do |
|---|---|---|---|
400 | effectiveDate can only be used for external transactions (isExternal=true or external payment instrument). | A one-time payment or down payment with effectiveDate is not external. Service credits are exempt. | Set isExternal to true or use an external payment instrument, or remove effectiveDate. |
400 | Backdated payment create requires status 'succeeded' or 'pending'. | A one-time payment or down payment with effectiveDate has a status other than succeeded or pending. An omitted status also triggers this, because it resolves to scheduled. | Send status as succeeded or pending. |
| Status | Message | Cause | What to do |
|---|---|---|---|
400 | effectiveDate must be in the past or today. | The requested instant, effectiveDate plus effectiveTimeOfDay in the product timezone, is later than the time of the call. This includes a later time today. | Send a date and time no later than the time of the call. |
400 | Cannot backdate transaction to before loan started_at. | The requested instant is at or before the loan's start: its startedAt timestamp, when the loan was activated. | Send an instant after the loan's startedAt. |
400 | Cannot backdate transaction with drawId to before draw started_at. | You sent drawId, and the requested instant is at or before the draw's startedAt, when the draw was activated. | Send an instant after the draw's startedAt. |
400 | Cannot backdate transaction to before migration cutoff date. | The loan is a line of credit migrated onto Peach with a migration period, and the requested date is before its migration cutoff date. | Send a date on or after the migration cutoff date. |
400 | Loan status cannot be 'originated' or 'pending'. | A one-time payment or service credit targets a loan with status originated or pending. | Wait until the loan's status is active, then create the transaction. |
400 | Loan status must be 'active' or 'accelerated', not '<loan status>'. | A one-time payment or service credit targets a loan whose status is not active, accelerated, or chargedOff, such as paidOff. | To move an existing transaction on a paid-off loan, use the two-step backdate operation. |
400 | Loan configuration does not allow payments on charged off loans. | A one-time payment or service credit targets a chargedOff loan whose loan type does not allow payments when charged off. | Create the transaction only on loans whose loan type allows payments when charged off. |
400 | Down payments presently can only be made on loans with status 'active'. | A down payment targets a loan whose status is not active. | Create down payments only on active loans. |
After a past-dated create, Peach recalculates the loan with a Loan Replay™. The responses below concern that replay.
| Status | Message | Cause | What to do |
|---|---|---|---|
408 | Gave up waiting for transaction backdate replay to finish: <transaction ID>. | You sent sync=true, and the replay did not finish within the wait. The transaction is already saved. | Poll the operation ID returned with the response until the replay finishes. |
400 | Some operations failed for this request. | You sent sync=true, and Peach hit an error outside the replay itself, for example before the replay started. The transaction is already saved. | Do not retry the create, because the transaction already exists. |
423 | Loan is locked for updates. Please try again. | The loan is locked by a replay or another update in progress. | Retry the request after the lock clears. |
| Status | Message | Cause | What to do |
|---|---|---|---|
409 | Duplicate external ID '<externalId>'. | Another transaction in your company already uses this externalId. | Do not resend; a 409 on a retry means the earlier request was saved. |
- How past-dated transactions work — How a past-dated create is validated, recorded, and replayed, and how to retry safely.
- Create transaction API reference — The full request and response contract for creating a transaction.
- Loan Replay™ — How a replay recalculates a loan after a retroactive change.