openapi: 3.0.0
info:
  title: Virtual Accounts and PayIDs
  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
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'
  '/virtual_accounts/{id}/pay_ids':
    post:
      tags:
       - PayIDs
      summary: Register PayID
      description: Register a _PayID_ for a given _Virtual Account_.
      operationId: registerPayID
      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
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/pay_id_request'
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/pay_id'
              example:
                "id": "46deb476-c1a6-41eb-8eb7-26a695bbe5bc"
                "pay_id": "jsmith@mydomain.com"
                "type": "EMAIL"
                "status": "pending_activation"
                "created_at": "2020-04-27T20:28:22.378Z"
                "updated_at": "2020-04-27T20:28:22.378Z"
                "details": {
                  "pay_id_name": "J Smith",
                  "owner_legal_name": "Mr John Smith"
                }
                "links": {
                  "self": "/pay_ids/46deb476-c1a6-41eb-8eb7-26a695bbe5bc",
                  "virtual_accounts": "/virtual_accounts/46deb476-c1a6-41eb-8eb7-26a695bbe5bc"
                }
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_400_1'
              examples:
                invalid_email_address:
                  value:
                    errors:
                      pay_id:
                          - pay_id should be a valid email address
                invalid_payid_domain:
                  value:
                    errors:
                      pay_id:
                        - invalid domain/sub-domain
                  description: Provided domain is not registered with the marketplace.
        '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'
              examples:
                Virtual Accounts unavailable:
                  value:
                    errors:
                      virtual_accounts:
                        - Feature not available
                PayID unavailable:
                  value:
                    errors:
                      payid_per_user:
                        - Feature not available
        '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_1'
              examples:
                Invalid Virtual Account Status:
                  value:
                    errors:
                        "Virtual account must be active to register payid"
                Invalid PayID Status:
                  value:
                    errors:
                        "Provided PayID is either pending activation or active already and associated with a virtual account"
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_500'
  '/pay_ids/{id}/status':
    patch:
      tags:
       - PayIDs
      summary: Update PayID Status
      description: Update the status of the _PayID_.
      operationId: updatePayIdStatus
      parameters:
        - name: id
          in: path
          description: Id of the _PayID_ resource.
          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
                  example: deregistered
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/deregister_pay_id'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_400_1'
              examples:
                Invalid Id:
                  value:
                    errors: "Invalid format for url parameter: id."
                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_va'
              examples:
                Virtual Accounts unavailable:
                  value:
                    errors:
                      virtual_accounts:
                        - Feature not available
                PayID unavailable:
                  value:
                    errors:
                      payid_per_user:
                        - Feature not available
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                properties:
                  errors:
                    type: string
                    example: PayID does not exist.
        '409':
          description: Conflict
          content:
            application/json:
              examples:
                In progress:
                  value:
                    errors: An update for this PayID is already in progress. Please try again later.
                Status not active:
                  value:
                    errors: PayID must be active to deregister.
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_500'
  '/pay_ids/{id}':
    get:
      tags:
        - PayIDs
      summary: Retrieve a PayID
      description: Retrieve the details of a specific _PayID_ using the unique id parameter `id`. Only one _PayID_ record is returned.
      operationId: getPayID
      parameters:
        - name: id
          in: path
          description: Id of the _PayID_ resource.
          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/pay_id'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_400'
        '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_pay_id'
              examples:
                PayID unavailable:
                  value:
                    errors:
                      payid_per_user:
                        - Feature not available
                Virtual Accounts unavailable:
                  value:
                    errors:
                      virtual_accounts:
                        - Feature not available
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_404_pay_id'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_500'
components:
  schemas:
    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'
    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
    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
    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"]
    aka_name:
      type: string
      maxLength: 140
      description: An alias for a _Virtual Account_. This is used in CoP lookups.
      example: Realestate Agency X
    update_virtual_account_aka_names_request:
      type: object
      required:
        - aka_names
      properties:
        aka_names:
          $ref: '#/components/schemas/aka_names'
    update_virtual_account_account_name_request:
      type: object
      required:
        - account_name
      properties:
        account_name:
          $ref: '#/components/schemas/virtual_account_account_name'
    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
    pay_id_request:
      required:
      - pay_id
      - type
      - details
      type: object
      properties:
        pay_id:
          type: string
          description: The PayID that is being registered.
          format: email
          example: jsmith@mydomain.com
          maxLength: 256
        type:
          type: string
          description: The type of PayID being registered.
          enum:
            - EMAIL
        details:
          type: object
          properties:
            pay_id_name:
              type: string
              description: Name that can be used to identify the entity registering the PayID.
              example: J Smith
              minLength: 1
              maxLength: 140
            owner_legal_name:
              type: string
              description: The full legal account name.
              example: Mr John Smith
              minLength: 1
              maxLength: 140
    pay_id:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 46deb476-c1a6-41eb-8eb7-26a695bbe5bc
        pay_id:
          type: string
          format: email
          example: jsmith@mydomain.com
        type:
          type: string
          enum:
            - EMAIL
          example: EMAIL
        status:
          type: string
          enum:
            - active
            - activation_failed
            - pending_activation
            - deregistered
          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'
        details:
          type: object
          properties:
            pay_id_name:
              type: string
              example: J Smith
            owner_legal_name:
              type: string
              example: Mr John Smith
        links:
          type: object
          properties:
            self:
              type: string
              example: '/pay_ids/46deb476-c1a6-41eb-8eb7-26a695bbe5bc'
            virtual_accounts:
              type: string
              example: '/virtual_accounts/46deb476-c1a6-41eb-8eb7-26a695bbe5bc'
    deregister_pay_id:
      type: object
      properties:
        id:
          description: Identifies the _PayID_.
          type: string
          format: uuid
          example: 46deb476-c1a6-41eb-8eb7-26a695bbe5bc
        message:
          type: string
          example: 'PayID deregistration has been accepted for processing'
        links:
          type: object
          properties:
            self:
              type: string
              example: '/pay_ids/46deb476-c1a6-41eb-8eb7-26a695bbe5bc'
    inline_response_400_deprecated:
      properties:
        errors:
          type: string
          example: "invalid format for url param: id"
    inline_response_400:
      properties:
        errors:
          type: string
          example: "Invalid format for url parameter: id."
    inline_response_400_1:
      properties:
        errors:
          type: object
    inline_response_401:
      properties:
        errors:
          type: string
          example: Invalid or missing authorisation token
    inline_response_403_inactive:
      properties:
        errors:
          type: string
          example: "Cannot update a Virtual Account that isn't active."
    inline_response_403_va:
      properties:
        errors:
          type: object
          properties:
            virtual_accounts:
              type: array
              items:
                type: string
                example: Feature not available
    inline_response_403_pay_id:
      properties:
        errors:
          type: object
          properties:
            payid_per_user:
              type: array
              items:
                type: string
                example: Feature not available
    inline_response_404_pay_id:
      properties:
        errors:
          type: string
          example: PayID does not exist.
    wallet_account_not_found:
      properties:
        errors:
          type: string
          example: Wallet Account does not exist.
    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
    inline_response_409_patch:
      properties:
        errors:
          type: string
          example: An update for this Virtual Account is already in progress. Please try again later.
    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_409_1:
      properties:
        errors:
          type: object
          properties:
            pay_id:
              type: string
              example: Provided PayID is either pending activation or active already and associated with a virtual account
    inline_response_500:
      properties:
        errors:
          type: string
          example: An error occurred processing your request. Please try again.
    virtual_account_not_found:
      properties:
        errors:
          type: string
          example: Virtual Account does not exist.
    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'
x-explorer-enabled: false
x-samples-languages:
  - curl
  - c#
  - ruby
  - php
  - javascript
  - csharp
  - go