Seat scorecard by project, dispatch kind, card revision, model, profile, harness and effort.
Seat scorecard for every dispatch in a date range, grouped by project × dispatch kind × card revision at dispatch time × model × profile × harness × effort. Per bucket: seat count, status mix, the completed seats that delivered over budget (a stored runner budget breach - apart from failures), the review seats' typed verdict mix (with seats missing a verdict), the GitHub review mix, dollars and tokens per seat (every cost row), p50/p90 duration, eval pass rate, first-pass merge and rework rounds. Review accuracy, profile, effort, time to merge and cache share are not reported until their sources land; `unavailableDimensions` names the issue for each, and for seats with no stored launch revision or typed verdict. The window is half-open: dispatchedAfter is inclusive (default 30 days before dispatchedBefore or now) and dispatchedBefore is exclusive. The scan reads the newest dispatches first and sets `truncated` when the limit cut it. A projectId the caller cannot access answers 404, exactly like a missing project. Missing links land in an "unattributed" bucket; open PRs count as pending. Each source reports its latest row and fresh/stale status; every metric derived from a stale source is null, with the reason in `unavailable`.
AuthorizationBearer <WorkOS user access token>WorkOS user access token created by the Rensei CLI. The authenticated organization is resolved from membership and may be narrowed with X-Rensei-Org.
orgId?stringprojectId?stringdispatchedAfter?stringdispatchedBefore?stringlimit?integer0 < value <= 50000Dispatch scorecard buckets with counts behind each rate.
application/json- response
filter*buckets*array<>totals*sources*truncated*booleanunavailable*unavailableDimensions*computedAt*stringcurl -X GET 'https://app.rensei.ai/api/factory/dispatch-scorecard'{ "filter": { "workspaceId": "string", "projectId": "string", "dispatchedAfter": "string", "dispatchedBefore": "string", "limit": 0 }, "buckets": [ { "project": "string", "dispatchKind": "string", "model": "string", "harness": "string", "card": "string", "cardRevision": "string", "profile": "string", "effort": "string", "dispatched": 0, "seats": 0, "merged": 0, "abandoned": 0, "pending": 0, "completed": 0, "failed": 0, "other": 0, "deliveredOverBudget": 0, "verdictApprove": 0, "verdictRequestChanges": 0, "verdictMissing": 0, "githubApprovals": 0, "githubChangesRequested": 0, "githubOtherReviews": 0, "notDelivered": 0, "costUsd": 0, "costPerSeat": 0, "listCostUsd": 0, "listCostPerSeat": 0, "unpricedRows": 0, "tokens": 0, "tokensPerSeat": 0, "durationP50Minutes": 0, "durationP90Minutes": 0, "evals": 0, "evalsPassed": 0, "evalPassRate": 0, "firstPassSuccess": 0, "firstPassSuccessRate": 0, "reviews": 0, "reviewsApproved": 0, "reviewPassRate": 0, "reworkRoundsTotal": 0, "mergedIssues": 0, "meanReworkRounds": 0 } ], "totals": { "dispatched": 0, "seats": 0, "merged": 0, "abandoned": 0, "pending": 0, "completed": 0, "failed": 0, "other": 0, "deliveredOverBudget": 0, "notDelivered": 0, "costUsd": 0, "listCostUsd": 0, "unpricedRows": 0, "tokens": 0 }, "sources": { "dispatches": { "table": "string", "latestAt": "string", "status": "fresh" }, "cost": { "table": "string", "latestAt": "string", "status": "fresh" }, "prs": { "table": "string", "latestAt": "string", "status": "fresh" }, "reviews": { "table": "string", "latestAt": "string", "status": "fresh" }, "rework": { "table": "string", "latestAt": "string", "status": "fresh" }, "evals": { "table": "string", "latestAt": "string", "status": "fresh" }, "delivery": { "table": "string", "latestAt": "string", "status": "fresh" } }, "truncated": true, "unavailable": { "property1": "string", "property2": "string" }, "unavailableDimensions": { "property1": "string", "property2": "string" }, "computedAt": "string"}CI runs, re-runs and failures by head SHA for one repository.
Runs, `run_attempt` re-runs and failures for one repository in a window, grouped by head SHA (and branch) from the org-stamped ci_pipeline_runs rows. Rows with a NULL head SHA are skipped. The window is half-open: since is inclusive and before is exclusive.
List failure signatures visible to the caller (org + system tier).
Returns the caller's org-scoped signatures plus every system-tier (NULL organization_id) signature, ordered by signature key (an org row sorts before a system row of the same key, then by tier). Optional `tier`/`kind` query params narrow the result.