Approval lifecycle
- You create a withdrawal or strategy update.
- The system sources liquidity (unwind/bridge as needed).
- When ready, Braid creates a Turnkey signing activity for the payout leg.
- The payout leg transitions to
pending_customer_approval. - You approve the activity via Turnkey SDK.
- The leg transitions through
pending_broadcast→broadcasted→completed.
Head-of-line gating
Braid enforces one outstanding customer approval perwalletId + chain. If you create multiple withdrawals quickly, later ones queue behind the earlier approval.
This is represented in the withdrawal response as:
customerApprovalState: "queued"— blocked behind a prior approvalblockedBy— describes the blocking payout leg- The waiting payout leg shows
status: "waiting_for_prior_approval"
Automation patterns
Webhook-driven (recommended)
- Subscribe to
portfolio_wallet.withdrawal.payout.status_changed. - When you see
status: "pending_customer_approval", the payload includesturnkeyActivityId— approve it via Turnkey. - When you see
status: "completed", the payout leg is finished.
Polling-driven
- Poll
GET /v2/portfolio-wallets/:id/withdrawals/:withdrawalId. - Check
customerApprovalState:"required": customer action needed now"queued": blocked behind a prior approval (checkblockedBy)"not_required": still sourcing liquidity or no approval needed
Turnkey SDK setup
organizationId is your Turnkey organization ID (provided during onboarding). The fingerprint is the turnkeyActivityId from the payout webhook payload or the payout leg response.
See Webhooks for webhook registration and verification.
Next steps
- Webhooks — register endpoints and verify signatures
- Withdraw Funds — full withdrawal lifecycle
- Update Strategy — strategy updates that may require approval