Skip to main content
A virtual account is requested by product — a region code such as eu or us — and HEVN picks the rail behind it. This page is what each product carries and what each payment method needs.

What each method needs

A payment method is defined by the identifiers it routes on. The same matrix governs both directions: the requisites.fields you read off an active virtual account, and the fields you send when you save a contact. + means every group is required. or means any one of the alternatives in that group.
These do not open as deposit rails; they are destinations you can save as contacts and pay out to.
Alongside the identifiers, every requisite and every contact carries a holder: type (individual or business) with firstName and lastName, or businessName. Some methods route on the name alone and ignore the account identifiers for matching; the identifiers are still required.

Products

These are the products a client can request with POST /dapi/v1/banks, the methods its payers use, and the currency each one settles from. A payer wires that currency; the client’s wallet is credited in a stablecoin. GET /dapi/v1/banks is authoritative and narrower: it returns only the products a given client can request, after its residency and legal form are taken into account. Read currency and method off that response rather than deriving them from this table. The product enum in the API reference lists more codes than this table; a code with no rail behind it for a client is simply absent from that client’s list, and requesting it answers 403 rail_not_available. The product is the key: the same code in every environment, and the one you send, store and put in the path. rail on the record names the route HEVN chose behind it. It is informational and can change while the record is preparing — compare nothing against it and never show it to your customers. A named account is opened in the client’s own legal name, so payers see the client and nothing else is needed for the money to be attributed. A pooled account is one partner account serving many clients; its account details carry a paymentReference, and each deposit is attributed by it, so the payer must quote it.

Accounts a rail settles into

supportedAccounts on a virtual account is which of the client’s accounts its rail can deliver into, named as USDC or EURC, and railCurrency is what the rail delivers. The token is fixed by the rail, and HEVN picks the rail for the product, so it is not something you choose when you request. destinationAccount on the record echoes what the active account delivers. Per deposit the choice is on the money-in call: POST /dapi/v1/payins takes a destinationAccount, and a token no rail of the client’s settles into answers 422 payin_not_available with details.options[] listing the pairs that do. feeBps on the record is HEVN’s deposit fee in basis points for that product, from the client’s plan. It is a whole number: 25 is 0.25%.

Chain codes

On-chain destinations use a chain code, not a rail: a wallet contact carries one in crypto.chain, and a quoted on-chain payin carries one in originChainId. GET /dapi/v1/chains answers the live list rather than this page: every chain, its EVM chainId, and each token’s decimals and contract address. settlement: true marks the chain balances live on, and a token’s account names the account it holds when a client can hold a balance in it. Read it once at startup instead of hardcoding what follows. eth · bsc · avax · op · arb · pol · sol · base · gnosis · tron · xrp · zec · doge · ltc · btc · cardano · bera · sui · near · near_intents · xlayer · plasma · ton · stellar · monad · starknet · aptos · adi · bch A client balance settles on Base, in USDC or EURC, so a contact on Base holding either token is paid straight out of it. A contact on any other chain in this list, or expecting any other token, is paid through a cross-chain route — the same POST /dapi/v1/payouts, quoted with fromChainId and toChainId, refused with 409 payout_not_fundable when routing is unavailable for the account.

Market rates

GET /dapi/v1/rates?from=EUR&to=USDC converts one currency or token into another at the current market rate, before any transfer exists:
Both sides accept a fiat code or a token symbol, so a fiat pair, a token pair and a mixed pair answer the same way. It is a display rate and says so: the rate a transfer settles at comes from that transfer’s own quote, and a rail’s deposit rate comes from GET /dapi/v1/banks/{rail}/rate. A currency HEVN does not price answers 404 not_found.

Next: KYB fields

Every field of the KYB document, its accepted values, and the document slots.