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

> ## Agent Instructions
> Before reading these docs, install the relevant Circle Skill to get pre-loaded context — skills are LLM-optimized and cover architecture decisions, correct flows, and common pitfalls. In Claude Code: run /plugin marketplace add circlefin/skills then /plugin install circle-skills@circle. With Vercel Skills CLI: run npx skills add circlefin/skills. Available skills: use-usdc https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-usdc/SKILL.md (balances, transfers, approvals on EVM and Solana); EURC has no skill — see https://developers.circle.com/stablecoins/what-is-eurc.md; bridge-stablecoin https://github.com/circlefin/skills/blob/master/plugins/circle/skills/bridge-stablecoin/SKILL.md (crosschain transfers via CCTP, USDC, EURC, and third-party assets); use-arc https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-arc/SKILL.md (Arc chain config, contract deployment, USDC bridging — Arc docs: https://docs.arc.io/llms.txt); use-circle-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-circle-wallets/SKILL.md (choose wallet type); use-developer-controlled-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-developer-controlled-wallets/SKILL.md (custodial wallets for payouts and treasury); use-user-controlled-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-user-controlled-wallets/SKILL.md (embedded wallets with Web2 login); use-modular-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-modular-wallets/SKILL.md (smart contract wallets with passkeys and ERC-4337); use-gateway https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-gateway/SKILL.md (unified USDC balance, nanopayments); use-smart-contract-platform https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-smart-contract-platform/SKILL.md (deploy, interact, monitor contracts). Pair any skill with the Circle MCP server for live SDK signatures, contract addresses, and chain IDs: {"mcpServers":{"circle":{"url":"https://api.circle.com/v1/codegen/mcp"}}}.
> Read the product overview first. Each product has an overview explaining when and why to use it. Read it before quickstarts.
> Pick the right wallet type. Developer-controlled (you hold keys), user-controlled (end user holds keys via PIN/social login), or modular (smart contract wallets with passkeys). See https://developers.circle.com/wallets.md.
> Use CCTP V2 for crosschain transfers. CCTP natively transfers USDC and EURC via burn-and-mint, and supports permissionless wrapping of third-party assets via lock-and-mint. V1 is legacy; always use V2 unless V1 is specified or the chain requires it (Noble, Sui, and Aptos still require V1). Migration guide: https://developers.circle.com/cctp/migration-from-v1-to-v2.md.
> Use Bridge Kit for frontend bridging. Wraps CCTP with a simpler SDK for user-facing apps. Use CCTP directly for backend transfers.
> Gas Station vs Paymaster. Gas Station sponsors gas for Circle Wallet transactions. Paymaster lets users pay gas in USDC. Different use cases — read both overviews.
> Gateway Nanopayments for sub-cent payments. Gasless USDC micropayments down to $0.000001 via x402 and batched settlement. For pay-per-request APIs, AI agent payments, streaming.
> Look up USDC addresses per chain. Never hardcode — use https://developers.circle.com/stablecoins/usdc-contract-addresses.md.
> Prefer SDKs over raw API calls. Node.js and Python SDKs handle auth, retries, and errors.
> API key required. Bearer token in Authorization header. Testnet and mainnet use separate keys and may use different base URLs depending on the product.
> Set up webhooks when available. Most operations are async. Webhooks deliver transaction confirmations and state changes.
> When calling list endpoints, paginate using pageSize and pageAfter until no nextPageAfter cursor is returned—stopping at the first page silently misses records.
> Building an AI agent? Start with the Agent Stack—Circle CLI, agent wallets, and nanopayments built for autonomous use cases: https://developers.circle.com/agent-stack.md.

# List all loans

> Returns a paginated list of loans you own, sorted by `createDate`, most
recent first.




## OpenAPI

````yaml openapi/digital-asset-backed-borrowing.yaml get /v1/borrow/loans
openapi: 3.0.2
info:
  version: ${version}
  title: Digital Asset-Backed Borrowing API
  description: >
    The Digital Asset-Backed Borrowing API lets you borrow stablecoin liquidity
    against onchain collateral. It uses a dedicated wallet to hold collateral
    and borrowed funds, and Circle handles the onchain transactions. Write
    operations are asynchronous and return a job that can be polled for status.
servers:
  - url: https://api-sandbox.circle.com
  - url: https://api.circle.com
security: []
tags:
  - name: Borrow Wallets
    description: >-
      Provision and inspect the per-entity MSCA wallet that holds collateral and
      borrowed funds.
  - name: Borrow Loans
    description: Originate, inspect, repay, and add collateral to borrow positions.
  - name: Borrow Jobs
    description: Observe asynchronous onchain operations.
  - name: Borrow Markets
    description: Discover allowlisted lending markets.
paths:
  /v1/borrow/loans:
    get:
      tags:
        - Borrow Loans
      summary: List all loans
      description: |
        Returns a paginated list of loans you own, sorted by `createDate`, most
        recent first.
      operationId: listBorrowLoans
      parameters:
        - in: query
          name: status
          required: false
          schema:
            type: string
            enum:
              - active
              - closed
              - liquidated
              - failed
          description: Filter by loan status.
        - $ref: '#/components/parameters/PageBefore'
        - $ref: '#/components/parameters/PageAfter'
        - $ref: '#/components/parameters/PageSize'
      responses:
        '200':
          description: Successfully retrieved a list of loans.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                title: ListBorrowLoansResponse
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/OnchainLoan'
              examples:
                response:
                  value:
                    data:
                      - id: fc988ed5-c129-4f70-a064-e5beb7eb8e32
                        protocol: morpho
                        marketId: >-
                          0x3a85e6f1c2d3b4a596877869504132e1d0c9b8a7766554433221100ffeeddccbb
                        walletAddress: '0x742d35Cc6634C0532925a3b844Bc9e7595f9f68C'
                        protocolAddress: '0x33333aea097c193e66081E930c33020272b33333'
                        borrowAsset: USD
                        collateralAsset: CIRBTC
                        borrowDepositAddress: '0x5a0b4a11d3f9b2c1e8a7d6c5b4a39281f0e1d2c3'
                        collateralDepositAddress: '0xbb81dcaf9e7a6b5c4d3e2f1908172635445362718'
                        collateralAmount: '0.05'
                        debtAmount: '1000.00'
                        oraclePrice: '67234.51'
                        ltv: '0.30'
                        healthFactor: '2.85'
                        borrowApy: '0.0542'
                        status: active
                        createDate: '2026-06-20T14:22:00.000Z'
                        updateDate: '2026-06-21T09:00:00.000Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/NotAuthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      security:
        - bearerAuth: []
components:
  parameters:
    PageBefore:
      name: pageBefore
      description: >
        A collection ID value used for pagination.


        It marks the exclusive end of a page. When provided, the collection
        resource will return the next `n` items before

        the id, with `n` being specified by `pageSize`.


        The items will be returned in the natural order of the collection.


        The resource will return the first page if neither `pageAfter` nor
        `pageBefore` are specified.


        SHOULD NOT be used in conjuction with pageAfter.
      in: query
      required: false
      schema:
        type: string
    PageAfter:
      name: pageAfter
      description: >
        A collection ID value used for pagination.


        It marks the exclusive begin of a page. When provided, the collection
        resource will return the next `n` items after

        the id, with `n` being specified by `pageSize`.


        The items will be returned in the natural order of the collection.


        The resource will return the first page if neither `pageAfter` nor
        `pageBefore` are specified.


        SHOULD NOT be used in conjuction with pageBefore.
      in: query
      required: false
      schema:
        type: string
    PageSize:
      name: pageSize
      description: >
        Limits the number of items to be returned.


        Some collections have a strict upper bound that will disregard this
        value. In case the specified value is higher

        than the allowed limit, the collection limit will be used.


        If avoided, the collection will determine the page size itself.
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        example: 5
  headers:
    XRequestId:
      description: >-
        Universally unique identifier (UUID v4) for the request. Helpful for
        identifying a request when communicating with Circle support.
      schema:
        type: string
        format: uuid
        example: 2adba88e-9d63-44bc-b975-9b6ae3440dde
  schemas:
    OnchainLoan:
      type: object
      description: >
        A borrow position on a lending protocol. You can hold at most one borrow

        position per lending market on each protocol. Position values
        (`oraclePrice`,

        `ltv`, `healthFactor`, `borrowApy`, and amounts) reflect the most recent
        LTV

        monitoring snapshot. These values are not read live from the blockchain.
      required:
        - id
        - protocol
        - marketId
        - walletAddress
        - borrowAsset
        - collateralAsset
        - status
        - createDate
      properties:
        id:
          type: string
          format: uuid
          description: Identifier of the loan.
        protocol:
          type: string
          enum:
            - morpho
          description: Lending protocol.
        marketId:
          type: string
          description: Identifier of the lending market (protocol-specific).
        walletAddress:
          type: string
          description: The MSCA address that holds this position.
        protocolAddress:
          type: string
          description: >
            Onchain address of the lending protocol contract that holds this
            position,

            such as the Morpho Blue contract. Useful for verifying the position

            onchain.
          example: '0x33333aea097c193e66081E930c33020272b33333'
        borrowAsset:
          type: string
          description: |
            Circle currency code of the borrowed asset, such as `USD` for USDC.
            Distinct from the token symbol (`USDC`), which appears as a key in
            `wallet.depositAddresses`.
          example: USD
        collateralAsset:
          type: string
          description: >-
            Circle currency code of the collateral asset, such as `CIRBTC` for
            cirBTC.
          example: CIRBTC
        borrowDepositAddress:
          type: string
          description: Wallet deposit address that receives the borrowed funds.
        collateralDepositAddress:
          type: string
          description: >-
            Wallet deposit address that receives residual collateral after a
            position is partially liquidated.
        collateralAmount:
          type: string
          description: Collateral posted, in native token units (decimal string).
        debtAmount:
          type: string
          description: Outstanding debt, in native token units (decimal string).
        oraclePrice:
          type: string
          description: >
            Collateral price denominated in `borrowAsset` from the latest
            monitoring snapshot

            (decimal string).
        ltv:
          type: string
          description: >-
            Loan-to-value ratio from the latest snapshot (decimal string between
            `0.0` and `1.0`).
        healthFactor:
          type: string
          description: >
            Health factor from the latest snapshot (decimal string). Positions
            are

            liquidatable when this value drops below `1.0`.
        borrowApy:
          type: string
          description: >-
            Annualized borrow rate from the latest snapshot (decimal string,
            such as `0.0542`).
        status:
          type: string
          enum:
            - active
            - closed
            - liquidated
            - failed
          description: Status of the loan.
        liquidationDetectedAt:
          type: string
          format: date-time
          description: |
            Date and time when this position's liquidation was first detected.
            Present only for liquidated loans.
        liquidatedDebtAmount:
          type: string
          description: >
            Debt repaid by the liquidation, in native token units (decimal
            string). Present only

            for liquidated loans.
        liquidatedCollateralSeized:
          type: string
          description: >
            Collateral seized by the liquidator, in native token units (decimal
            string). Present

            only for liquidated loans.
        liquidationOraclePrice:
          type: string
          description: >
            Collateral price (denominated in `borrowAsset`) recorded at
            liquidation (decimal

            string). Present only for liquidated loans.
        createDate:
          type: string
          format: date-time
          description: Date and time when the loan was created.
        updateDate:
          type: string
          format: date-time
          description: Date and time when the loan was last updated.
      example:
        id: fc988ed5-c129-4f70-a064-e5beb7eb8e32
        protocol: morpho
        marketId: '0x3a85e6f1c2d3b4a596877869504132e1d0c9b8a7766554433221100ffeeddccbb'
        walletAddress: '0x742d35Cc6634C0532925a3b844Bc9e7595f9f68C'
        protocolAddress: '0x33333aea097c193e66081E930c33020272b33333'
        borrowAsset: USD
        collateralAsset: CIRBTC
        borrowDepositAddress: '0x5a0b4a11d3f9b2c1e8a7d6c5b4a39281f0e1d2c3'
        collateralDepositAddress: '0xbb81dcaf9e7a6b5c4d3e2f1908172635445362718'
        collateralAmount: '0.05'
        debtAmount: '1000.00'
        oraclePrice: '67234.51'
        ltv: '0.30'
        healthFactor: '2.85'
        borrowApy: '0.0542'
        status: active
        createDate: '2026-06-20T14:22:00.000Z'
        updateDate: '2026-06-21T09:00:00.000Z'
  responses:
    BadRequest:
      description: The request cannot be processed due to a client error.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/json:
          schema:
            type: object
            title: BadRequest
            required:
              - code
              - message
            properties:
              code:
                type: integer
                example: 400
              message:
                type: string
                example: Something went wrong.
            example:
              code: 400
              message: Bad request.
          examples:
            response:
              value:
                code: 400
                message: Bad request.
    NotAuthorized:
      description: >-
        The request has not been applied because it lacks valid authentication
        credentials.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/json:
          schema:
            type: object
            title: NotAuthorized
            required:
              - code
              - message
            properties:
              code:
                type: integer
                example: 400
              message:
                type: string
                example: Something went wrong.
            example:
              code: 401
              message: Malformed authorization.
          examples:
            response:
              value:
                code: 401
                message: Malformed authorization.
    Forbidden:
      description: >-
        The request provides authentication, but the authenticated user does not
        possess sufficient permissions for accessing this resource.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/json:
          schema:
            type: object
            title: Forbidden
            required:
              - code
              - message
            properties:
              code:
                type: integer
                example: 400
              message:
                type: string
                example: Something went wrong.
            example:
              code: 3
              message: Forbidden
          examples:
            response:
              value:
                code: 3
                message: Forbidden
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````