# Get floors

`GET /api/market/floors`

For every row with active listings: its floor (the lowest unit price), how many listings and how many of its sats are listed.

#### Example request

```bash title="cURL"
curl 'https://raresats.net/api/market/floors'
```
```js title="JavaScript"
const response = await fetch('https://raresats.net/api/market/floors');
const data = await response.json();
```
```python title="Python"
import requests

data = requests.get("https://raresats.net/api/market/floors").json()
```

#### Response `200`

| Field | Type | Description |
| --- | --- | --- |
| `rows` | map of object | Each row with at least one active listing, priced in it or holding some of its sats in a bundle. |
| `rows.<key>.floor_unit` | number \| null | The lowest `unit_price` among the row's active listings (its own and its sub-categories'); `null` when only listings in bundle hold its sats. |
| `rows.<key>.listed` | integer | Active listings of the row (own and sub-categories'; never those in bundle). |
| `rows.<key>.listed_sats` | integer | Sats of the row those listings hold (sum of `count`). |
| `rows.<key>.contains` | integer | Only when above 0: active listings of other rows holding some sats of this one among others (in bundle). Never in `floor_unit`, `listed` or `listed_sats`. |
| `rows.<key>.contains_min_price` | integer | With `contains`: the lowest total price among them (a bundle's unit price is another row's). |
| `as_of` | object \| null | When the marketplace last checked every live listing against the chain: the block height and unix seconds. `null` until the first check. |
| `as_of.height` | integer \| null | Block height |
| `as_of.checked_at` | integer | Unix seconds |

```json title="Response"
{
  "rows": {
    "black_rare": {"floor_unit": 12000, "listed": 1, "listed_sats": 1},
    "block9": {"floor_unit": 14, "listed": 1, "listed_sats": 6280}
  },
  "as_of": {"height": 969001, "checked_at": 1790952985}
}
```

#### Errors

None of its own (only transport errors such as 404 `no_endpoint` or 429 at the edge).

`floor_unit` is a unit price (sats per sat of the row, over the UTXO's own value), not a listing price. To find the listing at the floor: `GET /api/market/listings?row=<row>&sort=unit&limit=1`.

`contains` (present when above 0) counts the active listings of other rows that hold some of the row's sats in a bundle, and `contains_min_price` the lowest whole price among them; they are never in `floor_unit`, `listed` or `listed_sats`. A row only bundles hold has `floor_unit: null` and `listed: 0`. To read them: `GET /api/market/listings?row=<row>&contains=only&sort=price`.
