Skip to main content
POST
Create an outgoing transfer

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

X-Hevn-Account
string | null

The client account to act for, as a cl_… id. Omit it to act as yourself.

Example:

"cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41"

x-api-key
string | null
Idempotency-Key
string | null

Your own key for this write, ^[A-Za-z0-9._:-]{1,128}$. A retry with the same key replays the first answer; the same key with a different request is refused.

Example:

"po-inv-2026-114"

Body

application/json
contactId
string
required

Saved contact to receive this transfer.

Pattern: ^(?:ct_)?[A-Za-z0-9._:\-]{1,216}$
Example:

"ct_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41"

publicKey
string
required

Base64 DER SubjectPublicKeyInfo for the registered P-256 developer key.

Required string length: 1 - 512
amount
string | null

Exact amount to debit in the source currency.

Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
Example:

"500.00"

amountTo
string | null

Exact amount the contact should receive.

Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
Example:

"500.00"

paymentReference
string | null

Reference or memo delivered with the transfer.

Maximum string length: 140
purpose
string | null

Business purpose or reason for the transfer.

Maximum string length: 64
documentIds
string[]

Supporting document identifiers returned by POST /dapi/v1/documents.

Maximum array length: 10
Pattern: ^(?:doc_)?[A-Za-z0-9._:\-]{1,216}$
bankId
string | null

Optional receiving-account identifier used to select a specific funding route.

Pattern: ^(?:bnk_)?[A-Za-z0-9._:\-]{1,216}$
Example:

"bnk_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41"

sourceAccount
enum<string>
default:USDC

Settlement token this payout is funded with. The contact and the rail decide whether it can be used.

Available options:
USDC,
EURC

Response

Successful Response

id
string
required

Stable public identifier for this outgoing transfer.

kind
enum<string>
required

Whether the contact is account-based or on-chain.

Available options:
fiat,
onchain
status
enum<string>
required

Current public lifecycle status of the transfer.

Available options:
awaitingSignature,
submitted,
settled,
failed,
refunded
idempotencyKey
string
required

Caller-supplied key that makes an identical retry return this result.

quote
PayoutQuoteView · object | null

Price, fee and conversion terms fixed for this transfer.

approval
PayoutApprovalView · object | null

Authorization to sign before execution.

debit
PayoutDebitView · object | null

Exact on-chain debit used to fund this transfer.

contact
PayoutContactView · object | null

Contact snapshot fixed at creation.