BanQu Asset Transfers API

Asset transfers from one owner to another

Operations 12

POST /assets/{assetId}/transfers
GET /assets/{assetId}/history
GET /assets/{assetId}/holders
POST /assets/{assetId}/holders
GET /assets/{assetId}/sources
POST /assets/{assetId}/transfers/batch
GET /transfers
GET /transfers/{transferId}
GET /transfers/{transferId}/sources
POST /transfers/{transferId}/confirmReceipt
POST /transfers/{transferId}/rejectReceipt
POST /transfers/{transferId}/resendClaimToken

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/banqu-asset-transfers-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

banqu-asset-transfers-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: BanQu Asset Transfers API
  version: 3.3.4
  description: The BanQu API is organized around [REST](http://en.wikipedia.org/wiki/Representational_State_Transfer). Our API is designed to have predictable, resource-oriented URLs and to use HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP verbs, which can be understood by off-the-shelf HTTP clients, and [JSON](http://www.json.org) for input and output.
servers:
- url: https://banqu.app:443/api/v1
security:
- Bearer: []
tags:
- name: Asset Transfers
  description: Asset transfers from one owner to another
paths:
  /assets/{assetId}/transfers:
    post:
      description: Initiate asset transfer
      tags:
      - Asset Transfers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetTransferRequest'
      parameters:
      - in: path
        name: assetId
        schema:
          type: string
        required: true
      responses:
        '201':
          $ref: '#/components/responses/201'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
  /assets/{assetId}/history:
    get:
      description: Get asset history
      tags:
      - Asset Transfers
      parameters:
      - in: path
        name: assetId
        schema:
          type: string
        required: true
      responses:
        '200':
          description: List of asset history records
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AssetHistory'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
  /assets/{assetId}/holders:
    parameters:
    - in: path
      name: assetId
      schema:
        type: string
      required: true
    get:
      description: List asset holders
      tags:
      - Asset Transfers
      responses:
        '200':
          description: List of asset holders
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AssetHolder'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
    post:
      description: Deposit asset to account
      tags:
      - Asset Transfers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DepositAssetRequest'
      responses:
        '204':
          $ref: '#/components/responses/204'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
  /assets/{assetId}/sources:
    parameters:
    - in: path
      name: assetId
      schema:
        type: string
      required: true
    get:
      description: List operations that can be used as sources for transfers of this asset
      tags:
      - Asset Transfers
      parameters:
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      - name: sortBy
        in: query
        schema:
          type: string
        description: Comma-separated list of fields to sort the collection by (i.e. "status:asc,created:desc"; if not specified, will be sorted by transfer date)
        required: false
      - $ref: '#/components/parameters/Search'
      - in: query
        name: includeNonPositive
        schema:
          type: boolean
          default: false
        description: Include operations with zero or negative available quantity when double-sourcing is allowed
      - in: query
        name: filter
        schema:
          type: string
        description: Serialized (custom format) transfer properties filter
      responses:
        '200':
          description: List of available operations that can serve as sources
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AvailableOperationSource'
          headers:
            X-Total-Count:
              schema:
                type: number
              description: Total number of records available for paging purposes
            X-Total-Before-Filter:
              schema:
                type: number
              description: Total count before applying search or filters
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
  /assets/{assetId}/transfers/batch:
    post:
      description: Initiate multiple asset transfers
      tags:
      - Asset Transfers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewMultipleTransfer'
      parameters:
      - in: path
        name: assetId
        schema:
          type: string
        required: true
      responses:
        '200':
          description: List of asset transactions
          content:
            application/json:
              schema:
                type: object
                properties:
                  initiated:
                    type: number
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
  /transfers:
    get:
      description: List asset transfers
      tags:
      - Asset Transfers
      parameters:
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/SortBy'
      - name: owner
        in: query
        schema:
          type: string
          enum:
          - own
          - sub
          - any
        description: Filter transfers by owner. One of [me, sub] for own and sub account transfers. If omitted, not filtered by owner
      - name: assetId
        in: query
        description: Filter transfers by one `assetId`. Cannot be specified together with `assetIds` param
        schema:
          type: string
        required: false
      - name: assetIds
        description: Filter transfers by one or multiple `assetId`'s. Multiple assetId values should be separated by commas. Cannot be specified together with `assetId` param
        in: query
        schema:
          type: string
        required: false
      - name: since
        description: Get transfer after specific time. The value should contain a valid JavaScript Timestamp
        in: query
        schema:
          type: number
        required: false
      - name: till
        description: Get transfer before specific time. The value should contain a valid JavaScript Timestamp
        in: query
        schema:
          type: number
        required: false
      - name: accountIds
        description: Filter transfers by one or multiple `accountId`'s. Multiple accountId values should be separated by commas
        in: query
        schema:
          type: string
        required: false
      - name: includeReverted
        description: Include reverted transfers in output. Defaults to `false`
        in: query
        required: false
        schema:
          type: boolean
      - name: sourcesGroupingMethod
        in: query
        schema:
          type: string
          enum:
          - precise
          - fifo
      - $ref: '#/components/parameters/AssetCodes'
      - $ref: '#/components/parameters/TransactionKind'
      responses:
        '200':
          description: List of account transfers
          content:
            application/json:
              schema:
                type: array
                title: Transfers
                items:
                  $ref: '#/components/schemas/AnyAssetOperation'
          headers:
            X-Total-Count:
              schema:
                type: number
              description: Total number of records available for paging purposes
        '204':
          $ref: '#/components/responses/204'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
  /transfers/{transferId}:
    get:
      description: Get asset operation by id in own account
      tags:
      - Asset Transfers
      parameters:
      - name: transferId
        in: path
        schema:
          type: string
        required: true
      responses:
        '200':
          description: Asset operation details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnyAssetOperation'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
  /transfers/{transferId}/sources:
    get:
      description: List asset transfer sources
      tags:
      - Asset Transfers
      parameters:
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/SortBy'
      - name: participantsType
        in: query
        schema:
          type: string
          enum:
          - all
          - last
          default: all
        required: false
      - name: transferId
        in: path
        schema:
          type: string
        required: true
      - name: sourcesGroupingMethod
        in: query
        schema:
          type: string
          enum:
          - precise
          - fifo
      responses:
        '200':
          description: List of transfers that provided an amount of asset that was transferred in given transfer
          content:
            application/json:
              schema:
                type: array
                title: Transfers
                items:
                  $ref: '#/components/schemas/AnyAssetOperation'
          headers:
            X-Total-Count:
              schema:
                type: number
              description: Total number of records available for paging purposes
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
  /transfers/{transferId}/confirmReceipt:
    post:
      description: Confirm transfer receiving
      tags:
      - Asset Transfers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfirmTransferReceipt'
      parameters:
      - in: path
        name: transferId
        schema:
          type: string
        required: true
      responses:
        '204':
          $ref: '#/components/responses/204'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
  /transfers/{transferId}/rejectReceipt:
    post:
      description: Reject transfer receiving
      tags:
      - Asset Transfers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RejectTransferReceipt'
      parameters:
      - in: path
        name: transferId
        schema:
          type: string
        required: true
      responses:
        '204':
          $ref: '#/components/responses/204'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
  /transfers/{transferId}/resendClaimToken:
    post:
      description: Resend claim token for pending transfer
      tags:
      - Asset Transfers
      parameters:
      - in: path
        name: transferId
        schema:
          type: string
        required: true
      responses:
        '204':
          $ref: '#/components/responses/204'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
components:
  schemas:
    PaymentDestinationType:
      title: Destination Type
      description: mobile for payments by phone number; payCode for 6DOT50 partner transfer
      enum:
      - mobile
      - new-mobile
      - payCode
    GeoCoordinates:
      type: object
      properties:
        lat:
          type: number
          format: double
          minimum: -90
          maximum: 90
        lon:
          type: number
          format: double
          minimum: -180
          maximum: 180
      additionalProperties: false
      required:
      - lat
      - lon
      example:
        lat: 37.7749
        lon: -122.4194
    TransformingAsset:
      type: object
      additionalProperties: false
      properties:
        id:
          $ref: '#/components/schemas/Id'
        code:
          $ref: '#/components/schemas/AssetCode'
        description:
          $ref: '#/components/schemas/AssetDescription'
        uom:
          $ref: '#/components/schemas/AssetUom'
      required:
      - id
      - code
      - uom
    Attachments:
      type: array
      items:
        $ref: '#/components/schemas/Attachment'
    PaymentDestination:
      oneOf:
      - $ref: '#/components/schemas/AssetMobileDestination'
      - $ref: '#/components/schemas/AssetAgencyDestination'
    AssetDescription:
      type: string
      minLength: 0
      maxLength: 200
    ImmutableTimestamp:
      type: number
      readOnly: true
      description: Number of milliseconds elapsed since January 1, 1970 00:00:00 UTC
      example: 1568894551000
    AssetUom:
      title: Asset Unit of Measurement
      type: string
      enum:
      - BR
      - BO
      - BX
      - BU
      - CN
      - CA
      - CH
      - DO
      - EA
      - FO
      - FT
      - GA
      - GR
      - HR
      - JA
      - KG
      - KK
      - LT
      - Q3
      - MR
      - MG
      - M4
      - OZ
      - PK
      - PR
      - PC
      - LB
      - SJ
      - VS
      - YD
      example: KG
    AssetTransferRequest:
      type: object
      properties:
        receiverId:
          $ref: '#/components/schemas/Id'
        destinationProvider:
          $ref: '#/components/schemas/PaymentDestinationProvider'
        destinationId:
          $ref: '#/components/schemas/PaymentDestinationId'
        destinationType:
          $ref: '#/components/schemas/PaymentDestinationType'
        qty:
          type: number
          exclusiveMinimum: 0
        sourceOperations:
          $ref: '#/components/schemas/SourceOperations'
        properties:
          type: object
        message:
          type: string
        effectiveDate:
          $ref: '#/components/schemas/EffectiveDate'
        effectiveLocation:
          $ref: '#/components/schemas/EffectiveLocation'
      required:
      - receiverId
      - qty
      additionalProperties: false
    PaymentDestinationProvider:
      title: Payment Destination Provider
      description: Payment provider where the payment should be delivered to
      type: string
      enum:
      - banqu-agency
      - mtn-zambia
      - 6dot50pay-zaf
      - mtn-uganda
      - tigo-tanzania
      - celbux-zaf
      - airtel
      - zamtel
      - vodacom
    ConfirmTransferReceipt:
      type: object
      properties:
        quantity:
          title: Quantity
          type: number
          example: 1
        comment:
          title: Rejection comment
          type: string
          maxLength: 40
          example: Part of it was lost
      required:
      - quantity
    AssetTransferOperation:
      type: object
      title: Asset Transfer
      description: Movement of some asset amount between two accounts, denoted `sender` and `receiver`
      properties:
        isDraft:
          type: boolean
          enum:
          - false
          writeOnly: true
        id:
          $ref: '#/components/schemas/ImmutableId'
        transactionId:
          $ref: '#/components/schemas/ImmutableId'
        direction:
          title: Transfer Direction
          type: string
          enum:
          - in
          - out
          readOnly: true
        assetId:
          $ref: '#/components/schemas/Id'
        exchangingAssetId:
          allOf:
          - $ref: '#/components/schemas/Id'
          - description: ID of the asset being used as a payment for the current transfer
        code:
          allOf:
          - $ref: '#/components/schemas/AssetCode'
          - readOnly: true
        description:
          allOf:
          - $ref: '#/components/schemas/AssetDescription'
          - readOnly: true
        uom:
          allOf:
          - $ref: '#/components/schemas/AssetUom'
          - readOnly: true
        qty:
          title: Quantity
          type: number
          example: 1
          readOnly: true
        quantity:
          title: Amount to be transferred
          type: number
          minimum: 0
          writeOnly: true
        isCredit:
          title: Is Credit Asset
          type: boolean
          description: Indicates if "Credit" type of asset was transferred
          readOnly: true
        sent:
          $ref: '#/components/schemas/ImmutableTimestamp'
        claimToken:
          type: string
          readOnly: true
        hasClaimToken:
          type: boolean
          readOnly: true
        claimed:
          $ref: '#/components/schemas/ImmutableTimestamp'
        received:
          $ref: '#/components/schemas/ImmutableTimestamp'
        message:
          title: Message to Receiver
          type: string
          description: Optional message for transfer receiver
          maxLength: 1024
        price:
          title: Asset Price
          type: number
          minimum: 0
        priceCurrency:
          title: Asset Price Currency
          type: string
          minLength: 3
          maxLength: 3
          example: USD
        sender:
          title: Sender
          type: object
          properties:
            id:
              title: Sender ID
              type: string
              minLength: 32
              maxLength: 32
              example: '00000000000000000000000000000000'
            name:
              title: Sender Name
              type: string
            isOrg:
              title: Sender is Org
              type: boolean
            externalId:
              title: External Id
              type: string
          readOnly: true
        senderId:
          allOf:
          - $ref: '#/components/schemas/Id'
          - writeOnly: true
        receiver:
          type: object
          title: Receiver
          properties:
            id:
              title: Receiver ID
              type: string
              minLength: 32
              maxLength: 32
              example: '00000000000000000000000000000000'
            name:
              title: Receiver Name
              type: string
            isOrg:
              title: Receiver is Org
              type: boolean
            photoUrl:
              title: Receiver Photo
              type: string
              format: url
            photoEtag:
              title: Receiver Photo ETag
              type: string
            externalId:
              title: External Id
              type: string
          readOnly: true
        receiverId:
          allOf:
          - $ref: '#/components/schemas/Id'
          - writeOnly: true
        destination:
          $ref: '#/components/schemas/PaymentDestination'
        initiatedBy:
          type: object
          title: Initiated By
          description: Account that initiated the transfer
          properties:
            id:
              $ref: '#/components/schemas/ImmutableId'
            name:
              title: Initiated By
              type: string
          readOnly: true
        initiatedByUser:
          type: object
          title: Initiated By User
          description: User that initiated the transfer
          properties:
            id:
              title: Initiated By User ID
              type: string
              minLength: 32
              maxLength: 32
              example: '00000000000000000000000000000000'
            name:
              title: Initiated By User
              type: string
          readOnly: true
        agency:
          type: object
          title: Agency
          description: For transfers sent to a BanQu Agency, the field contains Agency account that made the cash out
          properties:
            id:
              title: Agency ID
              type: string
              minLength: 32
              maxLength: 32
              example: '00000000000000000000000000000000'
            name:
              type: string
            address:
              type: string
          readOnly: true
        agent:
          type: object
          title: Agent
          description: For transfers sent to a BanQu Agency, the field contains Agent that made the cash out
          properties:
            id:
              title: Agent ID
              type: string
              minLength: 32
              maxLength: 32
              example: '00000000000000000000000000000000'
            name:
              title: Agent Name
              type: string
          readOnly: true
        properties:
          type: object
          title: Transfer Properties
          description: Key-value pairs with custom transfer properties
          additionalProperties: true
          example:
            poNumber: '000001'
            stockCode: 7b35e21b717844
        assetAttachments:
          allOf:
          - $ref: '#/components/schemas/Attachments'
          - readOnly: true
        draft:
          type: boolean
          description: Flag that indicates the transfer is not completed. Usually until it is confirmed by a receiver
          readOnly: true
        sourceOperations:
          $ref: '#/components/schemas/SourceOperations'
        explicitAvailableQty:
          type: number
          description: Amount that wasn't yet used as an explicit source for another operation over same asset in receiver's account. Confirmation with a changed quantity affects this number too
          readOnly: true
        availableQty:
          type: number
          description: Amount that wasn't yet used as an explicit and/or implicit source for another operation over same asset in receiver's account
          readOnly: true
        receivedQty:
          type: number
          description: Amount that was confirmed by receiver. Undefined until confirmation
          readOnly: true
        receiverComment:
          type: string
          description: Optional text message from the user who confirmed transfer
          readOnly: true
        partiallyConfirmedQty:
          type: number
          description: Defines absolute confirmed quantity of a partially confirmed transfer. Example, initial transfer has amount 10kg. It was split into 3kg and 7 kg transfers upstream. The last transfer was confirmed at 90%. partiallyConfirmedQty will equal 6.3kg (90% of 7kg). partiallyConfirmedShare will equal 0.9
          readOnly: true
        partiallyConfirmedShare:
          type: number
          description: A transfer amount can be explicitly sourced into different batches (upstream). When cascade confirmation is ON this can result in partial confirmation of initial transfer quantity. This property defines what fraction of this transfer was confirmed
          readOnly: true
        sourcesCount:
          allOf:
          - $ref: '#/components/schemas/SourcesCount'
          - readOnly: true
        effectiveDate:
          $ref: '#/components/schemas/EffectiveDate'
        effectiveLocation:
          $ref: '#/components/schemas/EffectiveLocation'
      additionalProperties: false
      required:
      - senderId
      - receiverId
      - assetId
      - quantity
    AssetHistory:
      type: array
      items:
        type: object
        properties:
          initialBalance:
            type: number
          totalQty:
            type: number
          transfers:
            type: array
            items:
              type: string
          startTime:
            $ref: '#/components/schemas/Timestamp'
          endTime:
            $ref: '#/components/schemas/Timestamp'
    Id:
      title: Id
      type: string
      minLength: 32
      maxLength: 32
      example: '00000000000000000000000000000000'
    EffectiveLocation:
      allOf:
      - $ref: '#/components/schemas/GeoCoordinates'
      - title: Effective Transfer Geo Location
        description: The effective location coordinates of a transfer instead of an automatically determined
    NewMultipleTransfer:
      type: array
      items:
        type: object
        properties:
          qty:
            type: number
            exclusiveMinimum: 0
          receiver:
            type: object
            properties:
              id:
                $ref: '#/components/schemas/Id'
              email:
                type: string
              phoneNumber:
                type: string
            additionalProperties: false
          destinationProvider:
            $ref: '#/components/schemas/PaymentDestinationProvider'
          destinationId:
            title: Agency ID for BanQu agency or nothing for any BanQu agency or MTN phone number
            type: string
          properties:
            type: object
          message:
            type: string
          preventNotify:
            type: boolean
          effectiveDate:
            $ref: '#/components/schemas/EffectiveDate'
          effectiveLocation:
            $ref: '#/components/schemas/EffectiveLocation'
        required:
        - receiver
        - qty
        additionalProperties: false
    AssetMobileDestination:
      type: object
      title: Mobile Payment Destination
      description: Mobile wallet where the monetary transfer was sent to
      properties:
        provider:
          $ref: '#/components/schemas/PaymentDestinationProvider'
        id:
          $ref: '#/components/schemas/PaymentDestinationId'
        type:
          $ref: '#/components/schemas/PaymentDestinationType'
      required:
      - id
      - provider
      readOnly: true
    DateTime:
      type: string
      format: date-time
    ProfileProperty:
      title: Profile Property
      type: object
      properties:
        type:
          type: string
        value:
          type: string
          minLength: 1
        primary:
          type: boolean
      required:
      - value
    AssetTransformationOperation:
      type: object
      description: Operation that indicates asset(s) transformation into an arbitrary amount of some different asset(s)
      properties:
        id:
          $ref: '#/components/schemas/Id'
        transactionId:
          $ref: '#/components/schemas/Id'
        assetId:
          $ref: '#/components/schemas/Id'
        code:
          $ref: '#/components/schemas/AssetCode'
        description:
          $ref: '#/components/schemas/AssetDescription'
        uom:
          $ref: '#/components/schemas/AssetUom'
        sources:
          type: array
          description: Transformed assets. For each transformed asset there is a separate operation within the transaction. This list always includes asset transformed by this operation
          items:
            $ref: '#/components/schemas/TransformingAsset'
        destinations:
          type: array
          description: Resulting assets. This list always includes resulting asset from this operation
          items:
            $ref: '#/components/schemas/TransformingAsset'
        direction:
          type: string
        qty:
          type: number
          minimum: 0
        sent:
          type: number
        sourceOperations:
          $ref: '#/components/schemas/SourceOperations'
        sourcesCount:
          $ref: '#/components/schemas/SourcesCount'
        creator:
          type: object
          properties:
            id:
              $ref: '#/components/schemas/ImmutableId'
            name:
              type: string
        creatorUser:
          type: object
          properties:
            id:
              $ref: '#/components/schemas/ImmutableId'
            name:
              type: string
        holder:
          type: object
          properties:
            id:
              $ref: '#/components/schemas/ImmutableId'
            name:
              type: string
      required:
      - id
      - transactionId
      - assetId
      - code
      - uom
      - destinations
      - direction
      - qty
      - sent
    SourcesCount:
      type: number
      description: Indicates number of operations that serve as explicit or implicit sources for this asset operation. Appears in the object when request contains sourcesGroupingMethod in query
    AnyAssetOperation:
      oneOf:
      - $ref: '#/components/schemas/AssetTransferOperation'
      - $ref: '#/components/schemas/AssetTransformationOperation'
      - $ref: '#/components/schemas/AssetDeposit'
    DepositAssetRequest:
      type: object
      properties:
        holderId:
          $ref: '#/components/schemas/Id'
        qty:
          type: number
          exclusiveMinimum: 0
        message:
          type: string
        effectiveDate:
          $ref: '#/components/schemas/EffectiveDate'
        effectiveLocation:
          $ref: '#/components/schemas/EffectiveLocation'
      additionalProperties: false
      required:
      - holderId
      - qty
    Timestamp:
      type: number
      description: Number of milliseconds elapsed since January 1, 1970 00:00:00 UTC
      example: 1568894551000
    PaymentDestinationId:
      title: Destination Identifier
      description: Destination phone number for mobile providers; BanQu agency ID for banqu-agency provider
      type: string
    Attachment:
      type: object
      additionalProperties: false
      properties:
        downloadUrl:
          type: string
          format: url
        fileName:
          type: string
          minLength: 1
        fileSize:
          type: number
          minimum: 0
        mimeType:
          type: string
          minLength: 1
          example: image/jpeg
        md5:
          type: string
          minLength: 32
          maxLength: 32
          pattern: ^[a-f0-9]{32}$
      required:
      - downloadUrl
    ImmutableId:
      type: string
      readOnly: true
      minLength: 32
      maxLength: 32
      example: '00000000000000000000000000000000'
    AvailableOperationSource:
      type: object
      description: Operation that can be reused as a source for another asset transfer
      properties:
        id:
          $ref: '#/components/schemas/ImmutableId'
        type:
          type: string
          enum:
          - transfer
          - deposit
          - transformation-result
        qty:
          type: number
          description: Total quantity of the source operation
        availableQty:
          type: number
          description: Quantity that remains available to be used as a source
        uom:
          $ref: '#/components/schemas/AssetUom'
        code:
          $ref: '#/components/schemas/AssetCode'
        sent:
          type: number
          description: Timestamp when the source operation was initiated
        location:
          $ref: '#/components/schemas/GeoCoordinates'
        message:
          type: string
        transactionId:
          $ref: '#/components/schemas/Id'
        sender:
          type: object
          properties:
            id:
              $ref: '#/components/schemas/ImmutableId'
            name:
              type: string
            isOrg:
              type: boolean
        senderUser:
          type: object
          properties:
            id:
              $ref: '#/components/schemas/ImmutableId'
            name:
              type: string
        properties:
          type: object
          description: Additional transfer properties captured on the source operation
        propertiesPreviewFields:
          type: array
          description: Resolved preview field

# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/banqu/refs/heads/main/openapi/banqu-asset-transfers-api-openapi.yml