> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gethevn.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> HEVN is payments software: an API and app over a Base smart wallet. HEVN is not a bank and holds no key to the wallet. Virtual accounts, fiat payins and fiat payouts are provided by partner banks, which hold fiat while it is in transit. Self-serve (the General tab): the person who controls the email signs for the wallet. Developers integrate /dapi/v1 in one of two ways. HEVN Connect (recommended, the HEVN Connect tab): the integrator's customer creates or links a HEVN account in a HEVN-hosted sign-in window on the integrator's site, the integrator's backend reads the linked account and books its payouts, and the account holder approves each payout in that window. External wallets (the External wallets tab, enabled per integrator): the integrator creates a client through the API, registers a wallet address the customer holds as an external account, and requests virtual accounts that deliver to that address. The customer's own wallet sends each transfer that funds a payout. The developer key signs for the integrator's wallet and its sub accounts and cannot sign for a client's wallet.
> Use HEVN's terms as written. A product is the region a client requests. A rail is the bank route HEVN picks for the product. A virtual account (bnk_) is the record a partner bank opens for a client. Account details are what a payer needs to send a bank transfer, returned in a field named requisites. A client (cl_) is a customer's account: linked to the integrator through Sign in with HEVN (POST /dapi/v1/connect/sessions, then POST /dapi/v1/clients/link), or created with POST /dapi/v1/clients for an external-wallets integration. An external account (acc_, kind external) is a wallet address the client holds and signs for. A sub account (acc_, kind sub) is a further wallet of the integrator's own account on Base, spent with the developer key. Write 'sub account' as two words. A contact is a saved destination. A beneficiary is the party that receives a fiat payout. Money leaving an account is a payout, whether it goes to a bank account or to a wallet.
> Do not name a bank, payment institution, card issuer, identity-verification vendor or stablecoin issuer. Say 'the partner bank'. Do not describe HEVN as licensed, regulated or insured.
> HEVN publishes no fee rates, spreads or minimums. Prices come from a quote on a specific payment. Direct pricing questions to HEVN and do not invent numbers.
> The API is at /dapi/v1 and takes a developer-key session plus an X-Hevn-Account header. Developer keys have an IP allowlist and no scopes. Remote transfers are at /api/v1/remote_spend_limit and take a remote transfer key (rsl_) in X-Api-Key, bounded by an onchain spend permission the account holder grants. The two credentials are separate and neither works on the other API. The HEVN CLI is discontinued.

# Changelog

> Dated changes to /dapi/v1, newest first, with the migration for each breaking change.

Changes to `/dapi/v1`, newest first. An entry marked Breaking requires a code change and lists the migration.

**2026-11-13**

Client creation, accounts, sub accounts · documentation tabs

* `POST /dapi/v1/clients` creates a company client with no wallet at HEVN and returns `202` with the client in `provisioning`. HEVN enables it per integrator ([External wallets](https://docs.gethevn.com/external-wallets/overview.md), [Clients](https://docs.gethevn.com/developers/clients.md#statuses)).
* New resource `/dapi/v1/client/accounts`: `POST`, `GET`, `GET /{accountId}` and `DELETE /{accountId}`. It holds external accounts and sub accounts, both named by an `acc_…` id ([Accounts](https://docs.gethevn.com/developers/accounts.md)).
* New `authorization` value `wallet`: a payout from an external account returns `transfer`, and the customer's wallet funds it ([Authorization values](https://docs.gethevn.com/developers/signing.md#authorization-values)).
* Sub accounts: `POST /dapi/v1/client/accounts` with `kind: "sub"` opens a further wallet of your own account, in `USDC` or `RD` ([Sub accounts](https://docs.gethevn.com/sub-accounts/overview.md)).
* `sourceAccount` on `POST /dapi/v1/payouts`, `sourceAccount` and `destinationAccount` on `POST /dapi/v1/swaps`, and `destinationAccount` on `POST /dapi/v1/payins` take an `acc_…` id. `POST /dapi/v1/payins` takes `refundAddress`.
* `POST /dapi/v1/banks` and `GET /dapi/v1/banks/{product}` take `accountId` ([Virtual accounts](https://docs.gethevn.com/developers/virtual-accounts.md#deliver-to-an-account)).
* `accountId` is returned on virtual accounts, payins, balance rows and transactions. `GET /dapi/v1/transactions`, `/summary` and `/export` take an `accountId` filter. A move is two rows of `type: "move"` ([Balances and transactions](https://docs.gethevn.com/developers/balances-and-transactions.md)).
* `debit` has `sourceAddress` and `operation`, the user operation the approval signs ([Debit contents](https://docs.gethevn.com/developers/signing.md#debit-contents)).
* Sandbox: `POST /dapi/v1/sandbox/deposits` takes `accountId`, and the credit and payout responses return it ([Sandbox](https://docs.gethevn.com/developers/sandbox.md#accounts)).
* New [error codes](https://docs.gethevn.com/developers/reference/errors.md#accounts): `account_address_taken`, `account_address_refused`, `account_not_spendable`, `account_destination_unsupported`, `source_account_unsupported`, `account_funding_invalid`, `account_spend_forbidden`, `refund_address_required`, `safe_mode_required` and `account_archive_unsupported`.
* The documentation is split into tabs: For developers, [HEVN Connect](https://docs.gethevn.com/connect/overview.md), [External wallets](https://docs.gethevn.com/external-wallets/overview.md) and [Sub Accounts](https://docs.gethevn.com/sub-accounts/overview.md). Pages under `/whitelabel/` redirect to `/developers/` or `/connect/`.

**2026-11-12**

Error codes and enums

* New [error codes](https://docs.gethevn.com/developers/reference/errors.md): `verification_not_applicable` (409), `kyb_documents_processing` (409, complete again in a few seconds) and `transfer_policy_denied` (403, refused by the holder's transfer policy).
* `rail_requirements_unmet` and `phone_required` are no longer returned.
* The `slot` enum on documents no longer includes `directors_registry` or `list_of_authorized_signatories`.
* A contact's `address` is returned with all of its fields.
* The [sandbox](https://docs.gethevn.com/developers/sandbox.md) runs no registry or document check on KYB.

**2026-11-10**

Fees from the client's plan

* `feeBps` on a virtual account comes from the client's plan and can differ between clients ([Fees](https://docs.gethevn.com/developers/reference/rails.md#fees)).

**2026-11-06**

Regulated companies

* The KYB document takes `company.regulatoryLicenseType`, `company.regulatorCountry`, `company.verifiesCustomerIdentity` and `company.hasTransactionMonitoring`. They can be required when `isRegulated` is `true` ([KYB fields](https://docs.gethevn.com/developers/clients.md#write-the-document)).

**2026-11-04**

FDIC\_EUR account

* New account `FDIC_EUR`, a euro balance held at the partner bank ([Balances and transactions](https://docs.gethevn.com/developers/balances-and-transactions.md)). A payin cannot settle into it.
* `railCurrency` can be `EUR`.

**2026-10-30**

Virtual accounts by product · identity verification

Breaking: virtual accounts are requested by product.

* `POST /dapi/v1/banks` takes `{"product": "eu"}` instead of `{"rail": "…"}`. Products: `eu`, `us`, `uk`, `swift`, `uae`, `br`, `mx`, `co`, `au`, `ng`. HEVN picks the rail ([Rails](https://docs.gethevn.com/developers/reference/rails.md#products)).
* `GET /dapi/v1/banks/{rail}` and `GET /dapi/v1/banks/{rail}/rate` are now `GET /dapi/v1/banks/{product}` and `GET /dapi/v1/banks/{product}/rate`.
* `GET /dapi/v1/banks/{rail}/requirements` is removed. A request with something missing creates the record as `preparing` with `blockers[]`: `kyb_required`, `verification_required` or `terms_required` ([Virtual accounts](https://docs.gethevn.com/developers/virtual-accounts.md#what-still-blocks-it)).
* Each record has `product`. `rail` is still returned, is informational and can change while the record is `preparing`. Do not store it or send it.
* A phone number on the account no longer blocks a virtual account.

To migrate: send `product` instead of `rail`, key stored records by `product`, read `blockers[]` in place of the requirements route, and drop handling for `422 rail_requirements_unmet` and `422 phone_required`.

Identity verification for linked individuals:

* `POST /dapi/v1/connect/sessions` takes `action: "verify"` with a `clientId`. The holder verifies their identity in the sign-in window ([Sign in with HEVN](https://docs.gethevn.com/connect/sign-in-with-hevn.md#verify-an-individual)).
* The client record has `verifiedAt`, the time a business passed KYB or an individual verified their identity ([Clients](https://docs.gethevn.com/developers/clients.md)).
* In the sandbox, `POST /dapi/v1/sandbox/kyb/status` with `approved` also verifies an individual client.

**2026-10-26**

Sign-in window

* Linking issues the code right after sign-in. The consent screen is removed, and `access_denied` now means the holder cancelled.
* `login_hint` on the session URL signs the holder in with a one-time code sent to that email. Without it the window offers Google and email sign-in.
* HEVN sets the window's title, logo, colours and theme on request. The **Sign-in window** card keeps **Allowed sites**.

**2026-10-23**

Clients linked through Sign in with HEVN

Breaking: your customers create their clients through Sign in with HEVN.

* `POST /dapi/v1/clients` is removed. Link a client through [Sign in with HEVN](https://docs.gethevn.com/connect/sign-in-with-hevn.md): `POST /dapi/v1/connect/sessions` with `action: "link"`, the HEVN-hosted window, then `POST /dapi/v1/clients/link` with the returned code.
* The holder's key signs for the client's wallet. Your developer key signs only for your integrator account.
* A payout booked for a linked client returns `authorization: "client"`, and the holder approves it in a `sign` session.
* Developer key scopes are removed.

To migrate: replace client creation with the sign-in flow, store the `cl_…` from `POST /dapi/v1/clients/link` on your server, and route each client payout through a `sign` session ([HEVN Connect](https://docs.gethevn.com/connect/money-movement.md#approve-the-payout)).

**2026-10-20**

Payout quotes name their source

* `quote.sourceAccount` names the account a payout is paid from. Read it instead of `fromCurrency` ([Payouts](https://docs.gethevn.com/developers/payouts.md)).
* A SEPA contact requires `bank.bankName`.

**2026-10-19**

Sandbox limits and KYB decisions

* Sandbox limits: 5 clients per integrator, at most `1` per payout, escrow and payin credit, and a faucet that sends at most `5` to a wallet holding less than `1`. New refusals `sandbox_client_limit_reached`, `sandbox_amount_limit_exceeded` and `sandbox_faucet_balance_too_high` ([Limits](https://docs.gethevn.com/developers/sandbox.md#limits)).
* In the sandbox you decide a completed KYB submission with `POST /dapi/v1/sandbox/kyb/status`: `approved`, `rfi` or `rejected` ([Sandbox](https://docs.gethevn.com/developers/sandbox.md#decide-a-kyb-application)).
* Chain errors `bundler_*` and `user_operation_*` return `503` instead of `502`. `simulation_failed`, `bundler_unavailable` and `user_operation_unavailable` include `details.reason`.
* Unreadable values in a KYB document are reported in an RFI comment. Answer with `PUT /dapi/v1/documents/{documentId}/content`. `document_fields_missing` is removed, and completion returns only `kyb_incomplete`.
* Two clients may share a phone number.

**2026-09-20**

Swaps

* New [swaps](https://docs.gethevn.com/developers/swaps.md) between two accounts of the same client, with `POST /dapi/v1/swaps/preview`, `POST /dapi/v1/swaps` and a signed confirmation.

**2026-09-18**

First release

* First release of `/dapi/v1`: developer keys, clients, KYB, virtual accounts, payins, payouts, contacts, the ledger, escrow and the sandbox.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.