> ## Documentation Index
> Fetch the complete documentation index at: https://cobo.com/products/agentic-wallet/manual/llms.txt
> Use this file to discover all available pages before exploring further.

# Transfer tokens

> This operation initiates a token transfer from the specified wallet.

You need to provide `dst_addr`, `amount`, and `token_id`. The `chain_id` is automatically resolved from `token_id`.

Supply `request_id` to enable idempotency. If a transfer with the same `request_id` already exists for the same principal, the existing record is returned with `idempotent=true`.

The operation returns `status=200` (`PENDING_APPROVAL`) when an approval policy requires review before execution. Use the `pending_operation_id` in the response to track and resolve the approval.

<Note>Policy evaluation runs before submission. The operation returns an error if a policy denies the transfer.</Note>



## OpenAPI

````yaml post /api/v1/wallets/{wallet_uuid}/transfer
openapi: 3.1.0
info:
  title: Cobo Agentic Wallet Service
  description: Unified wallet engine for human and agent principals
  version: 1.3.0
servers: []
security: []
paths:
  /api/v1/wallets/{wallet_uuid}/transfer:
    post:
      tags:
        - Transactions
      summary: Transfer tokens
      description: >-
        This operation initiates a token transfer from the specified wallet.


        You need to provide `dst_addr`, `amount`, and `token_id`. The `chain_id`
        is automatically resolved from `token_id`.


        Supply `request_id` to enable idempotency. If a transfer with the same
        `request_id` already exists for the same principal, the existing record
        is returned with `idempotent=true`.


        The operation returns `status=200` (`PENDING_APPROVAL`) when an approval
        policy requires review before execution. Use the `pending_operation_id`
        in the response to track and resolve the approval.


        <Note>Policy evaluation runs before submission. The operation returns an
        error if a policy denies the transfer.</Note>
      operationId: transfer_tokens
      parameters:
        - name: wallet_uuid
          in: path
          required: true
          schema:
            type: string
            format: uuid
            description: >-
              The UUID of the wallet to transfer tokens from. Retrieve this
              value from the `id` field returned when the wallet was created.
            title: Wallet Uuid
          description: >-
            The UUID of the wallet to transfer tokens from. Retrieve this value
            from the `id` field returned when the wallet was created.
        - name: X-API-Key
          in: header
          required: false
          schema:
            title: X-Api-Key
            type: string
            nullable: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransferCreate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardResponse_TransferSubmitResult_'
        '202':
          description: Accepted - Pending Approval
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardResponse_TransferSubmitResult_'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WrappedValidationError'
components:
  schemas:
    TransferCreate:
      properties:
        dst_addr:
          type: string
          maxLength: 255
          minLength: 1
          title: Dst Addr
          description: The destination on-chain address.
        amount:
          type: string
          maxLength: 100
          minLength: 1
          title: Amount
          description: The transfer amount as a decimal string (for example, `1.5`).
        token_id:
          type: string
          maxLength: 100
          minLength: 1
          title: Token Id
          description: >-
            The Cobo token ID to transfer (for example, `SETH`, `SETH_USDC`,
            `SOLDEV_SOL_USDC`). Use the List supported assets operation to
            retrieve all supported token IDs. Defaults to `SETH`.
          default: SETH
        chain_id:
          title: Chain Id
          description: The chain ID. Automatically resolved from `token_id` if omitted.
          type: string
          maxLength: 100
          nullable: true
        request_id:
          title: Request Id
          description: >-
            A client-supplied identifier for idempotency. If a transfer with the
            same `request_id` already exists for the same principal, the
            existing record is returned.
          type: string
          maxLength: 255
          nullable: true
        fee:
          anyOf:
            - $ref: '#/components/schemas/FeeRequest'
            - type: 'null'
          description: >-
            Optional custom fee parameters. If omitted, the network default is
            used.
        src_addr:
          title: Src Addr
          description: >-
            The source address to transfer from. If omitted, the server
            auto-selects the wallet address on this chain with the highest
            available `token_id` balance (explicit `src_addr` always takes
            precedence).
          type: string
          maxLength: 255
          nullable: true
        sponsor:
          title: Sponsor
          description: >-
            Whether to use Cobo Gasless (Fee Station) to cover gas fees. `true`:
            gas fees are sponsored. `false`: gas fees are paid from the wallet.
            Defaults to `true` for human-owned wallets, `false` for agent-owned
            wallets.
          type: boolean
          nullable: true
        gas_provider:
          title: Gas Provider
          description: >-
            The gas provider to use for sponsored transactions. If omitted, the
            server default is used.
          type: string
          maxLength: 50
          nullable: true
        description:
          title: Description
          description: >-
            Optional note stored locally and sent to WaaS as the transaction
            `description` (transfer).
          type: string
          maxLength: 512
          nullable: true
      type: object
      required:
        - dst_addr
        - amount
      title: TransferCreate
      description: Request payload for token transfer.
    StandardResponse_TransferSubmitResult_:
      properties:
        success:
          type: boolean
          title: Success
          default: true
        result:
          $ref: '#/components/schemas/TransferSubmitResult'
        suggestion:
          type: string
          title: Suggestion
          default: ''
        message:
          type: string
          title: Message
          default: ''
        meta:
          $ref: '#/components/schemas/PaginationMeta'
          nullable: true
      type: object
      required:
        - result
      title: StandardResponse[TransferSubmitResult]
    WrappedValidationError:
      title: WrappedValidationError
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
          default: false
          title: Success
        error:
          type: object
          title: Error
          required:
            - detail
          properties:
            detail:
              type: array
              title: Detail
              items:
                $ref: '#/components/schemas/ValidationError'
    FeeRequest:
      title: FeeRequest
      description: Fee parameters for a transaction. Discriminated by `fee_type`.
      oneOf:
        - $ref: '#/components/schemas/EIP1559FeeRequest'
        - $ref: '#/components/schemas/EVMLegacyFeeRequest'
        - $ref: '#/components/schemas/SOLFeeRequest'
    TransferSubmitResult:
      properties:
        id:
          title: Id
          description: >-
            User transaction UUID. This ID is created at submission time,
            including `pending_approval` cases.
          type: string
          format: uuid
          nullable: true
        idempotent:
          type: boolean
          title: Idempotent
          description: >-
            Whether this response was returned from a previously submitted
            request with the same `request_id`. `true`: idempotent replay.
            `false`: new submission.
          default: false
        request_id:
          title: Request Id
          description: >-
            Client-supplied request identifier used for idempotency and request
            correlation. This is not the transaction record ID.
          type: string
          nullable: true
        pending_operation_id:
          title: Pending Operation Id
          description: >-
            The pending operation ID when `status=pending_approval`. Use this to
            track the approval via the List pending operations operation.
          type: string
          format: uuid
          nullable: true
        approval_id:
          title: Approval Id
          description: >-
            The Approval V2 record ID when `status=pending_approval`. Use this
            to track the approval via the Approvals operations.
          type: string
          format: uuid
          nullable: true
        transaction_hash:
          title: Transaction Hash
          description: The on-chain transaction hash, if available.
          type: string
          nullable: true
        status:
          type: integer
          title: Status
          description: >-
            The user transaction status code (`UserTransactionStatus`). Typical
            values: 100 (pending approval), 300 (processing), 400 (pending), 900
            (success), 901 (failed), 902 (rejected), 903 (cancelled).
        status_display:
          type: string
          title: Status Display
          description: >-
            The human-readable user transaction status (for example,
            `Initiated`, `Processing`, `Success`, `Failed`).
          default: ''
      type: object
      required:
        - status
      title: TransferSubmitResult
      description: Transfer submission response payload.
    PaginationMeta:
      properties:
        total:
          title: Total
          type: integer
          nullable: true
        offset:
          title: Offset
          type: integer
          nullable: true
        limit:
          title: Limit
          type: integer
          nullable: true
        has_more:
          title: Has More
          type: boolean
          nullable: true
        after:
          title: After
          type: string
          nullable: true
        before:
          title: Before
          type: string
          nullable: true
      type: object
      title: PaginationMeta
      description: |-
        Pagination metadata for list responses.

        Supports both legacy offset-based and cursor-based pagination.
        Cursor fields (``has_more``, ``after``, ``before``) are populated for
        cursor-paginated endpoints.  Legacy fields (``offset``, ``limit``) are
        populated when the caller uses the deprecated ``offset`` parameter.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    EIP1559FeeRequest:
      properties:
        fee_type:
          type: string
          const: EVM_EIP_1559
          title: Fee Type
          description: The fee type. Must be `EVM_EIP_1559`.
          default: EVM_EIP_1559
        max_fee_per_gas:
          type: string
          minLength: 1
          title: Max Fee Per Gas
          description: The maximum total fee per gas, in wei.
        max_priority_fee_per_gas:
          type: string
          minLength: 1
          title: Max Priority Fee Per Gas
          description: The maximum priority fee (tip) per gas, in wei.
        gas_limit:
          title: Gas Limit
          description: >-
            The gas limit for this transaction. If omitted the backend estimates
            it.
          type: string
          nullable: true
        token_id:
          type: string
          maxLength: 100
          minLength: 1
          title: Token Id
          description: The token ID for fee payment.
      type: object
      required:
        - max_fee_per_gas
        - max_priority_fee_per_gas
        - token_id
      title: EIP1559FeeRequest
      description: Optional EIP-1559 fee parameters for transfers.
    EVMLegacyFeeRequest:
      properties:
        fee_type:
          type: string
          const: EVM_Legacy
          title: Fee Type
          description: The fee type. Must be `EVM_Legacy`.
          default: EVM_Legacy
        gas_price:
          type: string
          minLength: 1
          title: Gas Price
          description: The gas price, in wei.
        gas_limit:
          title: Gas Limit
          description: The gas limit for this transaction.
          type: string
          nullable: true
        token_id:
          type: string
          maxLength: 100
          minLength: 1
          title: Token Id
          description: The token ID for fee payment.
      type: object
      required:
        - gas_price
        - token_id
      title: EVMLegacyFeeRequest
      description: Optional EVM Legacy fee parameters for transfers.
    SOLFeeRequest:
      properties:
        fee_type:
          type: string
          const: SOL
          title: Fee Type
          description: The fee type. Must be `SOL`.
          default: SOL
        compute_unit_price:
          type: string
          minLength: 1
          title: Compute Unit Price
          description: The price per compute unit, in microlamports.
        compute_unit_limit:
          type: string
          minLength: 1
          title: Compute Unit Limit
          description: The maximum number of compute units for this transaction.
        token_id:
          type: string
          maxLength: 100
          minLength: 1
          title: Token Id
          description: The token ID for fee payment.
      type: object
      required:
        - compute_unit_price
        - compute_unit_limit
        - token_id
      title: SOLFeeRequest
      description: Optional Solana fee parameters for transfers.

````