# Cohorts

Source: https://www.solscanner.app/docs/indexer/reference/cohorts

> Wallet clusters, their members, and the evidence edges that produced them.

A cohort is a set of wallets the Indexer has grouped together. Each cohort publishes the edges that produced it, so a membership claim can be inspected rather than taken on faith.

4 routes. Every path below is served under `/index/v1/{chain}`, and every request carries an `x-api-key` header, so those two are not repeated per route. The shared contract for pagination, snapshots, precision and absence is in [Read API](/docs/indexer/api).

Cohorts By Token [#cohorts-by-token]

```http
GET /cohorts
```

Funding cohorts seeded by members funded in this token, in ascending cohort id. `primary` marks the anchor asset. The cursor is bound to the funding generation, so a new generation answers `409 stale_cursor` and the walk restarts.

| Parameter | In    | Required | Notes                                                |
| --------- | ----- | -------- | ---------------------------------------------------- |
| `token`   | query | yes      | 0x-prefixed token address to look up cohorts for.    |
| `cursor`  | query | no       | Opaque page cursor, bound to the funding generation. |
| `limit`   | query | no       | Rows per page.                                       |

Cohort Detail [#cohort-detail]

```http
GET /cohorts/{id}
```

Cohort metadata: kind, size, primary asset, `generation`, and for a `Funding` cohort `freshness {ruleVersion, overridesVersion, currentRuleVersion, currentOverridesVersion, stale, staleReasons}` plus a hoisted `stale`.

| Parameter | In   | Required | Notes                                            |
| --------- | ---- | -------- | ------------------------------------------------ |
| `id`      | path | yes      | Cohort id: 8 bytes, 16 hex digits, no 0x prefix. |

Cohort Edges [#cohort-edges]

```http
GET /cohorts/{id}/edges
```

The evidence edges that produced membership. Screened members' edges are withheld (`screenedOut`), with the same `freshness` and `cohortsComplete` trio as `/members`.

| Parameter | In    | Required | Notes                                                                                                                                      |
| --------- | ----- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `id`      | path  | yes      | Cohort id: 8 bytes, 16 hex digits, no 0x prefix.                                                                                           |
| `cursor`  | query | no       | Opaque page cursor. See [Pagination](/docs/indexer/api).                                                                                   |
| `limit`   | query | no       | Page row cap. See [Pagination](/docs/indexer/api) for the shared contract; the exact default and maximum for this route are on the schema. |

Cohort Members [#cohort-members]

```http
GET /cohorts/{id}/members
```

Member wallets, each with `admittedBy {signals, edge, funder, assetKind, asset, firstBlock, lastBlock}`. Members a current entity override screens out (the member, or the funder that admitted it) are dropped and listed in `screened`/`screenedOut`, and the page reports `freshness.stale`. `cohortsComplete`/`cohortsIncompleteReason`/`fundingGeneration` state whether the funding half was ever derived.

| Parameter | In    | Required | Notes                                                                                                                                      |
| --------- | ----- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `id`      | path  | yes      | Cohort id: 8 bytes, 16 hex digits, no 0x prefix.                                                                                           |
| `cursor`  | query | no       | Opaque page cursor. See [Pagination](/docs/indexer/api).                                                                                   |
| `limit`   | query | no       | Page row cap. See [Pagination](/docs/indexer/api) for the shared contract; the exact default and maximum for this route are on the schema. |
