Zai

Zai Virtual Accounts API

The Virtual Accounts API from Zai — 5 operation(s) for virtual accounts.

Operations 6

POST /wallet_accounts/{id}/virtual_accounts Create Virtual Account #
GET /wallet_accounts/{id}/virtual_accounts List Virtual Accounts #
GET /virtual_accounts/{id} Show Virtual Account #
PATCH /virtual_accounts/{id}/aka_names Update AKA Names #
PATCH /virtual_accounts/{id}/account_name Update Account Name #
PATCH /virtual_accounts/{id}/status Update Virtual Account Status #

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/zai-virtual-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 email required.

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

OpenAPI Specification

zai-virtual-accounts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: PayIDs Virtual Accounts API
  description: 'Simplify payin reconciliations by creating a dedicated _Virtual Account_ for each user on your platform.


    Enhance the payments experience on your platform by registering a user friendly identifier, i.e. a _PayID_, for each user''s _Virtual Account_. Your users should then be able to address payins using _PayIDs_ which are easier to remember and use than a BSB and account number.


    This swagger document lists APIs for _Virtual Account_ and _PayID_ creation and management.

    '
  contact:
    url: https://developer.hellozai.com/reference/overview
    email: support@hellozai.com
  version: 0.12-external
servers:
- description: Zai Prelive API
  url: https://sandbox.au-0000.api.assemblypay.com
- description: Zai Production API
  url: https://au-0000.api.assemblypay.com
tags:
- name: Virtual Accounts
paths:
  /wallet_accounts/{id}/virtual_accounts:
    post:
      tags:
      - Virtual Accounts
      summary: Create Virtual Account
      description: Create a _Virtual Account_ for a given _Wallet Account_.
      operationId: createVirtualAccount
      parameters:
      - name: id
        in: path
        description: _Wallet Account_ ID.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
        example: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_virtual_account_request'
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/virtual_account'
              example:
                id: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
                routing_number: '123456'
                account_number: '100000017'
                currency: AUD
                wallet_account_id: ae07556e-22ef-11eb-adc1-0242ac120002
                user_external_id: ca12346e-22ef-11eb-adc1-0242ac120002
                status: pending_activation
                created_at: '2020-04-27T20:28:22.378Z'
                updated_at: '2020-04-27T20:28:22.378Z'
                account_type: NIND
                full_legal_account_name: Prop Tech Marketplace
                account_name: Real Estate Agency X
                aka_names:
                - Realestate agency X
                merchant_id: 46deb476c1a641eb8eb726a695bbe5bc
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_400_deprecated'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_401'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_403_va'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/wallet_account_not_found'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_409'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_500'
    get:
      tags:
      - Virtual Accounts
      summary: List Virtual Accounts
      description: List _Virtual Accounts_ for a given _Wallet Account_.
      operationId: listVirtualAccountByWalletAccount
      parameters:
      - name: id
        in: path
        description: _Wallet Account_ ID.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
        example: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/virtual_accounts_list'
              example:
                virtual_accounts:
                - id: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
                  routing_number: '123456'
                  account_number: '100000017'
                  wallet_account_id: ae07556e-22ef-11eb-adc1-0242ac120002
                  user_external_id: ca12346e-22ef-11eb-adc1-0242ac120002
                  currency: AUD
                  status: active
                  created_at: '2020-04-27T20:28:22.378Z'
                  updated_at: '2020-04-27T20:28:22.378Z'
                  account_type: NIND
                  full_legal_account_name: Prop Tech Marketplace
                  account_name: Real Estate Agency X
                  aka_names:
                  - Realestate agency X
                  merchant_id: 46deb476c1a641eb8eb726a695bbe5bc
                - id: aaaaaaaa-cccc-dddd-eeee-ffffffffffff
                  routing_number: '123456'
                  account_number: '100000025'
                  currency: AUD
                  wallet_account_id: ae07556e-22ef-11eb-adc1-0242ac120002
                  user_external_id: ca12346e-22ef-11eb-adc1-0242ac120002
                  status: pending_activation
                  created_at: '2020-04-27T20:28:22.378Z'
                  updated_at: '2020-04-27T20:28:22.378Z'
                  account_type: NIND
                  full_legal_account_name: Prop Tech Marketplace
                  account_name: Real Estate Agency X
                  aka_names:
                  - Realestate agency X
                  merchant_id: 46deb476c1a641eb8eb726a695bbe5bc
                meta:
                  total: 2
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_400_deprecated'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_401'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_403_va'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/wallet_account_not_found'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_500'
  /virtual_accounts/{id}:
    get:
      tags:
      - Virtual Accounts
      summary: Show Virtual Account
      description: Show details of a specific _Virtual Account_ using the given `id`.
      operationId: showVirtualAccount
      parameters:
      - name: id
        in: path
        description: _Virtual Account_ ID.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
        example: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/virtual_account'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_400_deprecated'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_401'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_403_va'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/virtual_account_not_found'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_500'
  /virtual_accounts/{id}/aka_names:
    patch:
      tags:
      - Virtual Accounts
      summary: Update AKA Names
      description: Replace the list of AKA Names for a _Virtual Account_.
      operationId: updateVirtualAccountAKAName
      parameters:
      - name: id
        in: path
        description: Identifies a _Virtual Account_.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
        example: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_virtual_account_aka_names_request'
      responses:
        '202':
          description: Accepted
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_400_1'
              example:
                errors:
                  aka_names:
                  - 'must be between 1 and 140 characters (inclusive): '
                  - 'must only contain printable ASCII characters: ¢¢¢'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_401'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_403_inactive'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/virtual_account_not_found'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_500'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_409_patch'
  /virtual_accounts/{id}/account_name:
    patch:
      tags:
      - Virtual Accounts
      summary: Update Account Name
      description: Change the name of a _Virtual Account_.
      operationId: updateVirtualAccountAccountName
      parameters:
      - name: id
        in: path
        description: Identifies a _Virtual Account_.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
        example: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_virtual_account_account_name_request'
      responses:
        '202':
          description: Accepted
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_400_1'
              example:
                errors:
                  aka_names:
                  - 'must be between 1 and 140 characters (inclusive): '
                  - 'must only contain printable ASCII characters: ¢¢¢'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_401'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_403_inactive'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/virtual_account_not_found'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_500'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_409_patch'
  /virtual_accounts/{id}/status:
    patch:
      tags:
      - Virtual Accounts
      summary: Update Virtual Account Status
      description: Update the status of a _Virtual Account_.
      operationId: updateVirtualAccount
      parameters:
      - name: id
        in: path
        description: Identifies a _Virtual Account_.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
        example: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  enum:
                  - closed
                  example: closed
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/update_va_status_resp'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_400_1'
              examples:
                Invalid Status:
                  value:
                    errors:
                      status:
                      - must be a valid status value
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_401'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_403_inactive'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/virtual_account_not_found'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_409_object'
              examples:
                has_active_payids:
                  summary: Cannot close with active PayIDs
                  value:
                    errors:
                      error: Cannot close a Virtual Account with active PayIDs registered.
                      code: has_active_payids
                      pay_ids:
                      - f7aa99c9-4556-48da-aab1-39470fd933ab
                      - f2aa99c9-4556-48da-aab1-39470fd9333b
                update_in_progress:
                  summary: Cannot have concurrent updates
                  value:
                    errors:
                      error: An update for this Virtual Account is already in progress. Please try again later.
                      code: update_in_progress
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_500'
components:
  schemas:
    update_va_status_resp:
      type: object
      properties:
        id:
          description: Identifies the _Virtual Account_.
          type: string
          format: uuid
          example: 46deb476-c1a6-41eb-8eb7-26a695bbe5bc
        message:
          type: string
          example: Virtual Account update has been accepted for processing
        links:
          type: object
          properties:
            self:
              type: string
              example: /virtual_accounts/46deb476-c1a6-41eb-8eb7-26a695bbe5bc
    update_virtual_account_account_name_request:
      type: object
      required:
      - account_name
      properties:
        account_name:
          $ref: '#/components/schemas/virtual_account_account_name'
    inline_response_409:
      properties:
        wallet_account_id:
          type: string
          example: Provided wallet_account_id is already associated with an active or pending activation virtual account
    virtual_account_not_found:
      properties:
        errors:
          type: string
          example: Virtual Account does not exist.
    aka_names:
      type: array
      items:
        $ref: '#/components/schemas/aka_name'
      maximum: 3
      minimum: 0
      description: A list of AKA Names.
      example:
      - Realestate Agency X
      - Realestate Agency X of PropTech Marketplace
    inline_response_403_inactive:
      properties:
        errors:
          type: string
          example: Cannot update a Virtual Account that isn't active.
    virtual_accounts_list:
      type: object
      properties:
        virtual_accounts:
          type: array
          items:
            $ref: '#/components/schemas/virtual_account'
        meta:
          type: object
          properties:
            total:
              type: number
              example: 2
    update_virtual_account_aka_names_request:
      type: object
      required:
      - aka_names
      properties:
        aka_names:
          $ref: '#/components/schemas/aka_names'
    inline_response_500:
      properties:
        errors:
          type: string
          example: An error occurred processing your request. Please try again.
    virtual_account:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 46deb476-c1a6-41eb-8eb7-26a695bbe5bc
        routing_number:
          type: string
          format: numeric
          minLength: 6
          maxLength: 6
          example: 123456
        account_number:
          type: string
          format: numeric
          minLength: 9
          maxLength: 9
          example: 100000017
        currency:
          type: string
          format: alphabets
          example: AUD
        user_external_id:
          type: string
          format: uuid
          example: 46deb476-c1a6-41eb-8eb7-26a695bbe5bc
        wallet_account_id:
          type: string
          format: uuid
          example: 46deb476-c1a6-41eb-8eb7-26a695bbe5bc
        status:
          type: string
          enum:
          - active
          - pending_activation
          - activation_failed
          - disabled
          - closed
          example: active
        created_at:
          type: string
          format: date-time
          example: '2020-04-27T20:28:22.378Z'
        updated_at:
          type: string
          format: date-time
          example: '2020-04-27T20:28:22.378Z'
        account_type:
          type: string
          enum:
          - NIND
          maxLength: 4
          example: NIND
        full_legal_account_name:
          type: string
          maxLength: 140
          example: Prop Tech Marketplace
        account_name:
          $ref: '#/components/schemas/virtual_account_account_name'
        aka_names:
          $ref: '#/components/schemas/aka_names'
        merchant_id:
          $ref: '#/components/schemas/merchant_id'
    create_virtual_account_request:
      type: object
      properties:
        account_name:
          $ref: '#/components/schemas/virtual_account_account_name'
        aka_names:
          $ref: '#/components/schemas/aka_names'
    inline_response_409_object:
      properties:
        errors:
          type: object
          properties:
            error:
              type: string
              example: Cannot close a Virtual Account with active PayIDs registered.
            code:
              type: string
              example: has_active_payids
            pay_ids:
              type: array
              items:
                type: string
                example: f7aa99c9-4556-48da-aab1-39470fd933ab
          required:
          - error
          - code
    inline_response_400_deprecated:
      properties:
        errors:
          type: string
          example: 'invalid format for url param: id'
    merchant_id:
      type: string
      maxLength: 35
      description: An identifier that links a _Virtual Account_ to a merchant. This is used in CoP lookups.
      example: 46deb476c1a641eb8eb726a695bbe5bc
    virtual_account_account_name:
      type: string
      maxLength: 140
      description: A name given for a _Virtual Account_. This is used in CoP lookups.
      example: Real Estate Agency X
    inline_response_401:
      properties:
        errors:
          type: string
          example: Invalid or missing authorisation token
    aka_name:
      type: string
      maxLength: 140
      description: An alias for a _Virtual Account_. This is used in CoP lookups.
      example: Realestate Agency X
    inline_response_409_patch:
      properties:
        errors:
          type: string
          example: An update for this Virtual Account is already in progress. Please try again later.
    wallet_account_not_found:
      properties:
        errors:
          type: string
          example: Wallet Account does not exist.
    inline_response_400_1:
      properties:
        errors:
          type: object
    inline_response_403_va:
      properties:
        errors:
          type: object
          properties:
            virtual_accounts:
              type: array
              items:
                type: string
                example: Feature not available
x-explorer-enabled: false
x-samples-languages:
- curl
- c#
- ruby
- php
- javascript
- csharp
- go