> ## 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.

# How Digital Asset-Backed Borrowing works

> The concepts behind borrowing USDC against cirBTC: the MSCA wallet, the lending market, and how loans move through their lifecycle.

Digital Asset-Backed Borrowing is a Circle Mint offering that lets you post
cirBTC as collateral to a pre-approved lending market on Arc or Ethereum and
borrow USDC against it. Circle handles all onchain operations for you. You never
sign a transaction, and gas is sponsored. For a walkthrough, see
[Borrow USDC against cirBTC collateral](/circle-mint/quickstarts/borrow-with-cirbtc).

<Note>Digital Asset-Backed Borrowing is not available in New York.</Note>

## The wallet

As a Mint customer entity, you get one
[modular smart contract account (MSCA)](/wallets/account-types#smart-contract-accounts-sca-and-msca)
per supported blockchain: Arc and Ethereum, powered by
[Circle Wallets](/wallets). Each MSCA holds your cirBTC collateral for the
duration of loans on that blockchain.

The MSCA has two owners with a signature threshold of one:

* **Circle-managed ECDSA co-signer**: an ECDSA key that Circle holds through its
  multiparty computation (MPC) custody. This is the active signer for every
  UserOperation your wallet executes. Circle uses this key to build, sign, and
  submit onchain transactions on your behalf.
* **Your passkey**: a WebAuthn P-256 credential you register during wallet
  creation. This owner is dormant. Circle never uses it to sign routine
  operations. It exists as an independent recovery owner that Circle cannot
  exercise on your behalf.

You never sign a blockchain transaction. All routine signing is performed
server-side by the Circle co-signer. Gas is sponsored by
[Circle's paymaster](/paymaster), so there is no native-token balance for you to
fund or monitor.

You can add additional passkey owners to the MSCA after wallet creation by
calling
[`POST /v1/borrow/wallets/owners`](/api-reference/circle-mint/digital-asset-backed-borrowing/add-borrow-wallet-owner).
See [How-to: Add another wallet owner](/circle-mint/howtos/add-wallet-owner).

## The lending market

Borrows are executed onchain in pre-approved lending markets curated by Circle:

* [Morpho](https://morpho.org/) on Arc and Ethereum

These markets don't underwrite borrowers or set limits per customer. The amount
you can borrow is capped by the value of the cirBTC collateral you post, not by
a pre-approved credit line.

Circle is not the lender. The USDC you borrow comes from other lenders who have
supplied liquidity to the market. Interest accrues at the market's variable
borrow rate.

Call
[`GET /v1/borrow/markets`](/api-reference/circle-mint/digital-asset-backed-borrowing/list-borrow-markets)
for live rates and [LTV parameters](#ltv-health-factor-and-liquidation).

## The asynchronous job model

Every write endpoint is asynchronous. When you call
[`POST /v1/borrow/loans`](/api-reference/circle-mint/digital-asset-backed-borrowing/create-borrow-loan)
to borrow,
[`POST /v1/borrow/loans/{id}/repayments`](/api-reference/circle-mint/digital-asset-backed-borrowing/create-borrow-repayment)
to repay, or any other write, Circle responds with a job rather than the loan or
repayment directly. The job tracks the asynchronous operation Circle executes on
your behalf.

Your integration code polls the job to observe progress. The job progresses
through a series of states until it reaches a terminal state that tells you
whether the operation succeeded or failed. All asynchronous writes share the
same state machine, so once you understand the job lifecycle for one operation,
you understand it for all of them.

### Job types

The `jobType` field on a job tells you which operation the job represents.

| Job type            | What it does                                                                                                            |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `wallet_setup`      | Provisions the MSCA on the blockchain.                                                                                  |
| `borrow`            | Originates a loan.                                                                                                      |
| `repay`             | Repays part or all of a loan's debt.                                                                                    |
| `add_collateral`    | Adds cirBTC collateral to an existing loan.                                                                             |
| `withdraw_residual` | Sweeps residual collateral back to your Mint balance after a full liquidation. Circle creates these jobs automatically. |
| `add_owner`         | Adds a new authorized owner to your wallet.                                                                             |
| `remove_owner`      | Removes an authorized owner from your wallet.                                                                           |

### Job states

The `status` field on a job progresses through the states below.

| State               | Terminal | What it means                                                                                                                                                                                                                 |
| ------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `received`          | No       | Circle received your request and is preparing the onchain operation.                                                                                                                                                          |
| `awaiting_approval` | No       | The underlying fund transfer is waiting for your account administrator to approve it in the Mint Console. Only applies to `borrow`, `repay`, and `add_collateral` jobs when your account has an approval workflow configured. |
| `submitted`         | No       | The signed onchain transaction has been submitted to the blockchain and is waiting for confirmation.                                                                                                                          |
| `confirmed`         | No       | The transaction has been confirmed onchain.                                                                                                                                                                                   |
| `completed`         | Yes      | Success. The operation finished and its effect is reflected in your Mint balance and loan record.                                                                                                                             |
| `failed`            | Yes      | The underlying onchain operation did not succeed. Check the `error` field on the job for the human-readable reason.                                                                                                           |
| `approval_rejected` | Yes      | Your account administrator rejected the underlying fund transfer in the Mint Console. The operation never reached the blockchain. Only applies to accounts with an approval workflow configured.                              |

### Job workflow

This diagram shows how a job can move between states.

```mermaid theme={null}
stateDiagram-v2
    received --> awaiting_approval
    received --> submitted
    received --> failed
    awaiting_approval --> submitted
    awaiting_approval --> approval_rejected
    submitted --> confirmed
    submitted --> failed
    confirmed --> completed
    confirmed --> failed
```

### Polling a job

Call
[`GET /v1/borrow/jobs/{id}`](/api-reference/circle-mint/digital-asset-backed-borrowing/get-borrow-job)
to fetch the current state of a job. Poll until `status` reaches a terminal
state (`completed`, `failed`, or `approval_rejected`).

To list all jobs for your entity, call
[`GET /v1/borrow/jobs`](/api-reference/circle-mint/digital-asset-backed-borrowing/list-borrow-jobs).
Filter by `status` or `jobType` to narrow the results.

## Loan states

A loan represents one borrow position against one lending market. The `status`
field on a loan reflects its current state.

| State        | What it means                                                                                                                                                                                                       |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `active`     | The loan is open and accruing interest. You can add collateral, repay part or all of the debt, or monitor the position's health.                                                                                    |
| `closed`     | The loan is fully repaid. The cirBTC collateral has been released back to your Mint balance.                                                                                                                        |
| `liquidated` | A third-party liquidator repaid your debt onchain and seized collateral because your position's health factor fell below the protocol's liquidation threshold. Circle detects the liquidation and updates the loan. |
| `failed`     | The borrow operation never completed successfully, so no debt was ever created.                                                                                                                                     |

## LTV, health factor, and liquidation

A borrow position's safety is measured by two ratios that Circle monitors
continuously against onchain state.

Loan-to-value ratio (LTV) is the ratio of your outstanding debt to the current
value of your collateral, denominated in the borrowed asset. If you borrow 3,000
USDC against cirBTC worth 10,000 USDC (per the market oracle), your LTV is
`0.30`. LTV rises as your debt accrues interest, as the oracle price of cirBTC
falls, or both.

Health factor is the inverse safety measure. It equals `LLTV / LTV`, where
`LLTV` is the lending market's liquidation threshold. A health factor of `1.0`
means the position is at the liquidation boundary. Above `1.0`, the position is
safe. Below `1.0`, a third-party liquidator can repay part of the debt and seize
collateral to bring the position back in line.

The Morpho market's `LLTV` is the protocol's liquidation threshold. Circle
enforces a stricter `maxOriginationLtv` at borrow creation. This is the highest
LTV Circle allows for new borrows, set below `LLTV` to leave a safety buffer
against short-term oracle price movement. Both values are returned on each
market in
[`GET /v1/borrow/markets`](/api-reference/circle-mint/digital-asset-backed-borrowing/list-borrow-markets).

### Margin call notifications

Circle monitors your position's health factor and sends the account
administrator an email when your LTV reaches 90% of the market's `LLTV`. Respond
by:

* [Adding collateral to the loan](/circle-mint/howtos/add-collateral) to lower
  your LTV
* [Repaying part of the debt](/circle-mint/howtos/repay-loan) to reduce the
  outstanding balance

### Liquidations and residual sweeps

Liquidations happen onchain and are executed by third-party liquidators (usually
MEV bots watching the market). Circle detects the liquidation by polling the
onchain position and updates the loan's status to `liquidated`.

A full liquidation may leave residual cirBTC in the MSCA if the liquidator only
needed part of the collateral to cover the debt. Circle detects the residual and
automatically creates a `withdraw_residual` job to sweep it back to your Mint
balance. You do not need to trigger the sweep yourself in the normal flow. The
[`POST /v1/borrow/loans/{id}/residual-sweep`](/api-reference/circle-mint/digital-asset-backed-borrowing/create-borrow-loan-residual-sweep)
endpoint exists as a manual retry for the rare case where the automatic sweep
job fails.

The `OnchainLoan` schema exposes liquidation-related fields for reference:

* `liquidationDetectedAt`: when Circle first detected the liquidation onchain.
* `liquidatedDebtAmount`: amount of debt the liquidator repaid.
* `liquidatedCollateralSeized`: amount of cirBTC the liquidator seized.
* `liquidationOraclePrice`: oracle price of cirBTC at liquidation.

### Oracle drift

Circle uses the same onchain oracle the lending market uses to price collateral.
Oracle prices move continuously, so a position that is safe at one moment can
move closer to (or past) the liquidation boundary as the oracle updates. This is
why `maxOriginationLtv` is stricter than `LLTV`, and why the margin call fires
well before `1.00`.

## Currency codes and token symbols

Responses use two different string representations for the same asset across
different fields, and it's easy to confuse them.

* Circle currency code: uppercase codes like `USD` or `CIRBTC`. Used in the
  `asset`, `borrowAsset`, and `collateralAsset` fields to identify an amount's
  underlying currency. The currency code is Mint's canonical identifier for the
  asset.
* Token symbol: mixed-case symbols like `USDC` or `cirBTC`. Used as keys in the
  `depositAddresses` map on your wallet to identify which token an onchain
  address expects.

For example, `borrowAsset: "USD"` on a loan means you borrowed USDC. The
corresponding token symbol `USDC` appears as a key under
`wallet.depositAddresses` if you need the onchain address that receives your
borrowed USDC.
