Request the remainder
Ask the customer of an underpaid payment for exactly what's left, once its quote has expired.
For a payment that's underpaid after its quote expired, from a link or the API. It opens a checkout for exactly what's left, in the same coin and network, attached to the same payment: its remainder is true. When the rest arrives, the payment gains a remainder_paid event and succeeds, and no second payment is made. Send the customer to the url in the response.
Returns the payment, with a remainder_requested event in its timeline, and the new checkout. Asking again while that checkout is open returns the same one. Requires an Idempotency-Key.
While the original quote is live, 15 minutes after the short transfer by default, checkout is still asking the customer for the rest at the same address, so this returns 409
remainder_unavailable with the time the quote ends.Path
idstring RequiredThe payment's ID, such aspmt_QI02vLdJGd48hBbg.
Errors
- 404
not_foundNo payment with that ID belongs to your business. - 400
idempotency_key_requiredThe request has noIdempotency-Keyheader. - 409
payment_not_underpaidThe payment isn'tunderpaid. - 409
remainder_unavailableThe quote is still live, so the customer can still send the rest to the same address, or the payment has no checkout page left, such as a deleted link's. - 409
nothing_dueNothing is left to collect. - 409
not_acceptingYour wallet can no longer receive on the payment's network. - 403
business_suspended402pay suspended your business, so it can't open new checkouts. - 403
test_mode_unavailableA test key can't request a remainder on a live business, so use a live key. - 503
temporarily_unavailable402pay paused new checkouts, or payments on the payment's network, for now. Try again later.
Any request can also fail on its key or its body. See errors.
Request
curl -X POST "https://dash.402pay.co/api/v1/payments/pmt_uYs2XjkL1jGJt44v/request-remainder" \ -H "Authorization: Bearer $PAY402_SECRET_KEY" \ -H "Idempotency-Key: $(uuidgen)"Response201 Created
{ "data": { "kind": "remainder_request", "payment": { "id": "pmt_uYs2XjkL1jGJt44v", "kind": "payment", "status": "underpaid", "amount": 19900, "currency": "USD", "fee_payer": "business", "customer_fee": 0, "amount_received": 17910, "reporting": { "currency": "USD", "amount": 19900, "fee": 0, "transaction_fee": 0, "customer_fee": 0, "net": 0 }, "fee_rate_bps": 0, "method": { "rail": "crypto", "asset": "USDC", "network": "polygon", "amount": "179.10", "expected_amount": "199.00", "overpaid_amount": null, "from_address": "0xd2554462b44e258265af12a7d051e47bda66e5b6", "tx_hash": "0x1d346f1e2fdd7e6a7bdd4d0193dba2a938dfdb7beef4fab2669d55fef2607812", "explorer_url": "https://polygonscan.com/tx/0x1d346f1e2fdd7e6a7bdd4d0193dba2a938dfdb7beef4fab2669d55fef2607812" }, "settlement": { "destination": "wallet", "asset": "USDC", "network": "polygon", "amount": "179.10", "wallet_id": "wal_1fIGZOrILmsCO0jw", "address": "0x7Ba69aE8cEf2987739F6E70e903F95a5028e3531", "tx_hash": "0x1d346f1e2fdd7e6a7bdd4d0193dba2a938dfdb7beef4fab2669d55fef2607812", "explorer_url": "https://polygonscan.com/tx/0x1d346f1e2fdd7e6a7bdd4d0193dba2a938dfdb7beef4fab2669d55fef2607812" }, "customer_id": "cst_gWFWcc7Ga0Pv7LSC", "link_id": "lnk_nt842tPNne3lf0ka", "url": null, "reference": null, "metadata": {}, "success_url": null, "cancel_url": null, "expires_at": null, "canceled_at": null, "checkout_id": "chk_OuPmQnhYyQqpp2qZ", "description": "Team plan, monthly", "country": "US", "failure_code": null, "failure_message": null, "confirmed_at": null, "created_at": "2026-09-26T21:22:47.055Z", "updated_at": "2026-09-26T21:38:24.275Z", "events": [ { "type": "created", "created_at": "2026-09-26T21:22:47.055Z", "data": null }, { "type": "method_selected", "created_at": "2026-09-26T21:22:47.055Z", "data": { "rail": "crypto", "asset": "USDC", "network": "polygon" } }, { "type": "detected", "created_at": "2026-09-26T21:22:47.069Z", "data": { "amount": "179.10", "network": "polygon", "tx_hash": "0x1d346f1e2fdd7e6a7bdd4d0193dba2a938dfdb7beef4fab2669d55fef2607812" } }, { "type": "underpaid", "created_at": "2026-09-26T21:22:47.069Z", "data": { "expected": "199.00", "received": "179.10" } }, { "type": "expired", "created_at": "2026-09-26T21:37:47.069Z", "data": null }, { "type": "remainder_requested", "created_at": "2026-09-26T21:38:24.275Z", "data": { "checkout_id": "chk_XKOWx49himYIAnet", "amount": 1990, "currency": "USD" } } ] }, "checkout": { "id": "chk_XKOWx49himYIAnet", "kind": "checkout", "status": "open", "rail": "crypto", "link_id": "lnk_nt842tPNne3lf0ka", "payment_id": "pmt_uYs2XjkL1jGJt44v", "amount": 1990, "currency": "USD", "breakdown": { "currency": "USD", "price": 1990, "processing_fee": null, "network_fee": 2, "total": 1992 }, "crypto": { "asset": "USDC", "network": "polygon", "amount": "19.90", "address": "0xb5C513376614F24fBf807B8c2B1FA3fD1E637A52", "payment_uri": "ethereum:0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359@137/transfer?address=0xb5C513376614F24fBf807B8c2B1FA3fD1E637A52&uint256=19900000", "rate": { "amount": 100, "currency": "USD" }, "received_amount": "0.00", "remaining_amount": null, "remaining_payment_uri": null, "overpaid_amount": null, "detected_network": null, "tx_hash": null, "explorer_url": null }, "card": null, "confirmations": { "current": 0, "required": 4 }, "remainder": true, "canceled_by": null, "replaced_by": null, "failure_code": null, "review_reason": null, "success_url": null, "expires_at": "2026-09-26T21:53:24.271Z", "sent_at": null, "created_at": "2026-09-26T21:38:24.271Z", "updated_at": "2026-09-26T21:38:24.271Z", "email": "harper.wilson@example.com", "reporting": { "currency": "USD", "amount": 1990, "fee": 0, "transaction_fee": 0, "customer_fee": 0, "net": 1990 }, "fee_rate_bps": 0 }, "url": "https://checkout.402pay.co/checkout/v6e4mrczwg?s=chk_XKOWx49himYIAnet" }}