tZERO Bank Accounts API

Managing bank accounts linked to an investor account (add, list, delete, verify).

Operations 4

POST /pi/v1/accounts/{accountId}/bankAccounts Add bank account #
GET /pi/v1/accounts/{accountId}/bankAccounts Get bank accounts #
DELETE /pi/v1/accounts/{accountId}/bankAccounts/{bankAccountId} Remove bank account #
POST /pi/v1/accounts/{accountId}/bankAccounts/{bankAccountId}/transfer Initiate Deposit/Withdrawal from/to the Customer's Account #

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/tzero-bank-accounts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

tzero-bank-accounts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Issuance & Secondary Markets Bank Accounts API
  description: APIs to Create Individual broker dealer accounts, Trigger KYC on the investors in the account, Review account information and KYC results, View Primary offering that are available to invest and manage investments in the assets.
servers:
- url: https://gateway-web-api.tzero.com/app
tags:
- name: Bank Accounts
  description: Managing bank accounts linked to an investor account (add, list, delete, verify).
paths:
  /pi/v1/accounts/{accountId}/bankAccounts:
    post:
      tags:
      - Bank Accounts
      summary: Add bank account
      description: 'Adds a new bank account to the given account using directly provided bank details.

        The bank account can be used as a funding source for ACH investments.'
      operationId: addBankAccount
      security:
      - x-api-key: []
        bearerAuth: []
      parameters:
      - name: accountId
        in: path
        required: true
        description: Account identifier.
        schema:
          type: string
        example: PR-1234-5678
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBankAccountRequest'
            example:
              accountNumber: '123456789'
              routingNumber: '021000021'
              accountType: CHECKING
              bankName: Chase
              bankOwnerName: John Doe
              transactionId: a0000000-0000-0000-0000-000000000010
              partnerVerified: true
              verificationResult: Verified via Plaid
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccountDetails'
              example:
                bankAccountId: ach-uuid-123
                bankName: Chase
                maskedAccountNumber: '6789'
                accountType: CHECKING
                status: PENDING
                transactionId: a0000000-0000-0000-0000-000000000010
        '400':
          description: 'Bad Request (validation failed or invalid payload). Body: `errors` array; each item has `code`, `message`, optional `field`.


            **Add bank account — error codes:**


            | Code | Meaning |

            |------|---------|

            | ACCOUNT_NUMBER_REQUIRED | Account number is required. |

            | ACCOUNT_NUMBER_INVALID | Account number must be 4 to 17 digits. |

            | ROUTING_NUMBER_REQUIRED | Routing number is required. |

            | ROUTING_NUMBER_INVALID | Routing number must be exactly 9 digits. |

            | ACCOUNT_TYPE_INVALID | Account type must be CHECKING or SAVINGS. Accepts case-insensitive values (e.g. "checking", "CHECKING"). |

            | BANK_NAME_REQUIRED | Bank name is required. |

            | BANK_OWNER_NAME_REQUIRED | Bank owner name is required. |

            | TRANSACTION_ID_REQUIRED | Transaction ID is required. |

            | PARTNER_VERIFICATION_REQUIRED | partnerVerified must be true. Partner must verify bank details before linking. |

            | BANK_LINK_NOT_AVAILABLE | KYC not completed; complete KYC before adding a bank account. |

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found (account not found)
        '500':
          description: Internal Server Error (INTERNAL_ERROR — unexpected error)
        '502':
          description: Bad Gateway (ach-service unavailable or returned an error)
    get:
      tags:
      - Bank Accounts
      summary: Get bank accounts
      description: Retrieves all active bank accounts linked to the given account.
      operationId: getBankAccounts
      security:
      - x-api-key: []
        bearerAuth: []
      parameters:
      - name: accountId
        in: path
        required: true
        description: Account identifier.
        schema:
          type: string
        example: PR-1234-5678
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BankAccountDetails'
              example:
              - bankAccountId: ach-uuid-123
                bankName: Chase
                maskedAccountNumber: '****6789'
                accountType: CHECKING
                status: APPROVED
              - bankAccountId: ach-uuid-456
                bankName: Bank of America
                maskedAccountNumber: '****1234'
                accountType: SAVINGS
                status: PENDING
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found (account not found)
        '500':
          description: Internal Server Error (INTERNAL_ERROR — unexpected error)
        '502':
          description: Bad Gateway (ach-service unavailable or returned an error)
  /pi/v1/accounts/{accountId}/bankAccounts/{bankAccountId}:
    delete:
      tags:
      - Bank Accounts
      summary: Remove bank account
      description: 'Removes (soft-deletes) a bank account. The record is preserved for audit purposes

        but will no longer appear in active account listings or be usable for new transactions.'
      operationId: removeBankAccount
      security:
      - x-api-key: []
        bearerAuth: []
      parameters:
      - name: accountId
        in: path
        required: true
        description: Account identifier.
        schema:
          type: string
        example: PR-1234-5678
      - name: bankAccountId
        in: path
        required: true
        description: Bank account identifier.
        schema:
          type: string
        example: ach-uuid-123
      responses:
        '204':
          description: No Content (bank account successfully removed)
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found (account or bank account not found)
        '500':
          description: Internal Server Error (INTERNAL_ERROR — unexpected error)
        '502':
          description: Bad Gateway (ach-service unavailable or returned an error)
  /pi/v1/accounts/{accountId}/bankAccounts/{bankAccountId}/transfer:
    post:
      tags:
      - Bank Accounts
      summary: Initiate Deposit/Withdrawal from/to the Customer's Account
      description: Initiates a deposit or withdrawal transaction from User's linked bank account.
      operationId: transfer
      security:
      - x-api-key: []
        bearerAuth: []
      parameters:
      - name: accountId
        in: path
        required: true
        description: Account identifier.
        schema:
          type: string
        example: PR-1234-5678
      - name: bankAccountId
        in: path
        required: true
        description: Bank account identifier.
        schema:
          type: string
        example: ach-uuid-123
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBankTransferRequest'
            example:
              transactionId: a0000000-0000-0000-0000-000000000010
              amount: 10000
              transactionType: DEPOSIT
              currency: USD
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateBankTransferResponse'
              example:
                transactionId: a0000000-0000-0000-0000-000000000010
                amount: 10000
                transferId: '6789'
                bankAccountId: ach-uuid-123
                transactionType: DEPOSIT
                currency: USD
        '400':
          description: 'Bad Request (validation failed or invalid payload). Body: `errors` array; each item has `code`, `message`, optional `field`.


            **Add bank account — error codes:**


            | Code | Meaning |

            |------|---------|

            | TRANSACTION_TYPE | Transaction type is required. |

            | AMOUNT_INVALID | Account is required and should be greater than 0 and less than 100K USD |

            | TRANSACTION_ID_REQUIRED | Transaction ID is required. |

            | BANK_NOT_AVAILABLE | Bank account is either unknown or pending approval |

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found (account not found)
        '500':
          description: Internal Server Error (INTERNAL_ERROR — unexpected error)
        '502':
          description: Bad Gateway (service unavailable or returned an error)
components:
  schemas:
    CreateBankTransferRequest:
      type: object
      description: Request body for initiating a bank transfer account.
      required:
      - transactionId
      - amount
      - transactionType
      properties:
        transactionId:
          type: string
          description: Client-provided id for auditing (required, non-blank).
          example: a0000000-0000-0000-0000-000000000001
        amount:
          type: number
          format: double
        transactionType:
          type: string
          enum:
          - DEPOSIT
          - WITHDRAWAL
          description: Bank transaction type associated to the request.
        currency:
          type:
          - string
          - 'null'
          enum:
          - USD
          example: USD
    CreateBankTransferResponse:
      type: object
      description: Response object for bank transfer transaction.
      required:
      - transactionId
      - transferId
      - amount
      - transactionType
      - bankAccountId
      properties:
        transactionId:
          type: string
          description: Client-provided id for auditing (required, non-blank).
          example: a0000000-0000-0000-0000-000000000001
        transferId:
          type: string
          description: transferId associated to a transaction provided in response.
          example: '1234'
        amount:
          type: number
          format: double
        transactionType:
          type: string
          enum:
          - DEPOSIT
          - WITHDRAWAL
          description: Type of bank account.
        bankAccountId:
          type: string
          description: Bank account linked to the transaction sent in the request.
        currency:
          type:
          - string
          - 'null'
          enum:
          - USD
          example: USD
    BankAccountDetails:
      type: object
      properties:
        bankAccountId:
          type: string
          description: Unique identifier for the linked bank account.
        bankName:
          type: string
        maskedAccountNumber:
          type:
          - string
          - 'null'
          description: Last 4 digits of the account number.
        accountType:
          type: string
          enum:
          - CHECKING
          - SAVINGS
          description: Type of bank account. May be empty if account type is unknown.
        status:
          type: string
          description: 'Bank account status: APPROVED, PENDING, DECLINED, or CANCELED.'
        transactionId:
          type:
          - string
          - 'null'
          description: Client-provided transaction ID (only present on link response).
    ErrorItem:
      type: object
      properties:
        code:
          type: string
          description: Error/validation code (e.g. DATE_OF_BIRTH_IN_FUTURE, JURISDICTION_COUNTRY_NOT_ALLOWED). See x-businessValidationErrorCodes for business logic codes.
        message:
          type: string
          description: Human-readable message.
        field:
          type:
          - string
          - 'null'
          description: Request field path when applicable (e.g. investor.dateOfBirth, investor.physicalAddress.country).
        details:
          type:
          - object
          - 'null'
          additionalProperties: true
          description: 'Optional object that will be sent for certain error `code` and documented in the endpoint''s error table.

            '
    CreateBankAccountRequest:
      type: object
      description: Request body for linking a new bank account.
      required:
      - accountNumber
      - routingNumber
      - accountType
      - bankName
      - bankOwnerName
      - transactionId
      - partnerVerified
      properties:
        accountNumber:
          type: string
          pattern: ^\d{4,17}$
          description: Full bank account number (4-17 digits).
          example: '123456789'
        routingNumber:
          type: string
          pattern: ^\d{9}$
          description: Bank routing number — exactly 9 digits (ABA).
        accountType:
          type: string
          enum:
          - CHECKING
          - SAVINGS
          description: Type of bank account.
        bankName:
          type: string
          description: Name of the bank.
        bankOwnerName:
          type: string
          description: Name of the bank account owner.
        transactionId:
          type: string
          description: Client-provided id for auditing (required, non-blank).
          example: a0000000-0000-0000-0000-000000000010
        partnerVerified:
          type: boolean
          description: Attestation that the partner has verified the bank account details. Must be true to proceed.
          example: true
        verificationResult:
          type:
          - string
          - 'null'
          description: Optional free-text field for audit trail describing how the bank details were verified.
          example: Verified via Plaid
    ErrorResponse:
      type: object
      description: Error response body for validation and business-rule failures. Contains a list of errors; each item has code, message, and optional field (JSON path).
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorItem'
  securitySchemes:
    x-api-key:
      type: apiKey
      in: header
      name: x-apikey
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    refreshToken:
      type: refreshToken
      in: header
      name: refreshToken