Scorecard Levels
The ladder a repo climbs, level by level.
Base path /api/v1/scorecard-levels on https://ionwarp.com. Authenticate with Authorization: Bearer $DASH_API_KEY and name the project with the Project-ID header. Writes are validated in declared mode; an operation this resource does not declare answers 405 operation_not_supported.
List scorecard levels
GET /api/v1/scorecard-levels
curl "https://ionwarp.com/api/v1/scorecard-levels?scorecard_id=ai-readiness" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_acme"Show me the scorecard levels filtered by scorecard iddata_query {
"collection": "scorecard_levels",
"where": {
"scorecard_id": "ai-readiness"
}
}Returns a paginated list of scorecard-level objects, newest first.
{
"object": "list",
"data": [
{
"object": "scorecard-level",
"id": "obj_123",
"scorecard_id": "ai-readiness",
"level": "ci-cd",
"name": "CI/CD",
"score": 4,
"max_score": 10,
"ai_unlocked": "Agents can open PRs knowing the suite gates every merge.",
"status": "pending",
"display_order": 30,
"created_at": "2026-07-25T12:00:00.000Z",
"updated_at": "2026-07-25T12:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null
}Parameters
| Parameter | Type | Kind | Description |
|---|---|---|---|
scorecard_id | string | filter | Slug of the scorecard this rung belongs to (e.g. ai-readiness). |
level | string | filter | Stable id of the rung (e.g. security-foundation). |
status | string | filter | Always pending today: a rung's progress is read from score/max_score, and no scan writes a level status. One of pending. |
q | string | search | Free-text search across name. |
sort | string | sort | One of display_order, score; prefix with - to reverse. |
limit | number | page | Rows to return, 1–100. Defaults to 20. |
cursor | string | page | next_cursor from the previous page. |
Retrieve a scorecard-level
GET /api/v1/scorecard-levels/learning-tests-run-under-bun
curl "https://ionwarp.com/api/v1/scorecard-levels/learning-tests-run-under-bun" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_acme"What does the {id} rung unlock once it is satisfied?data_get {
"collection": "scorecard_levels",
"object_id": "learning-tests-run-under-bun"
}Returns the scorecard-level object.
{
"object": "scorecard-level",
"id": "obj_123",
"scorecard_id": "ai-readiness",
"level": "ci-cd",
"name": "CI/CD",
"score": 4,
"max_score": 10,
"ai_unlocked": "Agents can open PRs knowing the suite gates every merge.",
"status": "pending",
"display_order": 30,
"created_at": "2026-07-25T12:00:00.000Z",
"updated_at": "2026-07-25T12:00:00.000Z"
}Parameters
| Parameter | Type | Kind | Description |
|---|---|---|---|
id | string | path | The scorecard-level's id or slug. |
What comes back (read-only)
Every scorecard-level carries the envelope below. The fields under it are computed or stamped by the platform — they are returned, never sent.
| Field | Type | Description |
|---|---|---|
object | string | Always scorecard-level. |
id | string | Stable object id. Also accepted in place of slug on any path. |
slug | string | URL-safe name, unique within the collection. |
created_at | string | ISO-8601 timestamp of the first write. |
updated_at | string | ISO-8601 timestamp of the most recent write. The cursor sorts on this. |
scorecard_id | string | Slug of the scorecard this rung belongs to (e.g. ai-readiness). |
level | string | Stable id of the rung (e.g. security-foundation). |
name | string | Name of the rung as it reads on the ladder. |
score | number | Points earned on this rung at the last scan — the total of its checks. |
max_score | number | Points this rung is worth when every check on it passes. |
ai_unlocked | string | What an agent can safely do in this repository once this rung is satisfied. Markdown. |
status | string | Always pending today: a rung's progress is read from score/max_score, and no scan writes a level status. |
display_order | number | Position of the rung on the ladder, lowest first. |
Errors
Failures use { error: { type, code, message, param } }. The full code table is generated at Error Codes.