Troubleshooting
From what you're seeing to the error code behind it and the fix.
Find what you're seeing, then the fix. Each error's code is stable, and errors lists every one. When you contact support, include the error's request_id.
Creating payments
A create is refused because of its reference
409
reference_in_useA reference names one live payment until it expires or you cancel it, and this one is taken by a payment for another amount or currency, or one that already received funds. The message names that payment. Cancel it withPOST /payments/{id}/canceland create again, or use a new reference.A retried create made a second payment
Without areference, every create makes a new payment. Send your order's ID as thereference, or anIdempotency-Keyheader, so a retry returns the first payment.The business can't take payments yet
409
not_acceptingThe business has no wallet that can receive, so checkout would have nothing to pay into. Finish setup in the dashboard: add the business, then create or connect its wallet.expires_at is refused
400
invalid_requestexpires_atmust be an ISO 8601 date-time from 15 minutes to 30 days from now. Leave it out for 24 hours.
Checkout
Checkout asks for an email, or refuses to start without one
400
email_requiredCard payments always need the customer's email, and crypto ones do too while checkout collects emails, which is on by default in Settings, under Checkout. Setcustomer_emailwhen you create the payment and checkout won't ask, or sendemailwhen you create a checkout yourself.The payment's page says it's already paid
409
payment_paidFunds already reached the payment: it'ssucceeded,underpaidorneeds_review, so it can't start another attempt. Check its status, and request the rest or accept it if it's short.The payment's page says it expired or was canceled
410
payment_expiredA payment past itsexpires_at, or one you canceled (409payment_canceled), can't be paid. Create a new one: its reference is free again.A customer can't pay you at all
403
customer_blockedYou blocked the customer with that email. Unblock them in the dashboard, or withPATCH /customers/{id}andblocked: false.A card checkout is refused for its price
400
amount_out_of_rangeCards take $5 to $10,000. Outside that range, customers pay with crypto.
Underpayments
Requesting the rest is refused
409
remainder_unavailableThe underpaid quote is still live, so the customer can send the rest to the same address. The message says until when, and gives the checkout URL to send them back to. Try again once it expires.Nothing is left to request
409
nothing_dueThe rest already arrived, or what arrived covers the price. Check the payment's status.The wallet can't collect the rest
409
not_acceptingYour wallet no longer receives on the network the customer paid on, such as an external wallet that left it out. Add that network back, or accept what arrived.
Keys and requests
Every request is refused
401
invalid_api_keySendAuthorization: Bearerand a secret key, starting402s_. Publishable keys and revoked keys can't authenticate.The key works, but not for this business
403
business_forbiddenA key acts only as its own business. Leave out the402pay-Businessheader.A restricted key is refused
403
permission_deniedThe key needs read on the resource forGET, and write for anything else. Embedding withinclude=customeralso needs read on customers.A body is refused before it's read
415
unsupported_media_typeSendContent-Type: application/jsonwith every request that has a body.A request comes back 405 with an empty body
The path exists but doesn't take that method, such as DELETE on a payment. Check the endpoint's page for the methods it takes.A retry with the same idempotency key is refused
409
idempotency_key_reusedThe key was already used for a different request. Use a new random key for each operation, and the same one only to retry it.Requests are being turned away
429
rate_limitedToo many requests came from one IP address. Wait for theRetry-Afterseconds.
Lists
The next page is refused
400
invalid_requestA cursor only works with the list and filters it came from, and names the last item of the page before. If the filters changed or that item is gone, start again withoutcursor.
Webhooks
An endpoint URL is refused
400
invalid_requestIt must be a publichttps://address.localhost, private networks and link-local addresses are refused.Deliveries never reach the server
Read each attempt, with your server's answer, in the dashboard or withGET /webhook-deliveries. The endpoint must be turned on, subscribed to the event type and reachable over public HTTPS. A local 402pay records deliveries without sending them. See troubleshooting webhooks for signatures that fail and events that arrive twice.