Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

PRISM Score v3.0 Endpoints

PRISM Score v3.0 replaces the v2.1 composite (Speed / Skill / Efficiency built from SSE, PES, IE, CRR, FC) with a single number:

% of sessions that crushed their goal.

A session “crushes” when:

  1. It passes the substance floor (enough real work happened), and
  2. The outcome judge marks goal_complete, and
  3. It’s not rework, and
  4. The rubric committed to an intent.

The scored unit is prism.score_v3_sub_sessions (a goal arc within a Claude Code session). All endpoints here are scoped to the authenticated developer.

Most v3 endpoints take a window query parameter:

ValueMeaning
dailyCurrent calendar day
weeklyCurrent calendar week (default if omitted)
monthlyCurrent calendar month

Invalid values return 400 Bad Request.

The single number plus a small sparkline.

GET /v1/score_v3/score?window=weekly
Authorization: Bearer gck_your_key

Response:

{
"window": "weekly",
"prism_score": 62.5,
"letter_grade": "B",
"personal_tier": "scaling",
"crushed_count": 5,
"total_count": 8,
"crush_weight": 0.94,
"sparkline": [55.0, 60.0, 58.0, 62.5]
}

prism_score is the % of qualifying sessions that crushed. sparkline is the last four windows in chronological order.

Crushed Sessions Per Working-day (CSPW), the week-over-week delta, and median Time-To-Crush.

GET /v1/score_v3/speed?window=weekly

Response:

{
"window": "weekly",
"cspw": 2.4,
"delta_cspw": 0.3,
"ttc_median_seconds": 1420.0,
"sparkline": [1.8, 2.0, 2.1, 2.4]
}

Per-session list for the Speed page — one row per scored sub-session in the window, with rubric and outcome fields.

Per-prompt breakdown for one v3 sub-session. Joins captured prompts that fall inside the sub-session’s time window with prompt-level rubric output (left join — prompts without a rubric still show).

Crush Weight, Tokens-Earned-Tickets (TET), Tokens-Per-Ticket (TPT), and the input / output / cache breakdown.

GET /v1/score_v3/tokens?window=weekly

Response:

{
"window": "weekly",
"crush_weight": 0.94,
"tet": 1.12,
"tpt": 18450.0,
"cpcs_estimate": 0.42,
"sparkline": [0.88, 0.91, 0.93, 0.94],
"breakdown": { "input": 120000, "output": 28000, "cache_read": 410000, "cache_write": 18000 }
}

Trend series for the tokens page.

Average Prompt Grade (APG), week-over-week delta, and per-boolean rubric averages.

GET /v1/score_v3/skill?window=weekly

Response:

{
"window": "weekly",
"apg": 0.72,
"delta_apg": 0.04,
"per_boolean": {
"goal_explicit": 0.81,
"scope_bounded": 0.65,
"references_concrete": 0.78,
"context_sufficient": 0.70,
"verification_requested": 0.55,
"root_cause_oriented": 0.62,
"plan_first": 0.58
},
"worst_pillar": "verification_requested"
}

The Insight section powers the Prompt Grade page — it’s the per-sub-session rubric (seven booleans + intent class + judge status + letter grade).

Recent rubric rows for the authenticated developer.

GET /v1/score_v3/insight/sessions?limit=50

Returns an array of RubricItem objects with score_v3_sub_session_id, intent_class, letter_grade, confidence, the seven booleans, applicability, judge_status, and the sub-session title / summary / title_source.

Aggregate summary across the requested window.

Rubric rows inside an explicit from / to range.

Admin trigger to backfill rubric output over a window.

Sessions excluded from scoring because they didn’t pass the substance floor (too short, no real work, etc.). Surfaced so developers can see what was filtered.

GET /v1/score_v3/trivia?window=weekly

Returns an array of TriviaItem with score_v3_sub_session_id, reason, created_at, plus title / summary.

Trend counts of excluded sessions.

Flags grouped by kind for the requested window.

GET /v1/score_v3/integrity?window=weekly

Response:

{
"by_kind": [
{ "kind": "auto_retry_storm", "count": 2 },
{ "kind": "tiny_prompt_burst", "count": 1 }
]
}

Per-period totals and per-kind counts for charting.

GET /v1/score_v3/integrity/trend?from=2026-04-01T00:00:00Z&to=2026-04-30T00:00:00Z&period=day

Recent flag rows for the drill-down list.

GET /v1/score_v3/integrity/recent?from=2026-04-01T00:00:00Z&limit=50

Rename a sub-session (and optionally rewrite its summary). Bumps title_source to "user_edited" so future LLM rewrites won’t overwrite the developer’s choice. Ownership is enforced — a sub-session owned by another developer returns 404.

PATCH /v1/score_v3/sub-sessions/<id>
Authorization: Bearer gck_your_key
Content-Type: application/json
{
"title": "Fix auth flow timeout",
"summary": "Investigated the 30s timeout in the login redirect and shipped a retry."
}

Snapshot endpoint the dashboard hits on every prism.score_v3.sub_session.* SSE event. Returns recent v3 sub-sessions for the authenticated developer, ordered by started_at DESC, joined to the parent score_v3_sessions row for claude_session_id.

GET /v1/score_v3/realtime/sub-sessions?limit=200&from=2026-05-26T00:00:00Z

Read the developer’s preferred scoring version ("v2", "v3", or null for org default).

Persist the preference.

PUT /v1/score_v3/toggle
Content-Type: application/json
{ "pref": "v3" }

pref accepts "v2", "v3", or null.

Report generation has its own v3 endpoint family. Same shape as the v2.1 report endpoints (see Insights & Reports) but scoped to v3 scoring data.

EndpointMethodPurpose
/v1/score_v3/reportGETLatest v3 report
/v1/score_v3/report/generatePOSTGenerate a new v3 report
/v1/score_v3/report/historyGETPast reports
/v1/score_v3/report/pendingGETIn-progress report (or 204)
/v1/score_v3/report/status/:idGETStatus of a running job
/v1/score_v3/report/cancel/:idPOSTCancel a running job
/v1/score_v3/report/:idGET / DELETEFetch or delete one report