payments:initiate and an Idempotency-Key, and both are money writes.
Cancel
POST /v1/payments/{paymentId}/cancel cancels a held or scheduled payment. You can send an optional reason (up to 500 characters), which is shown on the bill.
message that says where the money went:
Any other status answers
409 payment_not_cancellable with details.status. A payment that changed while it was being cancelled answers the same way.
Retry
POST /v1/payables/{payableId}/retry-payment retries a bill whose payment failed. It takes no body: the retry runs on the failed payment’s rail, never on the business’s current default.
POST /v1/payments.
You can also retry by paying the failed bill with
POST /v1/payments. Then name the failed payment’s rail, and on Dwolla the same bank. Anything else answers validation_error with the fields to send.
If the answer is lost
Cancel and retry never run twice under one key. If a cancel or retry fails in a way that may have moved money, every retry with that key answers409 payment_unconfirmed. Check GET /v1/payments/{paymentId} or GET /v1/payments?payableId=... before you use a new key. See Idempotency.