What happened
You submitted a payout from a non-custodial wallet, but that wallet already has another payout sitting at the user-signature step on the same chain. This returns HTTP 409 with error codeCONCURRENT_COSIGN_IN_FLIGHT.
Common causes
- Rapid payout submission — your integration submitted a second payout before the first one finished the signing step
- Abandoned signing session — the user closed the signing page without approving or declining, leaving the payout at the cosign gate
- Parallel payout requests — two concurrent requests from your backend both resolved a wallet and submitted payouts simultaneously
Recovery
1. Identify the in-flight payout List the customer’s transactions filtered by withdrawal type to find the one waiting for a signature:"declined" to cancel it instead.
3. In production: wait for the signing window to close
The user must approve or decline the payout from their signing session. The gate closes automatically when the signing window expires. Once the prior payout reaches a terminal state (completed or failed), the 409 clears and you can resubmit.
4. Resubmit the new payout
Prevention
- Serialize payouts per wallet — queue outgoing payouts and only submit the next one after the prior one terminates
- Track signing state — maintain a flag per wallet indicating whether a signing session is open; block new submissions until it clears
- Listen for
transaction.failedandtransaction.completed— use these events to gate the next payout rather than polling
Related endpoints
- POST /v2/payouts — submit a payout
- GET /v2/payouts/:id — read payout state
- POST /v2/sandbox/payouts/:id/simulate/cosign — resolve the cosign gate in sandbox