> ## Documentation Index
> Fetch the complete documentation index at: https://docs.caminotreasury.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Transfers

> Paginated feed of all transfers (on-chain and fiat) for the organization under a single unified shape — wallet→wallet, bank→wallet (onramp), wallet→bank (offramp), and the USDC↔C0 deposit/withdraw pair. Each row has symmetric `from` and `to` sides; either side can be a wallet or a bank account. Sorted by `(createdAt, id)` descending. Cursor-paginated: pass `nextCursor` from the previous response to fetch the next page; `nextCursor: null` means no more pages.



## OpenAPI

````yaml /api-reference/openapi.json get /transfers
openapi: 3.1.0
info:
  title: Camino Treasury API
  description: >-
    API for managing treasury wallets, tracking transfers (on-chain and fiat) in
    a unified feed, depositing into C0, withdrawing to wallets, and claiming
    yield distributions.
  version: 1.0.0
servers:
  - url: https://api.caminotreasury.com/v1
security:
  - apiKeyAuth: []
paths:
  /transfers:
    get:
      tags:
        - Transfers
      summary: List Transfers
      description: >-
        Paginated feed of all transfers (on-chain and fiat) for the organization
        under a single unified shape — wallet→wallet, bank→wallet (onramp),
        wallet→bank (offramp), and the USDC↔C0 deposit/withdraw pair. Each row
        has symmetric `from` and `to` sides; either side can be a wallet or a
        bank account. Sorted by `(createdAt, id)` descending. Cursor-paginated:
        pass `nextCursor` from the previous response to fetch the next page;
        `nextCursor: null` means no more pages.
      operationId: listTransfers
      parameters:
        - name: limit
          in: query
          description: Number of results to return (1-200, default 50).
          schema:
            type: integer
            minimum: 1
            maximum: 200
            default: 50
        - name: cursor
          in: query
          description: >-
            Opaque cursor from a previous response's `nextCursor`. Omit for the
            first page.
          schema:
            type: string
      responses:
        '200':
          description: Paginated transfers
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                  - nextCursor
                  - count
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Transfer'
                  nextCursor:
                    type: string
                    nullable: true
                    description: >-
                      Opaque cursor for the next page, or null if this is the
                      last page.
                  count:
                    type: integer
                    description: Number of items in `data` (equal to `data.length`).
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  schemas:
    Transfer:
      type: object
      description: >-
        A transfer initiated by the organization. Covers wallet→wallet
        (on-chain), bank→wallet (Bridge onramp), and wallet→bank (Bridge
        offramp) under one unified shape. Each row has a symmetric `from` and
        `to` side.
      required:
        - id
        - from
        - to
        - status
        - transactionHash
        - createdAt
        - updatedAt
      properties:
        id:
          type: string
          format: uuid
          description: Camino-owned UUID.
        from:
          $ref: '#/components/schemas/TransferSide'
        to:
          $ref: '#/components/schemas/TransferSide'
        status:
          type: string
          enum:
            - pending
            - submitted
            - completed
            - failed
        transactionHash:
          type: string
          nullable: true
          description: >-
            On-chain hash once the wallet-side leg (if any) has been submitted;
            `null` otherwise.
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      example:
        id: 9c1a8b2e-4f3d-4a5b-8c6d-7e8f9a0b1c2d
        from:
          address: null
          bankAccount:
            id: 11111111-2222-3333-4444-555555555555
            bankName: Acme Bank
            accountOwnerName: Acme Corp
            accountNumberLast4: '1234'
          chainId: null
          currency: usd
          amount: '100.00'
        to:
          address: '0x742d35cc6634c0532925a3b844bc454e4438f44e'
          bankAccount: null
          chainId: 1
          currency: usdc
          amount: '99.50'
        status: pending
        transactionHash: null
        createdAt: '2026-05-20T12:00:00.000Z'
        updatedAt: '2026-05-20T12:03:42.000Z'
    TransferSide:
      type: object
      description: >-
        One side of a transfer. Exactly one of `address` (wallet) or
        `bankAccount` (bank) is populated.
      required:
        - address
        - bankAccount
        - chainId
        - currency
        - amount
      properties:
        address:
          type: string
          nullable: true
          description: >-
            Lowercase 0x-address when this side is a wallet; `null` when it's a
            bank account.
        bankAccount:
          type: object
          nullable: true
          description: >-
            Embedded display fields when this side is a bank account; `null`
            when it's a wallet. For the full record (routing number, currency,
            etc.) find the same `id` in `GET /v1/bank-accounts`.
          required:
            - id
            - bankName
            - accountOwnerName
            - accountNumberLast4
          properties:
            id:
              type: string
              format: uuid
            bankName:
              type: string
            accountOwnerName:
              type: string
            accountNumberLast4:
              type: string
        chainId:
          type: integer
          nullable: true
          description: Chain the wallet side lives on; `null` for bank sides.
        currency:
          type: string
          enum:
            - usdc
            - usdt
            - usd
            - c0
          description: >-
            Lowercase symbol. `usdt` only appears on legacy rows; new transfers
            use `usdc`, `usd`, or `c0`.
        amount:
          type: string
          description: >-
            Human-decimal string in the side's `currency`. The two sides may
            differ (Bridge fees/rate).
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Error message
        details:
          type: object
          description: Optional validation details
  responses:
    BadRequest:
      description: Bad Request - Invalid input
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized - Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Too Many Requests - Rate limit exceeded. Check the `Retry-After` header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key for authentication. Pass your key in the `x-api-key` header.

````