Scorecards
Your repo's readiness score and how it was earned.
Base path /api/v1/scorecards 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 scorecards
GET /api/v1/scorecards
curl "https://ionwarp.com/api/v1/scorecards?status=not_started" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_acme"How do our scorecards look right now?data_query {
"collection": "scorecards",
"where": {
"status": "not_started"
}
}Returns a paginated list of scorecard objects, newest first.
{
"object": "list",
"data": [
{
"object": "scorecard",
"id": "obj_123",
"name": "Agentic Readiness",
"status": "ready",
"lifespan": "persistent",
"trigger": "repo_connected",
"summary": "IonWarp scanned acme/api and found 9 readiness actions.",
"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 |
|---|---|---|---|
status | string | filter | Whether the scorecard has ever been scanned, is scanning now, holds a committed result, or failed. One of not_started, running, ready, failed. |
lifespan | string | filter | How long a result stays meaningful: persistent keeps its score until the next scan, ephemeral is a one-off, rolling is re-scored continuously. One of persistent, ephemeral, rolling. |
trigger | string | filter | What causes this scorecard to be scanned (e.g. repo_connected). |
q | string | search | Free-text search across name, summary. |
sort | string | sort | One of score, last_scanned_at; 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
GET /api/v1/scorecards/learning-tests-run-under-bun
curl "https://ionwarp.com/api/v1/scorecards/learning-tests-run-under-bun" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_acme"What is holding the {id} score back?data_get {
"collection": "scorecards",
"object_id": "learning-tests-run-under-bun"
}Returns the scorecard object.
{
"object": "scorecard",
"id": "obj_123",
"name": "Agentic Readiness",
"status": "ready",
"lifespan": "persistent",
"trigger": "repo_connected",
"summary": "IonWarp scanned acme/api and found 9 readiness actions.",
"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's id or slug. |
Append an event to a scorecard
POST /api/v1/scorecards/{id}/events
curl -X POST "https://ionwarp.com/api/v1/scorecards/learning-tests-run-under-bun/events" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_acme" \
-H "Content-Type: application/json" \
-d '{"event":"Noted by the operator","context":{"source":"api"}}'Add a note to the scorecard {id}data_event {
"collection": "scorecards",
"object_id": "learning-tests-run-under-bun",
"event": "Noted by the operator"
}Returns the appended event object.
{
"object": "event",
"id": "evt_123",
"event": "Noted by the operator"
}Parameters
| Field | Type | Required | Description |
|---|---|---|---|
event | string | yes | The human-readable timeline entry. |
context | object | no | Provenance — source, integration, worker_run_id, … |
What comes back (read-only)
Every scorecard 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. |
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. |
name | string | Name of the scorecard. |
score | number | Points scored on the last completed scan. Written once, at the end of a scan — a scorecard mid-scan still shows the previous number. |
max_score | number | Points this scorecard is out of (100 for AI readiness). |
status | string | Whether the scorecard has ever been scanned, is scanning now, holds a committed result, or failed. |
lifespan | string | How long a result stays meaningful: persistent keeps its score until the next scan, ephemeral is a one-off, rolling is re-scored continuously. |
trigger | string | What causes this scorecard to be scanned (e.g. repo_connected). |
summary | string | What the last scan concluded, in a sentence. |
action_item_count | number | How many follow-up actions the last scan left open. |
last_scan_task_id | string | Task that produced the current result — the handle to look that scan up. |
last_scanned_at | string | When the current result was committed (ISO 8601). |
Errors
Failures use { error: { type, code, message, param } }. The full code table is generated at Error Codes.