Bitvavo Account Management API

Create and manage multiple subaccounts under one main account and transfer funds between them.

Operations 5

POST /subaccounts Create subaccount #
GET /subaccounts Get subaccounts #
POST /subaccounts/transfers Create transfer #
GET /subaccounts/transfers Get transfers #
GET /subaccounts/transfers/{transferId} Get transfer #

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/bitvavo:bitvavo-account-management-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

bitvavo-account-management-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Institutional REST Account Management API
  version: 2.10.0
  description: Create and manage multiple subaccounts under one main account and transfer funds between them.
servers:
- url: https://api.bitvavo.com/v2
tags:
- name: Account Management
  description: Create and manage multiple subaccounts under one main account and transfer funds between them.
paths:
  /subaccounts:
    post:
      tags:
      - Account Management
      summary: Create subaccount
      security:
      - Bitvavo-Access-Key: []
        Bitvavo-Access-Timestamp: []
        Bitvavo-Access-Signature: []
        Bitvavo-Access-Window: []
      description: 'Creates a new subaccount under the main account.


        :::info

        This is a *private* endpoint. To send requests, you need to authenticate.

        :::


        :::warning

        To use this private endpoint, you must use the API key of your main account with the **Administrative** permission.

        ::::


        **Rate limit weight points**: **5**'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                label:
                  type: string
                  description: Your description of the subaccount, up to 100 characters.
                  maxLength: 100
      responses:
        '200':
          description: The request was successful.
          headers:
            bitvavo-ratelimit-remaining:
              description: The number of remaining [weight points](/docs/rate-limits) before it resets at `bitvavo-ratelimit-resetat`.
              schema:
                type: integer
            bitvavo-ratelimit-resetat:
              description: The time when `bitvavo-ratelimit-remaining` resets to `bitvavo-ratelimit-limit`.
              schema:
                type: integer
                format: unix-timestamp in milliseconds
            bitvavo-ratelimit-limit:
              description: The number of available [weight points](/docs/rate-limits) in one minute.
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                required:
                - id
                - type
                - status
                properties:
                  id:
                    type: string
                    description: The unique identifier of the subaccount.
                  type:
                    type: string
                    description: The type of the subaccount.
                    enum:
                    - spot
                    - margin
                  status:
                    type: string
                    description: The status of the subaccount.
                    enum:
                    - open
                    - closed
                  label:
                    type: string
                    description: Your description of the subaccount, up to 100 characters.
                    maxLength: 100
        4XX:
          description: For error codes, see [Handle errors](/docs/errors).
      operationId: postSubaccounts
      x-operation-id-source: derived
    get:
      tags:
      - Account Management
      summary: Get subaccounts
      security:
      - Bitvavo-Access-Key: []
        Bitvavo-Access-Timestamp: []
        Bitvavo-Access-Signature: []
        Bitvavo-Access-Window: []
      description: 'Retrieves the list of all subaccounts under the main account.


        :::info

        This is a *private* endpoint. To send requests, you need to authenticate.

        :::


        :::info

        To use this private endpoint, you must use the API key of your main account with the **Administrative** permission.

        :::


        **Rate limit weight points**: **5**'
      parameters:
      - name: page
        in: query
        description: Your description of the subaccount, up to 100 characters.
        required: false
        schema:
          type: integer
      - name: maxItems
        in: query
        description: The maximum number of subaccounts per page.
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: The request was successful.
          headers:
            bitvavo-ratelimit-remaining:
              description: The number of remaining [weight points](/docs/rate-limits) before it resets at `bitvavo-ratelimit-resetat`.
              schema:
                type: integer
            bitvavo-ratelimit-resetat:
              description: The time when `bitvavo-ratelimit-remaining` resets to `bitvavo-ratelimit-limit`.
              schema:
                type: integer
                format: unix-timestamp in milliseconds
            bitvavo-ratelimit-limit:
              description: The number of available [weight points](/docs/rate-limits) in one minute.
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    description: Array of objects per returned `subaccountId`.
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: The unique identifier of the subaccount.
                          format: uuid
                        type:
                          type: string
                          description: The type of the subaccount.
                          enum:
                          - spot
                          - margin
                        status:
                          type: string
                          description: Status of the subaccount.
                          enum:
                          - open
                          - closed
                        label:
                          type: string
                          description: Your description of the subaccount, up to 100 characters.
                          maxLength: 100
                  currentPage:
                    type: integer
                    description: The current page number.
                  totalPages:
                    type: integer
                    description: The total number of returned pages.
                  maxItems:
                    type: integer
                    description: The maximum number of subaccounts per page.
        4XX:
          description: For error codes, see [Handle errors](/docs/errors).
      operationId: getSubaccounts
      x-operation-id-source: derived
  /subaccounts/transfers:
    post:
      tags:
      - Account Management
      summary: Create transfer
      security:
      - Bitvavo-Access-Key: []
        Bitvavo-Access-Timestamp: []
        Bitvavo-Access-Signature: []
        Bitvavo-Access-Window: []
      description: 'Makes a deposit or withdrawal by creating a transfer of assets between your subaccounts and the main account.


        :::info

        This is a *private* endpoint. To send requests, you need to authenticate.

        :::


        :::warning

        To use this private endpoint, you must use the API key of your main account with the **Internal transfer permission** permission.

        ::::


        **Rate limit weight points**: **5**'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - subaccountId
              - direction
              - symbol
              - amount
              properties:
                subaccountId:
                  type: string
                  description: The unique identifier for the subaccount.
                  format: uuid
                direction:
                  type: string
                  description: Indicates the direction of the transfer.
                  enum:
                  - masterToSub
                  - subToMaster
                symbol:
                  type: string
                  description: The asset to transfer.
                amount:
                  type: string
                  description: The quantity of the asset to transfer.
                clientRequestId:
                  type: string
                  description: Your identifier of the transfer.
                  format: uuid
      responses:
        '200':
          description: The request was successful.
          headers:
            bitvavo-ratelimit-remaining:
              description: The number of remaining [weight points](/docs/rate-limits) before it resets at `bitvavo-ratelimit-resetat`.
              schema:
                type: integer
            bitvavo-ratelimit-resetat:
              description: The time when `bitvavo-ratelimit-remaining` resets to `bitvavo-ratelimit-limit`.
              schema:
                type: integer
                format: unix-timestamp in milliseconds
            bitvavo-ratelimit-limit:
              description: The number of available [weight points](/docs/rate-limits) in one minute.
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                required:
                - transferId
                - subaccountId
                - direction
                - symbol
                - amount
                - status
                - createdAt
                properties:
                  transferId:
                    type: string
                    description: Bitvavo identifier of the transfer.
                    format: uuid
                  clientRequestId:
                    type: string
                    description: Your identifier of the transfer.
                    format: uuid
                  subaccountId:
                    type: string
                    description: The unique identifier for the subaccount.
                    format: uuid
                  direction:
                    type: string
                    description: Indicates the direction of the transfer.
                    enum:
                    - masterToSub
                    - subToMaster
                  symbol:
                    type: string
                    description: The asset that was transferred.
                  amount:
                    type: string
                    description: The quantity of the asset to transfer.
                  status:
                    type: string
                    description: Status of the transfer.
                    enum:
                    - failed
                    - pending
                    - completed
                  createdAt:
                    type: string
                    description: The Unix timestamp when the transfer was created.
        4XX:
          description: For error codes, see [Handle errors](/docs/errors).
      operationId: postSubaccountsTransfers
      x-operation-id-source: derived
    get:
      tags:
      - Account Management
      summary: Get transfers
      security:
      - Bitvavo-Access-Key: []
        Bitvavo-Access-Timestamp: []
        Bitvavo-Access-Signature: []
        Bitvavo-Access-Window: []
      description: 'Returns information about multiple transfers of assets between a subaccount and your main account.


        :::info

        This is a *private* endpoint. To send requests, you need to authenticate.

        :::


        :::warning

        To use this private endpoint, you must use the API key of your main account with the **Internal transfer permission**.

        ::::


        **Rate limit weight points**: **5**'
      parameters:
      - name: subaccountId
        in: query
        description: The unique identifier for the subaccount.
        required: true
        schema:
          type: string
          format: uuid
      - name: clientRequestId
        in: query
        description: Your identifier of the transfer.
        required: false
        schema:
          type: string
          format: uuid
      - name: start
        in: query
        description: The Unix timestamp in milliseconds starting from which to return transfers.
        required: false
        schema:
          type: integer
      - name: end
        in: query
        description: The Unix timestamp in milliseconds starting up to which to return transfers.
        required: false
        schema:
          type: integer
      - name: limit
        in: query
        description: The maximum number of transfers to return.
        required: false
        minimum: 1
        maximum: 1000
        default: 25
        schema:
          type: integer
      responses:
        '200':
          description: The request was successful.
          headers:
            bitvavo-ratelimit-remaining:
              description: The number of remaining [weight points](/docs/rate-limits) before it resets at `bitvavo-ratelimit-resetat`.
              schema:
                type: integer
            bitvavo-ratelimit-resetat:
              description: The time when `bitvavo-ratelimit-remaining` resets to `bitvavo-ratelimit-limit`.
              schema:
                type: integer
                format: unix-timestamp in milliseconds
            bitvavo-ratelimit-limit:
              description: The number of available [weight points](/docs/rate-limits) in one minute.
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                required:
                - items
                - start
                - end
                - limit
                properties:
                  items:
                    type: array
                    description: An array of objects per returned transferId.
                    items:
                      type: object
                      required:
                      - transferId
                      - subaccountId
                      - direction
                      - symbol
                      - amount
                      - status
                      - createdAt
                      properties:
                        transferId:
                          type: string
                          description: Bitvavo identifier of the transfer.
                          format: uuid
                        clientRequestId:
                          type: string
                          description: Your identifier of the transfer.
                          format: uuid
                        subaccountId:
                          type: string
                          description: The unique identifier for the subaccount.
                          format: uuid
                        direction:
                          type: string
                          description: Indicates the direction of the transfer.
                          enum:
                          - masterToSub
                          - subToMaster
                        symbol:
                          type: string
                          description: The asset that was transferred.
                        amount:
                          type: string
                          description: The quantity of the asset to transfer.
                        status:
                          type: string
                          description: Status of the transfer.
                          enum:
                          - failed
                          - pending
                          - completed
                        createdAt:
                          type: string
                          description: The Unix timestamp when the transfer was created.
                  start:
                    type: integer
                    description: The Unix timestamp in milliseconds starting from which to return transfers.
                  end:
                    type: integer
                    description: The Unix timestamp in milliseconds starting up to which to return transfers.
                  limit:
                    type: integer
                    minimum: 1
                    maximum: 1000
                    default: 25
                    description: The maximum number of transfers to return.
        4XX:
          description: For error codes, see [Handle errors](/docs/errors).
      operationId: getSubaccountsTransfers
      x-operation-id-source: derived
  /subaccounts/transfers/{transferId}:
    get:
      tags:
      - Account Management
      summary: Get transfer
      security:
      - Bitvavo-Access-Key: []
        Bitvavo-Access-Timestamp: []
        Bitvavo-Access-Signature: []
        Bitvavo-Access-Window: []
      description: 'Returns information about a transfer of assets between a subaccount and your main account.


        :::info

        This is a *private* endpoint. To send requests, you need to authenticate.

        :::


        :::warning

        To use this private endpoint, you must use the API key of your main account with the **Internal transfer permission**.

        ::::


        **Rate limit weight points**: **5**'
      parameters:
      - name: transferId
        in: path
        description: The unique identifier for the transfer.
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: The request was successful.
          headers:
            bitvavo-ratelimit-remaining:
              description: The number of remaining [weight points](/docs/rate-limits) before it resets at `bitvavo-ratelimit-resetat`.
              schema:
                type: integer
            bitvavo-ratelimit-resetat:
              description: The time when `bitvavo-ratelimit-remaining` resets to `bitvavo-ratelimit-limit`.
              schema:
                type: integer
                format: unix-timestamp in milliseconds
            bitvavo-ratelimit-limit:
              description: The number of available [weight points](/docs/rate-limits) in one minute.
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                required:
                - transferId
                - subaccountId
                - direction
                - symbol
                - amount
                - status
                - createdAt
                properties:
                  transferId:
                    type: string
                    description: Bitvavo identifier of the transfer.
                    format: uuid
                  clientRequestId:
                    type: string
                    description: Your identifier of the transfer.
                    format: uuid
                  subaccountId:
                    type: string
                    description: The unique identifier for the subaccount.
                    format: uuid
                  direction:
                    type: string
                    description: Indicates the direction of the transfer.
                    enum:
                    - masterToSub
                    - subToMaster
                  symbol:
                    type: string
                    description: The asset that was transferred.
                  amount:
                    type: string
                    description: The quantity of the asset to transfer.
                  status:
                    type: string
                    description: Status of the transfer.
                    enum:
                    - failed
                    - pending
                    - completed
                  createdAt:
                    type: string
                    description: The Unix timestamp when the transfer was created.
        4XX:
          description: For error codes, see [Handle errors](/docs/errors).
      operationId: getSubaccountsTransfersByTransferId
      x-operation-id-source: derived
components:
  securitySchemes:
    Bitvavo-Access-Key:
      description: 'Your 64-character API key with the required [permissions](/docs/institutional-api/introduction/).

        '
      name: Bitvavo-Access-Key
      type: apiKey
      in: header
    Bitvavo-Access-Timestamp:
      description: 'A Unix timestamp in milliseconds of the time when you make the request.

        '
      name: Bitvavo-Access-Timestamp
      type: apiKey
      in: header
    Bitvavo-Access-Signature:
      description: 'An HMAC-SHA256 hex-encoded string of the time, HTTP method, path, and parameters used to make the request. To learn more, see [Authentication](/docs/institutional-api/introduction/).

        '
      name: Bitvavo-Access-Signature
      type: apiKey
      in: header
    Bitvavo-Access-Window:
      description: 'The execution timeout in milliseconds after Bitvavo-Access-Timestamp. The default value

        is 10000, the maximum value is 60000.

        '
      name: Bitvavo-Access-Window
      type: apiKey
      in: header