List leaderboard runs for an eval suite
Returns each ranking group’s most recent completed runs for a suite in one request, with the group assignments in groups. A group is (model, targeted task) for task_ids-restricted runs and (model) for unrestricted runs (task_id null). Build boards from groups, not from run.models/run.task_ids — a returned run may name models or tasks whose groups it did not rank in. truncated: true means a server ceiling trimmed the aggregate; whole runs are kept in (best rank, first model, first task, id) order, so every group’s newest runs survive before any group’s fallbacks and no group is dropped for being old. Resume a truncated board by passing next_cursor back as cursor and unioning the responses. See the evals docs for grouping rationale and cost characteristics.
Authorizations
Gateway auth: send Authorization: Bearer <mka1-api-key>. For multi-user server-side integrations, you can also send X-On-Behalf-Of: <external-user-id>.
Headers
Optional external end-user identifier forwarded by the API gateway.
Path Parameters
Query Parameters
Narrow the ranking to runs recorded against one version of the suite. Scores are only comparable within a version, so leaderboard consumers should pass the version they score. A version the suite does not have returns an empty list, not 404, so it reads the same as a version with no completed runs yet.
1 <= x <= 2147483647How many most-recent completed runs to keep per ranking group. A group is (model, targeted task) for task_ids-restricted runs — historical imports commit one run per model and task, so their boards assemble at per_group=1 — and (model) for unrestricted runs, which cover every task of their version. More than 1 lets a consumer fall back to an earlier run for a task whose newest run lacks usable stats.
1 <= x <= 20Narrow the ranking to one model's groups. Useful when the consumer already knows its board axes; for discovering and paging past a truncated response, use cursor/next_cursor. An empty value is rejected rather than treated as omitted.
1 - 255Opaque resume cursor from a previous truncated response's next_cursor. Continues the ranking exactly where the previous page stopped — inside a model or a rank tier when that is where the cut landed. Pass it back verbatim; a malformed value is a 400. Page with a fixed filter set, like the run-list cursor.
1 - 2048Response
OK
The deduplicated runs behind groups, newest first.
The server's group assignments — build boards from these, not from run.models/run.task_ids. Ordered by model, then task id with the covers-everything group first within each model, then rank; that ordering is contract.
True when a server ceiling trimmed the aggregate. Whole runs are kept in (rank, model, task) order — never dropped for being old; resume with cursor: next_cursor.
Set when truncated: pass as cursor on the next request and union the responses until truncated is false to assemble the complete aggregate. Null when this response is complete.