POST /dapi/v1/payouts and the client’s id in X-Hevn-Account, then open a sign session for the holder.
Send the client’s cl_… id in X-Hevn-Account on the routes below (Acting as a client).
What differs
Verification comes first for bank rails. A virtual account lists
kyb_required or verification_required in blockers[] until the client is verified (Integration steps).
Book the payout
Save a contact withPOST /dapi/v1/contacts (Payouts), then call POST /dapi/v1/payouts with the contact and one amount. Do not send publicKey.
Response 201, Location: /dapi/v1/payouts/po_4c8a…
quote and contact in your product before you open the window. Fields are on Create an outgoing transfer.
Approve the payout
CallPOST /dapi/v1/connect/sessions with action: "sign" and the payout id, without X-Hevn-Account. Open the returned url in the popup (Approve a payout).
Response 201
Track the payout
Do not act on the redirect. PollGET /dapi/v1/payouts/{payoutId} with the client in X-Hevn-Account until status leaves awaitingSignature and submitted.
The window returns submitted once the holder’s wallet has sent the debit, before the on-chain receipt. The statuses and failure.code are in Payouts, and the polling interval in Status codes.
Refusals
Your developer key signs for your integrator account and its sub accounts. These calls, made with a linked client inX-Hevn-Account or named in the body, are refused.
account_not_controlled returns the client’s id in details.clientId. The other payout refusals are in Errors.