# Screener

Filter and sort protocols by any risk dimension with per-dimension max thresholds. Same rows as `/v1/protocols` but adds the full six-dimension breakdown inline (no second request needed).

```
GET  /v1/screener

Filter and sort protocols by risk dimension scores
```

### Authentication

Optional. Anonymous requests are rate-limited by IP. Pass `X-API-Key` for higher limits.

### Query Parameters

| **Parameter**        | **Type** | **Required** | **Description**                                                                                                                                                                         |
| -------------------- | -------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| page                 | integer  | No           | Page number. Default: `1`                                                                                                                                                               |
| per\_page            | integer  | No           | Results per page. Default: `20`. Max: `100`                                                                                                                                             |
| sort                 | string   | No           | One of: `"compositeScore"`, `"creditRisk"`, `"counterpartyRisk"`, `"liquidityRisk"`, `"oracleRisk"`, `"smartContractRisk"`, `"liquidityTrapRisk"`, `"tvl"`. Default: `"compositeScore"` |
| order                | string   | No           | `"asc"` \| `"desc"`. Default: `"desc"`                                                                                                                                                  |
| chain                | string   | No           | Chain filter. Comma-separated list supported (e.g. `"Ethereum,Solana,Base"`)                                                                                                            |
| category             | string   | No           | Category filter. Comma-separated list supported (e.g. `"Lending,Risk Curators"`)                                                                                                        |
| maxCompositeScore    | number   | No           | Max composite score (0–10)                                                                                                                                                              |
| maxCreditRisk        | number   | No           | Max credit risk (0–10)                                                                                                                                                                  |
| maxCounterpartyRisk  | number   | No           | Max counterparty risk (0–10)                                                                                                                                                            |
| maxLiquidityRisk     | number   | No           | Max liquidity risk (0–10)                                                                                                                                                               |
| maxOracleRisk        | number   | No           | Max oracle risk (0–10)                                                                                                                                                                  |
| maxSmartContractRisk | number   | No           | Max smart contract risk (0–10)                                                                                                                                                          |
| maxLiquidityTrapRisk | number   | No           | Max liquidity trap risk (0–10)                                                                                                                                                          |

### Response Codes

| **Code** | **Meaning**                              |
| -------- | ---------------------------------------- |
| 200      | Success. PaginatedResponse\<ScreenerRow> |
| 400      | Invalid query parameters                 |
| 429      | Rate limit exceeded                      |

### Example: Safest Solana lending, oracle risk ≤ 2

```typescript
const res = await fetch(
  "https://api.diapleo.xyz/v1/screener?chain=Solana&category=Lending&maxOracleRisk=2&sort=compositeScore&order=asc&per_page=5",
  { headers: { "X-API-Key": process.env.DIAPLEO_API_KEY! } },
);
const { data, meta } = await res.json();
```

### Example: Biggest protocols (cross-chain) with tight smart-contract discipline

```typescript
const res = await fetch(
  "https://api.diapleo.xyz/v1/screener?sort=tvl&order=desc&maxSmartContractRisk=3&per_page=10",
);
```

### Example Response

```json
{
  "success": true,
  "data": [
    {
      "id": "kamino-lend",
      "slug": "kamino-lend",
      "name": "Kamino Lend",
      "category": "Lending",
      "chains": ["Solana"],
      "logoUrl": "https://icons.llama.fi/kamino-lend.jpg",
      "coverageScore": 2,
      "compositeScore": 1.65,
      "creditRisk": 4.0,
      "counterpartyRisk": 1.2,
      "liquidityRisk": 2.0,
      "oracleRisk": 1.0,
      "smartContractRisk": 4.5,
      "liquidityTrapRisk": 1.5,
      "riskLevel": "low",
      "tvlUsd": 1503864026.97,
      "scoreHistory": [1.68, 1.67, 1.66, 1.65, 1.65, 1.65, 1.66, 1.65, 1.65, 1.65, 1.65, 1.65],
      "scoredAt": "2026-04-21T11:58:35.516Z"
    }
  ],
  "meta": { "total": 12, "page": 1, "limit": 5, "pageCount": 3 }
}
```

> When a dimension is not applicable to a protocol it's returned as `null` and excluded from the composite (weights redistribute proportionally). `maxOracleRisk=2` matches protocols where `oracleRisk <= 2`; rows with `oracleRisk: null` are **not** returned by that filter.


---

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

```
GET https://docs.diapleo.com/api-reference/endpoints/endpoints-screener.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
