More endpoints — API reference
Additional endpoints not grouped above.
0.16.6). Download the full spec at /docs/openapi.json.alerts
GET /alerts
List Alerts
List the project’s alert rules (newest first).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /alerts
Create Alert
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | |
measureKey | string | null | no | |
comparator | string | null | no | |
threshold | number | null | no | |
window | string | no | |
metricKey | string | null | no | |
severity | string | no | |
sinks | string[] | null | no | |
tags | string[] | null | no | |
cooldownMinutes | integer | no | |
enabled | boolean | no | |
ruleType | string | no | |
config | object | null | no | |
kpiId | string | null | no | |
lookbackDays | integer | null | no | |
minDeltaPct | number | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /alerts/catalogue
Alert Catalogue
The alertable measures + comparators + windows the rule-builder picker renders.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
GET /alerts/{rule_id}
Get Alert
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
rule_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
PATCH /alerts/{rule_id}
Update Alert
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
rule_id | path | string | yes |
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
name | string | null | no | |
measureKey | string | null | no | |
comparator | string | null | no | |
threshold | number | null | no | |
window | string | null | no | |
metricKey | string | null | no | |
severity | string | null | no | |
sinks | string[] | null | no | |
tags | string[] | null | no | |
cooldownMinutes | integer | null | no | |
enabled | boolean | null | no | |
ruleType | string | null | no | |
config | object | null | no | |
kpiId | string | null | no | |
lookbackDays | integer | null | no | |
minDeltaPct | number | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
DELETE /alerts/{rule_id}
Delete Alert
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
rule_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /alerts/{rule_id}/events
Get Alert Events
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
rule_id | path | string | yes | |
limit | query | integer | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /alerts/{rule_id}/test
Test Alert
Evaluate the rule NOW as a dry-run — resolve its metric over the window and report the value
- whether it would breach — WITHOUT recording an insight, firing a sink, or touching bookkeeping. The ‘Test’ button in the rule editor.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
rule_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
autonomy
GET /autonomy/decisions
List Decisions Route
The decision trail — every autonomous admission, refusal, suspension, resume and cancel.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | no | |
offset | query | integer | no | |
decision | query | string | null | no | |
remediationId | query | string | null | no | |
reason | query | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /autonomy/resume
Resume Route
Resume a suspended project. 409 when it is not suspended — resuming what is already running
would write a misleading resumed row into the decision trail.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
GET /autonomy/settings
Get Settings Route
The project’s autonomy level, suspension state and auto-accept policy.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
PATCH /autonomy/settings
Patch Settings Route
Set the autonomy level and/or the auto-accept policy.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
level | string | null | no | |
policy | object | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /autonomy/status
Status Route
The SPA’s single call: level + suspension + policy + the live health and budget signals the sweep will act on, plus the platform ceilings and what has already happened today.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /autonomy/suspend
Suspend Route
The human kill switch: suspend autonomy for this project and cancel anything in flight.
Details
Request body (application/json)
Schema: object.
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
badges
POST /badge/mint
Mint Badge
Mint a signed badge token + ready-to-paste markdown for the current project (+ optional judge).
Details
Request body (application/json)
Schema: object.
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /badge/{token}.svg
Badge Svg
PUBLIC eval-status badge. Verify the token, pin the tenant schema, render the SVG.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
token | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
cost-optimization
GET /cost-optimization/frontier
Get Frontier
Which cheaper model could judge your traces without losing your trust.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
window | query | string | null | no | |
start | query | string | null | no | |
end | query | string | null | no | |
version | query | string | null | no | one agent version label, or __unversioned__ for traces with no label |
bar | query | number | null | no | agreement bar in 0–1; overrides the default |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /cost-optimization/judges
Get Judges
What each LLM judge cost you over the window, and what it would cost at other coverages.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
window | query | string | null | no | |
start | query | string | null | no | |
end | query | string | null | no | |
version | query | string | null | no | one agent version label, or __unversioned__ for traces with no label |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /cost-optimization/moves
Get Moves
The ranked list of ways to cut LLM cost without losing quality — at most one per subject.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
window | query | string | null | no | |
start | query | string | null | no | |
end | query | string | null | no | |
version | query | string | null | no | one agent version label, or __unversioned__ for traces with no label |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /cost-optimization/summary
Get Summary
What your agent and your LLM judges cost over a window, and what one trace costs.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
window | query | string | null | no | |
start | query | string | null | no | |
end | query | string | null | no | |
version | query | string | null | no | one agent version label, or __unversioned__ for traces with no label |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
custom-measures
GET /custom-measures
List Custom Measures
This tenant’s measures + the platform catalogue + the authoring limit.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /custom-measures
Create Custom Measure
Define a new measure. Admin (MANAGE_MEASURES) + custom_measures tier (Silver+).
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
slug | string | yes | |
label | string | yes | |
source | string | yes | |
agg | string | yes | |
grain | string | null | no | |
unit | string | null | no | |
description | string | null | no | |
outcomeKind | string | null | no | |
outcomeSource | string | null | no | |
metadataPath | string | null | no | |
classifierMetricKey | string | null | no | |
classifierLabels | string[] | null | no | |
rateOp | string | null | no | |
rateValue | number | null | no | |
caseReducer | string | null | no | |
filters | object | null | no | |
direction | string | null | no | |
target | number | null | no | |
category | string | null | no |
Responses
| Status | Description |
|---|---|
201 | Successful Response |
422 | Validation Error |
GET /custom-measures/options
Custom Measure Options
The vocabulary an author can pick from — the shipped grammar plus what this project has really observed.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /custom-measures/preview
Preview Custom Measure
Resolve an UNSAVED definition over a bounded window — the “does this actually work?” button.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
definition | object | yes | |
days | integer | null | no | |
dimensions | string[] | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /custom-measures/references/{slug}
Custom Measure References
What currently reads this measure — shown BEFORE a destructive edit, not after.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
slug | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
PATCH /custom-measures/{slug}
Update Custom Measure
Edit a measure you own. Editing a built-in platform measure returns 409.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
slug | path | string | yes |
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
slug | string | null | no | |
label | string | null | no | |
description | string | null | no | |
unit | string | null | no | |
grain | string | null | no | |
agg | string | null | no | |
source | string | null | no | |
outcomeKind | string | null | no | |
outcomeSource | string | null | no | |
metadataPath | string | null | no | |
classifierMetricKey | string | null | no | |
classifierLabels | string[] | null | no | |
rateOp | string | null | no | |
rateValue | number | null | no | |
caseReducer | string | null | no | |
filters | object | null | no | |
direction | string | null | no | |
target | number | null | no | |
category | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
DELETE /custom-measures/{slug}
Delete Custom Measure
Delete a measure. Reports what still REFERENCES it rather than silently orphaning them.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
slug | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
docs
GET /docs-search
Docs Search
Search the shipped documentation. Returns ranked page snippets (may be empty).
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
q | query | string | no | Search query over the product documentation. |
limit | query | integer | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
fix-engine
GET /fix-engine/runs
List Fix Runs
List fix runs (project-scoped), optionally filtered by remediation / status.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
remediationId | query | string | null | no | |
status | query | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /fix-engine/runs
Create Fix Run
Launch a Neens-orchestrated fix run for an accepted remediation.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
remediationId | string | yes | |
driver | string | null | no | |
vcsInstallationId | string | null | no | |
repoUrl | string | null | no | |
baseBranch | string | null | no | |
versionLabel | string | null | no | |
endpointUrl | string | null | no | |
agentConnectionId | string | null | no | |
maxAttempts | integer | null | no | |
passK | integer | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /fix-engine/runs/{run_id}
Get Fix Run
Fix-run detail (incl. eval/regression report + verifying judges + PR link).
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
run_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /fix-engine/runs/{run_id}/cancel
Cancel Fix Run
Cancel a fix run (terminal). A run already in a terminal state cannot be cancelled.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
run_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /fix-engine/vcs-installations
List Vcs Installations
List the project’s VCS installations. NEVER returns the decrypted credential.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /fix-engine/vcs-installations
Create Vcs Installation
Register a GitHub App / local-git installation the fix engine opens PRs against. The credential (GitHub App PEM / token) is Fernet-encrypted at rest and NEVER returned.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
provider | string | yes | |
name | string | yes | |
repoUrl | string | null | no | |
baseBranch | string | null | no | |
config | object | null | no | |
credential | string | null | no |
Responses
| Status | Description |
|---|---|
201 | Successful Response |
422 | Validation Error |
DELETE /fix-engine/vcs-installations/{inst_id}
Delete Vcs Installation
Delete a VCS installation.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inst_id | path | string | yes |
Responses
| Status | Description |
|---|---|
204 | Successful Response |
422 | Validation Error |
POST /fix-engine/vcs-installations/{inst_id}/test
Test Vcs Installation
Bounded reachability/auth probe: for github_app mint an installation token; for
local_git run git ls-remote. Honest {ok, detail}; never raises to a 500.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inst_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
kpi-definitions
GET /kpi-definitions
Get Kpi Definitions
This project’s EFFECTIVE KPI definitions (declared values merged over platform defaults).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
PUT /kpi-definitions
Put Kpi Definitions
Declare what this project’s KPIs mean. Admin-only (MANAGE_OUTCOMES).
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
definitions | object | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /kpi-definitions/options
Kpi Options
The vocabulary an admin can actually pick from — the platform catalogue plus what this project has really observed.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
metricKey | query | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
kpis
GET /kpis
List Kpis
This project’s KPIs. status = live (default: draft + active) | active |
draft | archived | all.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /kpis
Create Kpi
Promote a measure to a commitment.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
measureKey | string | null | no | |
measure_key | string | null | no | |
label | string | null | no | |
description | string | null | no | |
direction | string | null | no | |
target | number | null | no | |
owner | string | null | no | |
status | string | null | no | |
priority | integer | null | no | |
reviewCadence | string | null | no | |
review_cadence | string | null | no |
Responses
| Status | Description |
|---|---|
201 | Successful Response |
422 | Validation Error |
GET /kpis/options
Kpi Options
The measures this project may promote, each annotated with what the project actually has.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /kpis/snapshot
Snapshot All Kpis
Materialize daily history for every ACTIVE KPI in the caller’s project scope.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
days | query | integer | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /kpis/summary
Kpi Summary
Every ACTIVE KPI with its current value, in display order.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
range | query | string | no | |
from | query | string | null | no | |
to | query | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /kpis/{kpi_id}
Get Kpi
One KPI plus its current value over ?range=.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
kpi_id | path | string | yes | |
range | query | string | no | |
from | query | string | null | no | |
to | query | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
PATCH /kpis/{kpi_id}
Patch Kpi
Partially update a KPI.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
kpi_id | path | string | yes |
Request body (application/json) — required
Schema: object.
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /kpis/{kpi_id}/archive
Archive Kpi
Retire a commitment.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
kpi_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /kpis/{kpi_id}/calibration
Kpi Calibration
How well this KPI’s LLM classifier agrees with human ground truth.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
kpi_id | path | string | yes | |
days | query | integer | no | |
window | query | integer | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /kpis/{kpi_id}/eroding-clusters
Kpi Eroding Clusters
The failure clusters eroding this KPI, worst first.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
kpi_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /kpis/{kpi_id}/history
Kpi History
This KPI’s materialized daily history, plus where the series BREAKS.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
kpi_id | path | string | yes | |
days | query | integer | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /kpis/{kpi_id}/snapshot
Snapshot Kpi
Materialize daily history for ONE KPI.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
kpi_id | path | string | yes | |
days | query | integer | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
mcp
GET /mcp
Mcp Get
Server→client SSE stream is not offered (stateless server). Beating the SPA GET catch-all with an explicit 405 so a client’s optional GET probe gets a clean answer, not the app shell.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /mcp
Mcp Endpoint
MCP Streamable HTTP endpoint. Accepts a single JSON-RPC message or a batch array.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
mcp-oauth
GET /.well-known/oauth-authorization-server
Oauth Authorization Server
RFC 8414 authorization-server metadata (fully wired).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
GET /.well-known/oauth-protected-resource
Oauth Protected Resource
RFC 9728 protected-resource metadata (fully wired).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
GET /.well-known/oauth-protected-resource/mcp
Oauth Protected Resource Mcp
RFC 9728 metadata under the resource path some clients probe (fully wired).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
GET /auth/mcp/tokens
List My Mcp Tokens
List the caller’s OWN active nk_mcp_ tokens (bearer nk_sess_/nk_mcp_ auth).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
DELETE /auth/mcp/tokens/{token_id}
Revoke My Mcp Token
Revoke one of the caller’s OWN nk_mcp_ tokens by id (bearer-authenticated).
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
token_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /oauth/authorize
Oauth Authorize
OAuth 2.1 authorization endpoint (the browser entry point from Claude Code).
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
response_type | query | string | no | |
client_id | query | string | no | |
redirect_uri | query | string | no | |
code_challenge | query | string | no | |
code_challenge_method | query | string | no | |
state | query | string | no | |
scope | query | string | no | |
resource | query | string | no | |
login_hint | query | string | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /oauth/authorize/decision
Oauth Authorize Decision
The SPA consent callback (bearer nk_sess_-authenticated).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /oauth/introspect
Oauth Introspect
RFC 7662 token introspection.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /oauth/register
Oauth Register
Full Dynamic Client Registration (RFC 7591) + RFC 7592 registration credential.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
GET /oauth/register/{client_id}
Oauth Register Get
RFC 7592 client read — return the current registration (registration-token authed).
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
client_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
PUT /oauth/register/{client_id}
Oauth Register Put
RFC 7592 client update — apply whitelisted metadata (registration-token authed).
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
client_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
DELETE /oauth/register/{client_id}
Oauth Register Delete
RFC 7592 client delete — soft-disable the client (registration-token authed). 204.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
client_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /oauth/revoke
Oauth Revoke
RFC 7009 token revocation — user-scoped.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /oauth/token
Oauth Token
OAuth 2.1 token endpoint (grant_type=authorization_code).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
model-prices
GET /model-prices
List Model Prices
The tenant’s price table — platform list prices plus this project’s own overrides.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
includeHistory | query | boolean | no | |
provider | query | string | null | no | |
q | query | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /model-prices
Create Model Price
Create (or idempotently replace) a TENANT price override.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
modelId | string | yes | |
provider | string | null | no | |
displayName | string | null | no | |
familyPrefix | string | null | no | |
inputPerMillion | number | null | no | |
cachedInputPerMillion | number | null | no | |
outputPerMillion | number | null | no | |
effectiveFrom | string | null | no | |
effectiveTo | string | null | no | |
notes | string | null | no |
Responses
| Status | Description |
|---|---|
201 | Successful Response |
422 | Validation Error |
GET /model-prices/observed
Observed Models
The models this project ACTUALLY ran over the window, joined against the resolved table.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
range | query | string | no | |
from | query | string | null | no | |
to | query | string | null | no | |
projectId | query | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
PATCH /model-prices/{price_id}
Update Model Price
Edit a TENANT price row. A platform row is immutable to the tenant → 409.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
price_id | path | string | yes |
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
provider | string | null | no | |
displayName | string | null | no | |
inputPerMillion | number | null | no | |
cachedInputPerMillion | number | null | no | |
outputPerMillion | number | null | no | |
effectiveFrom | string | null | no | |
effectiveTo | string | null | no | |
notes | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
DELETE /model-prices/{price_id}
Delete Model Price
Delete a TENANT override — the model reverts to the platform list price, or to unpriced
if the catalogue does not name it. A platform row is immutable to the tenant → 409.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
price_id | path | string | yes |
Responses
| Status | Description |
|---|---|
204 | Successful Response |
422 | Validation Error |
model-sweeps
GET /model-sweeps
List Model Sweeps
List sweeps (project-scoped), newest first. Headers only — the per-arm detail is one read away and a list page must not fan out N reconciles.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | null | no | |
limit | query | integer | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /model-sweeps
Create Model Sweep Route
Create a sweep + its arms and enqueue the launch onto the DEDICATED pre-prod fleet.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
datasetId | string | null | no | |
datasetVersionId | string | null | no | |
scenarioSuiteId | string | null | no | |
arms | ModelSweepArmBody[] | no | |
passK | integer | null | no | |
judgeDeploymentIds | string[] | null | no | |
budgetUsd | number | null | no | |
name | string | yes | |
versionLabel | string | yes | |
gate | object | null | no | |
baseline | object | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /model-sweeps/preview
Preview Model Sweep
Pre-flight cost estimate — writes nothing, spends nothing.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
datasetId | string | null | no | |
datasetVersionId | string | null | no | |
scenarioSuiteId | string | null | no | |
arms | ModelSweepArmBody[] | no | |
passK | integer | null | no | |
judgeDeploymentIds | string[] | null | no | |
budgetUsd | number | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /model-sweeps/{sweep_id}
Get Model Sweep
Sweep detail: header + arms + per-arm child runs, reconciled live.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
sweep_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /model-sweeps/{sweep_id}/arms/{arm_id}/regressions
Sweep Arm Regressions
Where this arm breaks: the golden prompts the BASELINE stably passed and this arm did not.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
sweep_id | path | string | yes | |
arm_id | path | string | yes | |
baselineArm | query | string | null | no | |
limit | query | integer | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /model-sweeps/{sweep_id}/cancel
Cancel Model Sweep
Cancel a sweep + every non-terminal child pre-prod run it launched.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
sweep_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /model-sweeps/{sweep_id}/comparison
Sweep Comparison
The N-way comparison: per-arm quality + cost + regressions, the per-agent split, and ONE verdict — reconciled live so a running sweep is current.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
sweep_id | path | string | yes | |
bar | query | number | null | no | pass-rate bar in 0–1; overrides the sweep’s gate |
baselineArm | query | string | null | no | arm id to compare against (default: position 0) |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /model-sweeps/{sweep_id}/frontier
Sweep Frontier
The agent-model cost–quality frontier for a sweep — per-arm cost (per case) vs stable-pass quality, with each arm classified (recommended / on_frontier / overpaying / quality_risk / unknown) and ONE recommended move.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
sweep_id | path | string | yes | |
bar | query | number | null | no | pass-rate bar in 0–1; overrides the sweep’s gate |
baselineArm | query | string | null | no | arm id to treat as the incumbent (default: pos 0) |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
other
GET /app-config
App Config
Front-end bootstrap: docs URL + release version. Public, non-tenant, cache-friendly.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
GET /health
Health
Liveness: the process is up. Always 200, cheap, no I/O.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
GET /ready
Ready
Readiness: probe the backends this role depends on. 200 if all ok, else 503.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
outcome-inlets
GET /outcome-inlets
List Connectors
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /outcome-inlets
Create Connector
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
provider | string | yes | |
name | string | yes | |
baseUrl | string | yes | |
credential | string | null | no | |
options | object | null | no | |
enabled | boolean | null | no | |
pollIntervalMinutes | integer | null | no | |
backfillDays | integer | null | no |
Responses
| Status | Description |
|---|---|
201 | Successful Response |
422 | Validation Error |
PATCH /outcome-inlets/{inlet_id}
Update Connector
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inlet_id | path | string | yes |
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
name | string | null | no | |
baseUrl | string | null | no | |
credential | string | null | no | |
options | object | null | no | |
enabled | boolean | null | no | |
pollIntervalMinutes | integer | null | no | |
backfillDays | integer | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
DELETE /outcome-inlets/{inlet_id}
Delete Connector
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inlet_id | path | string | yes |
Responses
| Status | Description |
|---|---|
204 | Successful Response |
422 | Validation Error |
POST /outcome-inlets/{inlet_id}/sync
Sync Connector
Run this connector’s sync NOW (bounded), synchronously off the event loop. Never 500s on a
connector error — returns {ok: false,...}.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inlet_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /outcome-inlets/{inlet_id}/test
Test Connector
Bounded reachability/auth probe. Honest error string on failure; never raises to a 500.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inlet_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
outcomes
GET /outcomes
List Outcomes
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
kind | query | string | null | no | |
source | query | string | null | no | |
matchState | query | string | null | no | |
correlationKey | query | string | null | no | |
conversationId | query | string | null | no | |
sessionId | query | string | null | no | |
since | query | string | null | no | |
until | query | string | null | no | |
includeSuperseded | query | boolean | no | |
limit | query | integer | no | |
offset | query | integer | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /outcomes
Push Outcomes
Record one or many business outcomes.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
correlationKey | string | null | no | |
correlationType | string | null | no | |
kind | string | null | no | |
value | object | no | |
unit | string | null | no | |
valueType | string | null | no | |
occurredAt | object | no | |
metadata | object | no | |
idempotencyKey | string | null | no | |
externalId | string | null | no | |
source | string | null | no | |
outcomes | OutcomeIn[] | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /outcomes/coverage
Outcome Coverage
Match coverage — the honest denominator.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
since | query | string | null | no | |
until | query | string | null | no | |
kind | query | string | null | no | |
source | query | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /outcomes/kinds
List Kinds
The platform outcome catalogue. An unknown kind is still accepted on push (forward compatibility with tenant-defined KPIs) — this is the curated set the UI offers.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /outcomes/reconcile
Reconcile Now
Re-attempt correlation for this project’s parked outcomes, right now.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
GET /outcomes/settings
Get Settings Route
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
PUT /outcomes/settings
Put Settings Route
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
externalKeyPaths | string[] | null | no | |
matchWindowHours | integer | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /outcomes/{outcome_id}
Get Outcome
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
outcome_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /outcomes/{outcome_id}/revisions
Get Outcome Revisions
Every revision of the outcome’s series, oldest → newest.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
outcome_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
prompt-optimization
GET /prompt-optimization/preview
Preview Optimization
Pre-flight: the resolved task set, the recovered baseline prompt, the graders, and an ESTIMATED rollout count — everything a user needs to judge the cost BEFORE spending a cent of their own LLM budget. Read-only; makes no LLM call and writes nothing.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
failureModeId | query | string | null | no | |
clusterId | query | string | null | no | |
maxTasks | query | integer | null | no | |
valFraction | query | number | null | no | |
minibatchSize | query | integer | null | no | |
maxIterations | query | integer | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /prompt-optimization/runs
List Optimization Runs
List optimization runs (project-scoped), newest first.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | null | no | |
failureModeId | query | string | null | no | |
limit | query | integer | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /prompt-optimization/runs
Create Optimization Run
Launch a GEPA-style offline prompt-optimization run.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
failureModeId | string | null | no | |
clusterId | string | null | no | |
name | string | null | no | |
sessionIds | string[] | null | no | |
judgeIds | string[] | null | no | |
connectionId | string | null | no | |
objective | string | null | no | |
maxRollouts | integer | null | no | |
maxIterations | integer | null | no | |
minibatchSize | integer | null | no | |
maxTasks | integer | null | no | |
valFraction | number | null | no | |
minImprovement | number | null | no | |
autoEmit | boolean | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /prompt-optimization/runs/{run_id}
Get Optimization Run
Run detail: the run + its candidate lineage + the Pareto frontier (recomputed over the recorded per-task train scores, so the UI’s badges are derived from the same pure function the loop used) + the outcome verdict + the markdown proof report.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
run_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /prompt-optimization/runs/{run_id}/cancel
Cancel Optimization Run
Cancel a queued/running run (terminal). The worker re-reads the status at the top of every
iteration, so an in-flight run stops at the next boundary instead of spending the rest of the
budget; every terminal write it makes is guarded AND status NOT IN ('cancelled').
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
run_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /prompt-optimization/runs/{run_id}/candidates/{candidate_id}
Get Optimization Candidate
One candidate + its recorded rollouts (bounded), so a reviewer can read the actual replayed output and the judge’s reasoning behind every per-task score.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
run_id | path | string | yes | |
candidate_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /prompt-optimization/runs/{run_id}/emit-remediation
Emit Remediation
Manually emit the winning candidate as a prompt_change remediation (the autoEmit=false
path). 409 when the run already emitted one; 422 when it did not clear the held-out bar — a run
that never beat baseline has nothing to propose, and that is a legitimate result, not an error.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
run_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
redaction
POST /redaction/preview
Preview Redaction
Run the project’s policy (± a mode override) over a sample. NEVER persists the text.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
text | string | yes | |
mode | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /redaction/settings
Get Redaction Settings
The per-project policy row + the resolved effective modes (for the governance UI).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
PUT /redaction/settings
Put Redaction Settings
Set the per-project policy. Admin-gated (MANAGE_RETENTION — the same privacy-admin
persona that owns retention/erasure; deliberately no new authz action).
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | yes | |
enforced | boolean | no | |
egressMode | string | no | |
allowlist | string[] | no | |
customPatterns | CustomPatternBody[] | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
run-targets
GET /run-targets
List Run Targets
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /run-targets
Create Run Target
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | |
kind | string | yes | |
grain | string | yes | |
filter | object | null | no | |
sampling | object | null | no | |
datasetId | string | null | no | |
datasetVersionId | string | null | no | |
followLatest | boolean | no | |
defaultTrigger | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /run-targets/{run_target_id}
Get Run Target
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
run_target_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
PATCH /run-targets/{run_target_id}
Patch Run Target
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
run_target_id | path | string | yes |
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
name | string | null | no | |
filter | object | null | no | |
sampling | object | null | no | |
datasetId | string | null | no | |
datasetVersionId | string | null | no | |
followLatest | boolean | null | no | |
defaultTrigger | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
DELETE /run-targets/{run_target_id}
Delete Run Target
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
run_target_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
scenario-suites
GET /scenario-suites
List Suites
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /scenario-suites
Create Suite
Create a scenario suite from a set of failure modes + kick off generation.
Details
Request body (application/json) — required
Schema: object.
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /scenario-suites/{suite_id}
Get Suite
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
suite_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
DELETE /scenario-suites/{suite_id}
Delete Suite
Hard-delete a suite AND its owned synthetic dataset (items + versions). A launched pre-prod run already snapshotted its items, so it is unaffected.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
suite_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /scenario-suites/{suite_id}/launch
Launch Suite
One-click: create a pre-prod eval run over this suite’s synthetic golden dataset.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
suite_id | path | string | yes |
Request body (application/json)
Schema: object.
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /scenario-suites/{suite_id}/regenerate
Regenerate Suite
Re-run generation for a suite (e.g. after adding exemplars or configuring an LLM). Optional
body may override per_mode/strategies/include_replay/connection_id.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
suite_id | path | string | yes |
Request body (application/json)
Schema: object.
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /scenario-suites/{suite_id}/scenarios
List Scenarios
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
suite_id | path | string | yes | |
limit | query | integer | no | |
offset | query | integer | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
scorer-comparisons
GET /scorer-comparisons
List Scorer Comparisons
List comparisons (project-scoped), newest first — headers only.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /scorer-comparisons
Create Scorer Comparison Route
Create a scorer comparison and start scoring.
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | |
judgeId | string | yes | |
scorerConnectionIds | string[] | no | |
window | string | null | no | |
windowStart | string | null | no | |
windowEnd | string | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /scorer-comparisons/{comparison_id}
Get Scorer Comparison
Comparison detail: meta + status/progress + the per-scorer side-by-side aggregate.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
comparison_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /scorer-comparisons/{comparison_id}/cancel
Cancel Scorer Comparison
Cancel a comparison that is still in progress. Scoring stops shortly after; any results already computed are kept.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
comparison_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /scorer-comparisons/{comparison_id}/run
Run Scorer Comparison Route
(Re)run a comparison to fill in any missing scores. Already-computed results are kept; only traces that have not yet been scored by a given scorer are scored.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
comparison_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
share-links
GET /share-links
List Share Links
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /share-links
Create Share Link
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
resourceType | string | yes | |
resourceId | string | yes | |
ttlHours | integer | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /share-links/settings
Get Share Settings
Per-project toggle state + the global flag / TTL bounds (for the UI).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
PUT /share-links/settings
Put Share Settings
Flip the per-project share toggle. Admin-gated: enabling PUBLIC (even redacted) sharing is a
sensitive project-config / data-governance decision, so it reuses the admin DELETE_RESOURCE
capability. (A dedicated MANAGE_SHARE_LINKS action is the clean follow-up — deferred to
avoid editing the shared authz matrix concurrently.)
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
enabled | boolean | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
DELETE /share-links/{link_id}
Revoke Share Link
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
link_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /share/{token}
Public Share View
Resolve a share token → pin the owning company’s schema → load + REDACT the incident.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
token | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
spend-budgets
GET /spend-budgets
List Budgets Route
Every known feature’s budget for this project (unconfigured features read as unlimited).
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
GET /spend-budgets/{feature}
Get Budget Route
One feature’s budget.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
feature | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
PUT /spend-budgets/{feature}
Put Budget Route
Set a feature’s spend limit + period. limitUsd: null clears the limit.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
feature | path | string | yes |
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
limitUsd | number | null | no | |
period | string | null | no | |
enabled | boolean | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /spend-budgets/{feature}/usage
Budget Usage Route
The current period’s spend against the limit, plus the ledger rows behind it.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
feature | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
trace-inlets
GET /trace-inlets
List Connectors
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |
POST /trace-inlets
Create Connector
Details
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
provider | string | yes | |
name | string | yes | |
baseUrl | string | yes | |
credential | string | null | no | |
options | object | null | no | |
enabled | boolean | null | no | |
pollIntervalMinutes | integer | null | no | |
backfillDays | integer | null | no |
Responses
| Status | Description |
|---|---|
201 | Successful Response |
422 | Validation Error |
PATCH /trace-inlets/{inlet_id}
Update Connector
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inlet_id | path | string | yes |
Request body (application/json) — required
| Field | Type | Required | Description |
|---|---|---|---|
name | string | null | no | |
baseUrl | string | null | no | |
credential | string | null | no | |
options | object | null | no | |
enabled | boolean | null | no | |
pollIntervalMinutes | integer | null | no | |
backfillDays | integer | null | no |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
DELETE /trace-inlets/{inlet_id}
Delete Connector
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inlet_id | path | string | yes |
Responses
| Status | Description |
|---|---|
204 | Successful Response |
422 | Validation Error |
POST /trace-inlets/{inlet_id}/sync
Sync Connector
Run this connector’s sync NOW (bounded), synchronously off the event loop. Never 500s on a
connector error — returns {ok: false,...}.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inlet_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
POST /trace-inlets/{inlet_id}/test
Test Connector
Bounded reachability/auth probe. Honest error string on failure; never raises to a 500.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
inlet_id | path | string | yes |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
usage
GET /usage
Get Usage
Return the current tenant’s usage aggregates, grouped by group_by.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
since | query | string | null | no | Inclusive start day (YYYY-MM-DD); default 30d ago |
until | query | string | null | no | Inclusive end day (YYYY-MM-DD); default today |
project_id | query | string | null | no | Restrict to one project id |
group_by | query | string | no | feature | day | project | connection |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /usage/kpis
Get Usage Kpis
Headline KPI tiles for the tenant Usage page.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
since | query | string | null | no | Inclusive start day (YYYY-MM-DD); default 30d ago |
until | query | string | null | no | Inclusive end day (YYYY-MM-DD); default today |
project_id | query | string | null | no | Restrict to one project id |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
GET /usage/summary
Get Usage Summary
Totals per feature for the window + a daily timeseries for the headline features.
Details
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
since | query | string | null | no | Inclusive start day (YYYY-MM-DD); default 30d ago |
until | query | string | null | no | Inclusive end day (YYYY-MM-DD); default today |
project_id | query | string | null | no | Restrict to one project id |
Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
webhooks
POST /webhooks/github
Github Webhook
Handle a GitHub webhook delivery. ping ⇒ {ok:true}; a MERGED pull_request closed
event ⇒ record a close-out watch on the owning remediation. Auth is the HMAC signature only.
Details
Responses
| Status | Description |
|---|---|
200 | Successful Response |