> For the complete documentation index, see [llms.txt](https://docs.syndromics.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.syndromics.xyz/protocol/health-and-liquidation.md).

# Health factor and liquidation

Liquidation is the only recovery mechanism in Syndromics. It is a Dutch auction run by a contract, triggerable by anyone, with parameters that account for the fact that the underlying equity market is closed for most of every week.

## Health factor

```
HF = collateralValue × liquidationLtvBps / 10_000 / debt
```

* `collateralValue` is collateral amount times the oracle price from `OracleRouter`, after the session-aware haircut (see below).
* `liquidationLtvBps` is the tier's liquidation LTV, not the origination maximum.
* `debt` is total principal plus accrued interest across all slices.

Two thresholds:

| Threshold       | HF     | Effect                                                                                          |
| --------------- | ------ | ----------------------------------------------------------------------------------------------- |
| **Warning**     | < 1.10 | Borrower is notified through keepers and the front-end. Top-up or partial repayment encouraged. |
| **Liquidation** | < 1.00 | Any address may call `startAuction(loanId)`.                                                    |

A loan in the **Defaulted** state (grace window passed, or refinance auction failed) is liquidatable regardless of HF.

## Dutch auction

`LiquidationAuction` sells the escrowed collateral for USDG:

| Parameter      | Value                                                                                                                                                 |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| Start price    | oracle × 1.03                                                                                                                                         |
| Floor          | oracle × 0.70 in regular session, oracle × 0.85 when the market is closed                                                                             |
| Duration       | about 45 minutes, linear decline                                                                                                                      |
| Buyer          | anyone; partial buys allowed                                                                                                                          |
| Pricing source | Chainlink Data Feeds for the curve; a Data Streams report is required and cross-checked at purchase when a stream adapter is configured for the token |

The auction can be filled by DEX arbitrageurs, Morpho and Uniswap liquidity providers, Robinhood's own authorised participants, or the lenders themselves. Because the auction sets a price rather than dumping into a pool, thin DEX liquidity for a single-name token does not translate into a bad fill.

### Why not sell into a DEX

Most pooled protocols liquidate by swapping collateral through an AMM. For long-tail Stock Tokens the pools are shallow, and a forced swap would move the price far more than the liquidation penalty. An auction lets anyone with an opinion on fair value step in, including the lender who wants the stock anyway.

## Penalty and proceeds

The liquidation penalty is **3%** of the debt:

* 1 point to the keeper or liquidator who triggered the auction,
* 2 points shared between the protocol and the affected lenders, per the fee schedule.

Proceeds are distributed in order: keeper share, then each slice's principal plus accrued interest pro rata, then penalty share, then any surplus back to the borrower. If proceeds are insufficient, the shortfall falls on the slices pro rata (or on junior slices first, once tranching exists). It does not touch any other loan.

## In-kind liquidation

A lender who set `selfLiquidate` on their offer receives collateral in kind at the oracle price instead of USDG proceeds, up to the value of their claim and capped at their pro-rata share of the escrow so other slices are never disadvantaged. No interest share is charged on in-kind settlements. This suits lenders who want the underlying stock exposure and removes their slice from the auction entirely.

## Closed markets

Equity markets are closed on weekends and overnight, and the last Friday close can be far from Monday's open. Syndromics handles this explicitly:

* **Haircuts.** When Chainlink `marketStatus` reports closed, or the feed's `updatedAt` is older than the session's staleness bound, the effective max LTV and liquidation LTV drop by the tier's closed-market haircut (10 to 15 points). HF is computed with the haircut applied.
* **Bounded floor.** Liquidations remain possible during closed markets, but the auction floor is bounded at **oracle × 0.85** so a weekend auction cannot become predatory.
* **Lender opt-out.** A lender who set `noClosedMarketLiquidation` waives liquidation of their slice while the market is closed. When an auction starts in a closed session, those slices and their pro-rata share of the collateral are split into a new active loan that continues under the same borrower; the remaining slices are auctioned. If every slice opted out, the auction cannot start until the market reopens.

## Sequencer outages

Using the Chainlink L2 Sequencer Uptime Feed, no liquidation may start for a grace period of **1 hour** after the sequencer returns from an outage. This gives borrowers time to top up through the normal path or through transactions they queued in the L1 delayed inbox during the outage. See [Sequencer and chain risk](/risk/sequencer-and-chain.md).

## Oracle guards

Before any HF calculation or auction pricing, `OracleRouter` rejects:

* zero or negative prices,
* prices with `updatedAt` older than the session's staleness bound,
* a single-update move above the 25% cap, which pauses the market for manual review,
* any token whose feed reports `oraclePaused()` (corporate action in progress).

See [Oracles and market sessions](/risk/oracles.md).

## Worked example

A loan has 250 NVDA in escrow against 20,000 USDG of debt in Tier A (liquidation LTV 70%).

* At NVDA = 176.40: collateral 44,100, HF = 1.54.
* NVDA falls to 125.00: collateral 31,250, HF = 1.09. Warning fires.
* NVDA falls to 114.00: collateral 28,500, HF = 0.9975. Liquidatable.

A keeper starts the auction at 117.42 (oracle × 1.03). The price declines linearly. At 113.00 an arbitrageur buys all 250 tokens for 28,250 USDG. Debt including 3% penalty is 20,600. Distribution: 200 to the keeper, 20,000 plus accrued interest to the three slices pro rata, 400 penalty share, and about 7,650 USDG returned to the borrower.

On a Saturday with the same debt, the haircut applies (liquidation LTV 60%): collateral value needed to stay above HF 1.0 is 33,333, so the loan becomes liquidatable at NVDA = 133.33 and the auction floor is bounded at 113.33.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.syndromics.xyz/protocol/health-and-liquidation.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
