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:
- It passes the substance floor (enough real work happened), and
- The outcome judge marks
goal_complete, and - It’s not rework, and
- 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.
Shared parameters
Section titled “Shared parameters”Most v3 endpoints take a window query parameter:
| Value | Meaning |
|---|---|
daily | Current calendar day |
weekly | Current calendar week (default if omitted) |
monthly | Current calendar month |
Invalid values return 400 Bad Request.
The headline score
Section titled “The headline score”GET /v1/score_v3/score
Section titled “GET /v1/score_v3/score”The single number plus a small sparkline.
GET /v1/score_v3/score?window=weeklyAuthorization: Bearer gck_your_keyResponse:
{ "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.
Speed pillar
Section titled “Speed pillar”GET /v1/score_v3/speed
Section titled “GET /v1/score_v3/speed”Crushed Sessions Per Working-day (CSPW), the week-over-week delta, and median Time-To-Crush.
GET /v1/score_v3/speed?window=weeklyResponse:
{ "window": "weekly", "cspw": 2.4, "delta_cspw": 0.3, "ttc_median_seconds": 1420.0, "sparkline": [1.8, 2.0, 2.1, 2.4]}GET /v1/score_v3/speed/sessions
Section titled “GET /v1/score_v3/speed/sessions”Per-session list for the Speed page — one row per scored sub-session in the window, with rubric and outcome fields.
GET /v1/score_v3/sessions/:id/prompts
Section titled “GET /v1/score_v3/sessions/:id/prompts”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).
Tokens pillar
Section titled “Tokens pillar”GET /v1/score_v3/tokens
Section titled “GET /v1/score_v3/tokens”Crush Weight, Tokens-Earned-Tickets (TET), Tokens-Per-Ticket (TPT), and the input / output / cache breakdown.
GET /v1/score_v3/tokens?window=weeklyResponse:
{ "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 }}GET /v1/score_v3/tokens/trend
Section titled “GET /v1/score_v3/tokens/trend”Trend series for the tokens page.
Skill pillar
Section titled “Skill pillar”GET /v1/score_v3/skill
Section titled “GET /v1/score_v3/skill”Average Prompt Grade (APG), week-over-week delta, and per-boolean rubric averages.
GET /v1/score_v3/skill?window=weeklyResponse:
{ "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"}Insight (Prompt Grade)
Section titled “Insight (Prompt Grade)”The Insight section powers the Prompt Grade page — it’s the per-sub-session rubric (seven booleans + intent class + judge status + letter grade).
GET /v1/score_v3/insight/sessions
Section titled “GET /v1/score_v3/insight/sessions”Recent rubric rows for the authenticated developer.
GET /v1/score_v3/insight/sessions?limit=50Returns 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.
GET /v1/score_v3/insight/summary
Section titled “GET /v1/score_v3/insight/summary”Aggregate summary across the requested window.
GET /v1/score_v3/insight/sessions_range
Section titled “GET /v1/score_v3/insight/sessions_range”Rubric rows inside an explicit from / to range.
POST /v1/score_v3/insight/backfill
Section titled “POST /v1/score_v3/insight/backfill”Admin trigger to backfill rubric output over a window.
Trivia
Section titled “Trivia”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
Section titled “GET /v1/score_v3/trivia”GET /v1/score_v3/trivia?window=weeklyReturns an array of TriviaItem with score_v3_sub_session_id, reason, created_at, plus title / summary.
GET /v1/score_v3/trivia/trend
Section titled “GET /v1/score_v3/trivia/trend”Trend counts of excluded sessions.
Integrity (anti-gaming flags)
Section titled “Integrity (anti-gaming flags)”GET /v1/score_v3/integrity
Section titled “GET /v1/score_v3/integrity”Flags grouped by kind for the requested window.
GET /v1/score_v3/integrity?window=weeklyResponse:
{ "by_kind": [ { "kind": "auto_retry_storm", "count": 2 }, { "kind": "tiny_prompt_burst", "count": 1 } ]}GET /v1/score_v3/integrity/trend
Section titled “GET /v1/score_v3/integrity/trend”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=dayGET /v1/score_v3/integrity/recent
Section titled “GET /v1/score_v3/integrity/recent”Recent flag rows for the drill-down list.
GET /v1/score_v3/integrity/recent?from=2026-04-01T00:00:00Z&limit=50Sub-session management
Section titled “Sub-session management”PATCH /v1/score_v3/sub-sessions/:id
Section titled “PATCH /v1/score_v3/sub-sessions/:id”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_keyContent-Type: application/json
{ "title": "Fix auth flow timeout", "summary": "Investigated the 30s timeout in the login redirect and shipped a retry."}GET /v1/score_v3/realtime/sub-sessions
Section titled “GET /v1/score_v3/realtime/sub-sessions”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:00Zv2 / v3 toggle
Section titled “v2 / v3 toggle”GET /v1/score_v3/toggle
Section titled “GET /v1/score_v3/toggle”Read the developer’s preferred scoring version ("v2", "v3", or null for org default).
PUT /v1/score_v3/toggle
Section titled “PUT /v1/score_v3/toggle”Persist the preference.
PUT /v1/score_v3/toggleContent-Type: application/json
{ "pref": "v3" }pref accepts "v2", "v3", or null.
v3 reports
Section titled “v3 reports”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.
| Endpoint | Method | Purpose |
|---|---|---|
/v1/score_v3/report | GET | Latest v3 report |
/v1/score_v3/report/generate | POST | Generate a new v3 report |
/v1/score_v3/report/history | GET | Past reports |
/v1/score_v3/report/pending | GET | In-progress report (or 204) |
/v1/score_v3/report/status/:id | GET | Status of a running job |
/v1/score_v3/report/cancel/:id | POST | Cancel a running job |
/v1/score_v3/report/:id | GET / DELETE | Fetch or delete one report |