Hevn Accounts API

Create and manage business or individual customer accounts.

Operations 5

POST /clients Create a client #
GET /clients List clients #
GET /client Retrieve one account #
PATCH /client Update a client profile #
GET /client/balance Read a client's balances #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/hevn-inc:hevn-inc-accounts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

hevn-inc-accounts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: HEVN Platform Accounts API
  description: 'HEVN''s account, verification and money-movement API. Verification follows a submission workflow: save applicant info and documents, inspect outstanding requirements, then explicitly complete the submission to send an immutable snapshot for review. Completing a submission is separate from editing it.'
  version: 1.0.0
tags:
- name: Accounts
  description: Create and manage business or individual customer accounts.
paths:
  /clients:
    post:
      tags:
      - Accounts
      summary: Create a client
      description: 'Provision a company account for one of your clients. The id is knowable at once, so poll `pollUrl` with the returned `id` in `X-Hevn-Account` until `status` is `ready` — about 30 seconds. An identical resubmit answers 200 with `Idempotency-Replayed: true` and the same id. Developer-role callers may set `transferPolicy`; otherwise all allow flags default to true and both security-state flags default to false.'
      operationId: create_client_clients_post
      security:
      - HTTPBearer: []
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: 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.
          examples:
          - po-inv-2026-114
          title: Idempotency-Key
        description: 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.
      - name: X-Hevn-Account
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: The client account to act for, as a `cl_…` id. Omit it to act as yourself.
          examples:
          - cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41
          title: X-Hevn-Account
        description: The client account to act for, as a `cl_…` id. Omit it to act as yourself.
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClientCreateRequest'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientResponse'
        '422':
          description: Request validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformErrorResponse'
    get:
      tags:
      - Accounts
      summary: List clients
      description: Every client you have asked for, provisioning and ready, newest first.
      operationId: list_clients_clients_get
      security:
      - HTTPBearer: []
      parameters:
      - name: email
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: email
          - type: 'null'
          description: Exact match, lowercased.
          title: Email
        description: Exact match, lowercased.
      - name: status
        in: query
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/PlatformClientStatus'
          - type: 'null'
          title: Status
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          minimum: 1
          default: 50
          title: Limit
      - name: cursor
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 512
          - type: 'null'
          title: Cursor
      - name: X-Hevn-Account
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: The client account to act for, as a `cl_…` id. Omit it to act as yourself.
          examples:
          - cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41
          title: X-Hevn-Account
        description: The client account to act for, as a `cl_…` id. Omit it to act as yourself.
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Page_ClientResponse_'
        '422':
          description: Request validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformErrorResponse'
  /client:
    get:
      tags:
      - Accounts
      summary: Retrieve one account
      description: Retrieve the client selected by `X-Hevn-Account`, from the moment `POST /clients` returns its id — a client still provisioning answers here too. Unknown, malformed and foreign account ids share the same not-found response.
      operationId: read_client_client_get
      security:
      - HTTPBearer: []
      parameters:
      - name: X-Hevn-Account
        in: header
        required: true
        schema:
          type: string
          description: The selected client account, as a `cl_…` id.
          examples:
          - cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41
          title: X-Hevn-Account
        description: The selected client account, as a `cl_…` id.
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientResponse'
        '422':
          description: Request validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformErrorResponse'
    patch:
      tags:
      - Accounts
      summary: Update a client profile
      description: Update the phone and postal address for the client selected by `X-Hevn-Account`. Everything else about a client is verification data.
      operationId: update_client_client_patch
      security:
      - HTTPBearer: []
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: 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.
          examples:
          - po-inv-2026-114
          title: Idempotency-Key
        description: 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.
      - name: X-Hevn-Account
        in: header
        required: true
        schema:
          type: string
          description: The selected client account, as a `cl_…` id.
          examples:
          - cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41
          title: X-Hevn-Account
        description: The selected client account, as a `cl_…` id.
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClientProfileRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientResponse'
        '422':
          description: Request validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformErrorResponse'
  /client/balance:
    get:
      tags:
      - Accounts
      summary: Read a client's balances
      description: 'One row per account the client holds: the tokens on the Base smart wallet of the client selected by `X-Hevn-Account`, plus any custodial balance. A custodial row is read live from the provider that holds it and is left out when that provider cannot be reached.'
      operationId: read_balance_client_balance_get
      security:
      - HTTPBearer: []
      parameters:
      - name: X-Hevn-Account
        in: header
        required: true
        schema:
          type: string
          description: The selected client account, as a `cl_…` id.
          examples:
          - cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41
          title: X-Hevn-Account
        description: The selected client account, as a `cl_…` id.
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientBalanceView'
        '422':
          description: Request validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformErrorResponse'
components:
  schemas:
    PlatformErrorBody:
      properties:
        code:
          $ref: '#/components/schemas/PlatformErrorCode'
          description: Stable machine-readable error code.
        message:
          type: string
          title: Message
          description: Human-readable explanation safe to show to an end user.
        details:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Details
          description: Structured context for this error, when available.
      type: object
      required:
      - code
      - message
      title: PlatformErrorBody
    ClientCreateRequest:
      properties:
        name:
          type: string
          maxLength: 500
          minLength: 1
          title: Name
          description: Legal or trading name used to identify the account.
        email:
          type: string
          format: email
          title: Email
          description: Unique account email used for verification correspondence.
        phone:
          anyOf:
          - type: string
            pattern: ^\+[1-9]\d{6,14}$
          - type: 'null'
          title: Phone
          description: Phone number in international E.164 format.
        transferPolicy:
          anyOf:
          - $ref: '#/components/schemas/InitialTransferPolicy'
          - type: 'null'
          description: Initial account transfer controls, available only to developer-role callers. When omitted, every allow flag is true while isFrozen and recoveryModeActivated are false.
      additionalProperties: false
      type: object
      required:
      - name
      - email
      title: ClientCreateRequest
    TransferPolicyResponse:
      properties:
        allowFiat:
          type: boolean
          title: Allowfiat
          description: Allow account-initiated fiat payouts, subject to freeze and recovery controls.
        allowCrypto:
          type: boolean
          title: Allowcrypto
          description: Allow account-initiated on-chain transfers, including transfers to another platform account, subject to freeze and recovery controls.
        allowThirdParty:
          type: boolean
          title: Allowthirdparty
          description: Allow fiat or on-chain payouts to an external contact. Email and escrow payments within the same platform group use narrower controls.
        allowEscrowThirdParty:
          type: boolean
          title: Allowescrowthirdparty
          description: Allow escrow to another platform account. This control is independent from allowThirdParty; same-group escrow also requires allowPartnerGroupPayments.
        allowSwap:
          type: boolean
          title: Allowswap
          description: Allow balance swaps, subject to freeze and recovery controls.
        allowPartnerGroupPayments:
          type: boolean
          title: Allowpartnergrouppayments
          description: Allow email and escrow payments between accounts in the same platform group. Email payments also require allowCrypto; escrow also requires allowEscrowThirdParty.
        isFrozen:
          type: boolean
          title: Isfrozen
          description: Block every new money movement, overriding every allow flag.
        recoveryModeActivated:
          type: boolean
          title: Recoverymodeactivated
          description: Restrict money movement to first-party fiat payouts whose Contact belongs to this account and whose account-holder name matches the account name.
      type: object
      required:
      - allowFiat
      - allowCrypto
      - allowThirdParty
      - allowEscrowThirdParty
      - allowSwap
      - allowPartnerGroupPayments
      - isFrozen
      - recoveryModeActivated
      title: TransferPolicyResponse
      description: 'Effective account-level money-movement controls.


        ``isFrozen`` overrides every permission. When the account is not frozen,

        ``recoveryModeActivated`` restricts it to first-party fiat withdrawals.

        The remaining flags are then evaluated for the requested operation.'
    ClientResponse:
      properties:
        id:
          type: string
          pattern: ^(?:cl_)?[A-Za-z0-9._:\-]{1,216}$
          title: Id
          description: Stable public identifier for this account.
          examples:
          - cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41
        status:
          $ref: '#/components/schemas/PlatformClientStatus'
          description: Current account-provisioning status.
        name:
          anyOf:
          - type: string
          - type: 'null'
          title: Name
          description: Legal or trading name of the account.
        email:
          anyOf:
          - type: string
          - type: 'null'
          title: Email
          description: Email address associated with the account.
        phone:
          anyOf:
          - type: string
          - type: 'null'
          title: Phone
          description: Phone number in international E.164 format.
        baseSmartWallet:
          anyOf:
          - type: string
          - type: 'null'
          title: Basesmartwallet
          description: Base smart-wallet address controlled by the account.
        kybStatus:
          $ref: '#/components/schemas/PlatformKybStatus'
          description: Current business-verification status.
          default: notStarted
        kybApplicationId:
          anyOf:
          - type: string
            pattern: ^(?:kyb_)?[A-Za-z0-9._:\-]{1,216}$
            examples:
            - kyb_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41
          - type: 'null'
          title: Kybapplicationid
          description: Latest immutable business-verification application identifier.
        createdAt:
          type: string
          format: date-time
          title: Createdat
          description: UTC timestamp when the account was created.
        failure:
          anyOf:
          - $ref: '#/components/schemas/ClientFailureResponse'
          - type: 'null'
          description: Provisioning failure details, when present.
        pollUrl:
          anyOf:
          - type: string
          - type: 'null'
          title: Pollurl
          description: Relative API URL to poll with this response's id in `X-Hevn-Account`.
        transferPolicy:
          anyOf:
          - $ref: '#/components/schemas/TransferPolicyResponse'
          - type: 'null'
          description: Account-level controls for the ways this client may move money.
      type: object
      required:
      - id
      - status
      - createdAt
      title: ClientResponse
    PlatformClientFailure:
      type: string
      enum:
      - provisioning_failed
      - request_rejected
      - request_canceled
      title: PlatformClientFailure
    PlatformErrorResponse:
      properties:
        error:
          $ref: '#/components/schemas/PlatformErrorBody'
          description: Public error body.
      type: object
      required:
      - error
      title: PlatformErrorResponse
    Page_ClientResponse_:
      properties:
        items:
          items:
            $ref: '#/components/schemas/ClientResponse'
          type: array
          title: Items
          description: Resources in this page, in stable server-defined order.
        nextCursor:
          anyOf:
          - type: string
          - type: 'null'
          title: Nextcursor
          description: Opaque cursor for the next page; absent when this is the final page.
      type: object
      required:
      - items
      title: Page[ClientResponse]
    PlatformClientStatus:
      type: string
      enum:
      - provisioning
      - ready
      - failed
      title: PlatformClientStatus
    InitialTransferPolicy:
      properties:
        allowFiat:
          type: boolean
          title: Allowfiat
          description: Allow account-initiated fiat payouts, subject to freeze and recovery controls.
          default: true
        allowCrypto:
          type: boolean
          title: Allowcrypto
          description: Allow account-initiated on-chain transfers, including transfers to another platform account, subject to freeze and recovery controls.
          default: true
        allowThirdParty:
          type: boolean
          title: Allowthirdparty
          description: Allow fiat or on-chain payouts to an external contact. Email and escrow payments within the same platform group use narrower controls.
          default: true
        allowEscrowThirdParty:
          type: boolean
          title: Allowescrowthirdparty
          description: Allow escrow to another platform account. This control is independent from allowThirdParty; same-group escrow also requires allowPartnerGroupPayments.
          default: true
        allowSwap:
          type: boolean
          title: Allowswap
          description: Allow balance swaps, subject to freeze and recovery controls.
          default: true
        allowPartnerGroupPayments:
          type: boolean
          title: Allowpartnergrouppayments
          description: Allow email and escrow payments between accounts in the same platform group. Email payments also require allowCrypto; escrow also requires allowEscrowThirdParty.
          default: true
        isFrozen:
          type: boolean
          title: Isfrozen
          description: Block every new account-initiated money movement, overriding every allow flag.
          default: false
        recoveryModeActivated:
          type: boolean
          title: Recoverymodeactivated
          description: Restrict money movement to first-party fiat payouts whose Contact belongs to this account and whose account-holder name matches the account name.
          default: false
      additionalProperties: false
      type: object
      title: InitialTransferPolicy
      description: 'Initial money-movement controls accepted only from a developer-role client creator.


        ``isFrozen`` overrides every permission. When the account is not frozen,

        ``recoveryModeActivated`` restricts it to first-party fiat withdrawals.

        The remaining flags are then evaluated for the requested operation.'
    AccountBalanceView:
      properties:
        account:
          $ref: '#/components/schemas/AccountKey'
          description: Account this balance belongs to.
        balance:
          type: string
          title: Balance
          description: Available balance on this account.
          example: '500.00'
        usdValue:
          type: string
          title: Usdvalue
          description: Indicative USD value of this balance.
          example: '500.00'
      type: object
      required:
      - account
      - balance
      - usdValue
      title: AccountBalanceView
    ClientFailureResponse:
      properties:
        code:
          $ref: '#/components/schemas/PlatformClientFailure'
          description: Stable machine-readable code for the provisioning failure.
        message:
          type: string
          title: Message
          description: Human-readable explanation safe to show to the account holder.
        retriable:
          type: boolean
          title: Retriable
          description: Whether retrying later without changing the request may succeed.
          default: false
      type: object
      required:
      - code
      - message
      title: ClientFailureResponse
    PlatformKybStatus:
      type: string
      enum:
      - notStarted
      - pending
      - approved
      - rfi
      - rejected
      title: PlatformKybStatus
    ClientBalanceView:
      properties:
        clientId:
          type: string
          pattern: ^(?:cl_)?[A-Za-z0-9._:\-]{1,216}$
          title: Clientid
          description: Account associated with this balance.
          examples:
          - cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41
        baseSmartWallet:
          anyOf:
          - type: string
          - type: 'null'
          title: Basesmartwallet
          description: Base smart-wallet address controlled by the account.
        accounts:
          items:
            $ref: '#/components/schemas/AccountBalanceView'
          type: array
          title: Accounts
          description: One entry per account the client holds a balance on.
        totalUsd:
          type: string
          title: Totalusd
          description: Indicative total balance converted to USD.
          example: '500.00'
      type: object
      required:
      - clientId
      - totalUsd
      title: ClientBalanceView
    AccountKey:
      type: string
      enum:
      - USDC
      - EURC
      - FDIC_USD
      title: AccountKey
    PlatformErrorCode:
      type: string
      enum:
      - invalid_request
      - validation_failed
      - invalid_cursor
      - invalid_id
      - idempotency_key_invalid
      - idempotency_key_reused
      - unauthenticated
      - token_expired
      - forbidden
      - not_found
      - method_not_allowed
      - conflict
      - gone
      - payload_too_large
      - rate_limited
      - provider_unavailable
      - database_unavailable
      - internal_error
      - invalid_credentials
      - request_expired
      - challenge_not_found
      - challenge_consumed
      - challenge_expired
      - signature_invalid
      - key_not_registered
      - signer_not_attached
      - wallet_not_linked
      - approval_consumed
      - approval_expired
      - approval_mismatch
      - signing_policy_refused
      - login_unavailable
      - login_mode_unavailable
      - developer_key_not_found
      - developer_key_already_exists
      - account_header_invalid
      - account_scope_conflict
      - account_not_found
      - account_forbidden
      - account_read_only
      - account_not_controlled
      - contact_not_found
      - quote_not_submitted
      - quote_not_fundable
      - funding_mode_unsupported
      - funding_token_unsupported
      - insufficient_funds
      - smart_wallet_not_deployed
      - wallet_owner_unverified
      - already_funded
      - payment_slot_consumed
      - funding_in_progress
      - funding_attempt_expired
      - contact_changed
      - user_operation_rejected
      - user_operation_unavailable
      - transfer_policy_denied
      - integrator_inactive
      - client_creation_not_enabled
      - client_policy_not_enabled
      - email_in_use
      - name_in_use
      - client_request_conflict
      - client_not_found
      - profile_locked
      - contact_not_payable
      - contact_chain_unsupported
      - contact_token_unsupported
      - contact_payment_details_invalid
      - amount_below_minimum
      - amount_above_maximum
      - amount_precision_unsupported
      - payout_not_found
      - payout_not_fundable
      - quote_expired
      - bundler_rejected
      - bundler_unavailable
      - contact_details_invalid
      - contact_in_use
      - kyb_incomplete
      - kyb_roster_conflict
      - kyb_subject_conflict
      - document_fields_missing
      - document_not_found
      - document_type_unsupported
      - invalid_enum_value
      - entity_not_found
      - escrow_not_found
      - escrow_action_not_found
      - escrow_not_operated_by_you
      - escrow_state_changed
      - action_in_flight
      - simulation_failed
      - stale_nonce
      - amount_out_of_range
      - amount_not_allowed
      - window_closed
      - token_not_supported
      - receiver_not_a_client
      - rail_not_found
      - rail_not_available
      - rail_requirements_unmet
      - phone_required
      - payin_not_available
      - payin_expired
      - payin_not_found
      - transaction_not_found
      - account_unavailable
      - account_not_supported
      - swap_not_found
      - swap_route_unavailable
      - swap_not_confirmable
      - intent_not_signable
      title: PlatformErrorCode
    ClientAddressRequest:
      properties:
        streetAddress:
          anyOf:
          - type: string
            maxLength: 200
            minLength: 1
          - type: 'null'
          title: Streetaddress
          description: Street name and building number.
        addressLine2:
          anyOf:
          - type: string
            maxLength: 200
            minLength: 1
          - type: 'null'
          title: Addressline2
          description: Optional apartment, suite or unit.
        city:
          anyOf:
          - type: string
            maxLength: 200
            minLength: 1
          - type: 'null'
          title: City
          description: City or locality.
        state:
          anyOf:
          - type: string
            maxLength: 200
            minLength: 1
          - type: 'null'
          title: State
          description: State, province or administrative area.
        zip:
          anyOf:
          - type: string
            maxLength: 200
            minLength: 1
          - type: 'null'
          title: Zip
          description: Postal or ZIP code.
      additionalProperties: false
      type: object
      title: ClientAddressRequest
    ClientProfileRequest:
      properties:
        phone:
          anyOf:
          - type: string
            pattern: ^\+[1-9]\d{6,14}$
          - type: 'null'
          title: Phone
          description: Phone number in international E.164 format.
        address:
          anyOf:
          - $ref: '#/components/schemas/ClientAddressRequest'
          - type: 'null'
          description: Postal address of the account holder.
      additionalProperties: false
      type: object
      title: ClientProfileRequest
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer