Cohorts

Cohort members

Min tier: free. The ranked members of one curated cohort. Every row satisfies every line of the cohort's floor, so the page needs no further filtering. free keys see the top 25 with no pagination; terminal+ paginate to the cohort's own max_rows cap (500 for every cohort today). Cursor-paginated.

Reads the pre-aggregated wallet rollups only — never a raw trades scan. Those aggregates lag real time, so the response reports data_as_of (the freshest underlying rollup timestamp across the page, null on an empty page) instead of implying "now". member_count is how many wallets clear the cohort's own floor in total; it is unaffected by min_bets and by paging.

Ranking is PnL-first: pnl is Polymarket's reported figure when present, else the on-chain ledger's. sort=win_rate ranks on the sample-shrunk bayesian_win_rate — the raw per-fill win_rate column is contaminated and is never a sort key or a floor. No cohort gates on win rate.

Errors are loud rather than silent: an unknown slug returns 400 bad_request listing the valid slugs (not 404); a disabled cohort returns 400 bad_request quoting its disabled_reason (not a 200 with an empty page); a cursor past max_rows returns 400 bad_request naming the cap.

get/v1/cohorts/{slug}

Request

  • Base URL: https://crowdintel.xyz/api
  • URL: https://crowdintel.xyz/api/v1/cohorts/{slug}
  • Auth: HTTP bearer

Path parameters

slugstring required
Example:deep-sample-winners

Cohort slug from /v1/cohorts. Slugs are stable and never renamed; the enabled set and the floors are not.

Query parameters

sort'pnl' | 'volume' | 'resolved_bets' | 'win_rate'

Sort key. Defaults to the cohort's own order_by (pnl for every cohort except market-maker-bots, which ranks by volume). Must appear in that cohort's sortable list or the request is rejected with 400. win_rate ranks on the sample-shrunk bayesian_win_rate.

sort_dir'asc' | 'desc'

Sort direction.

limitinteger

Page size (default 50, max 100). free keys are capped at 25.

min_betsinteger

Raise the resolved-bet floor above the cohort's own. It can only RAISE it — a value below floors.min_resolved_bets is clamped up. It narrows the returned page, not member_count.

cursorstring

Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. A cursor that is supplied but undecodable returns 400 bad_request ("Invalid cursor") — it does not silently restart at page 1.

Response

Cursor-paginated cohort members, with the cohort's own context as siblings of data.

slugstring
titlestring
thesisstring

One sentence saying what this cohort selects for.

member_countinteger

Wallets currently clearing the cohort's own floor. Unaffected by min_bets, limit or paging. Membership drifts as the rollups are rewritten — treat it as approximate, not a guarantee.

data_as_ofstring date-time nullable

Freshest underlying rollup timestamp across the returned page; null on an empty page. These aggregates lag real time — never present them as live.

floor_linesstring[]

The cohort's floor rendered as public copy, derived from the same object the query enforces (e.g. "≥ 500 resolved bets", "positive PnL"). Display these strings rather than retyping a threshold.

sort'pnl' | 'volume' | 'resolved_bets' | 'win_rate'

Sort key actually applied.

sort_dir'asc' | 'desc'
min_betsinteger

Resolved-bet floor actually applied, after clamping the request up to the cohort's own floor.

next_cursorstring nullable

null on the last page, when the cohort's max_rows cap is reached, and always for free keys.

Example response

{
  "data": [
    {
      "address": "0x0000000000000000000000000000000000000000"
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.