Returns
Returning payments is important because instant payments are push-only from debtor to creditor and irrevocable. Returning an instant payment creates a newinstant_payment object with an outgoing direction. Additionally, the active return_request sub-object of the original payment, if one exists, moves into accepted status automatically.
This section includes the subset of statuses and events that relate to returns only.
Returns are a type of outgoing instant payments, which are covered extensively on the Sending page.
Endpoints
You can initiate returns regardless of whether or not an active return request exists.Statuses
Outgoing returns, once initiated, will transition through four possible statuses. If an active return request is present, it will move to theaccepted status after Lead validates the outgoing return.
Events
Tracking the outgoing return requires listening to a broad set of events. These events cover exceptions and notifications when the funds returned are now available to the receiving party.Rejections
Rejections surface on theinstant_payment object’s rejection hash, which carries rejected_by, reason, and details. Unless a case says otherwise, handle the .rejected webhook and read those fields.
Outgoing payment rejected by Lead or the network
The payment never reached the counterparty.rejected_by is lead or network. Follow up with Lead if the reason is unclear.
Outgoing payment rejected by the counterparty
Lead submitted the payment to the network and the counterparty rejected it.rejected_by is counterparty. Retry if appropriate.
Outgoing payment posted but subsequently rejected by counterparty
The outgoing payment reachedposted status and completed its lifecycle, but counterparty_status changed to rejected afterward. Listen for .counterparty_status_updated rather than .rejected to inspect the rejection reason.
Expect the counterparty to send the funds back as a separate return, which arrives as its own incoming instant_payment with a .posted webhook. Reconcile it against the original through related_objects.original_payment_id.
Incoming payment rejected by account number controls
Lead rejected an incoming payment, most often because of your configured account number controls, which govern who may send to an account number. If the rejections are unexpected, update the controls.Incoming payment accepted but subsequently rejected
Account number controls are the only way to refuse an incoming payment before it posts. If you want to implement other rejection criteria, simply return the payment after it posts withPOST /instant_payments/{id}/return, which creates a new outgoing return payment.
