API referenceMore endpoints

More endpoints — API reference

Additional endpoints not grouped above.

Generated from the live OpenAPI schema (version 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

StatusDescription
200Successful Response

POST /alerts

Create Alert

Details

Request body (application/json) — required

FieldTypeRequiredDescription
namestringyes
measureKeystring | nullno
comparatorstring | nullno
thresholdnumber | nullno
windowstringno
metricKeystring | nullno
severitystringno
sinksstring[] | nullno
tagsstring[] | nullno
cooldownMinutesintegerno
enabledbooleanno
ruleTypestringno
configobject | nullno
kpiIdstring | nullno
lookbackDaysinteger | nullno
minDeltaPctnumber | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /alerts/catalogue

Alert Catalogue

The alertable measures + comparators + windows the rule-builder picker renders.

Details

Responses

StatusDescription
200Successful Response

GET /alerts/{rule_id}

Get Alert

Details

Parameters

ParameterInTypeRequiredDescription
rule_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

PATCH /alerts/{rule_id}

Update Alert

Details

Parameters

ParameterInTypeRequiredDescription
rule_idpathstringyes

Request body (application/json) — required

FieldTypeRequiredDescription
namestring | nullno
measureKeystring | nullno
comparatorstring | nullno
thresholdnumber | nullno
windowstring | nullno
metricKeystring | nullno
severitystring | nullno
sinksstring[] | nullno
tagsstring[] | nullno
cooldownMinutesinteger | nullno
enabledboolean | nullno
ruleTypestring | nullno
configobject | nullno
kpiIdstring | nullno
lookbackDaysinteger | nullno
minDeltaPctnumber | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

DELETE /alerts/{rule_id}

Delete Alert

Details

Parameters

ParameterInTypeRequiredDescription
rule_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

GET /alerts/{rule_id}/events

Get Alert Events

Details

Parameters

ParameterInTypeRequiredDescription
rule_idpathstringyes
limitqueryintegerno

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
rule_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

autonomy

GET /autonomy/decisions

List Decisions Route

The decision trail — every autonomous admission, refusal, suspension, resume and cancel.

Details

Parameters

ParameterInTypeRequiredDescription
limitqueryintegerno
offsetqueryintegerno
decisionquerystring | nullno
remediationIdquerystring | nullno
reasonquerystring | nullno

Responses

StatusDescription
200Successful Response
422Validation 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

StatusDescription
200Successful Response

GET /autonomy/settings

Get Settings Route

The project’s autonomy level, suspension state and auto-accept policy.

Details

Responses

StatusDescription
200Successful Response

PATCH /autonomy/settings

Patch Settings Route

Set the autonomy level and/or the auto-accept policy.

Details

Request body (application/json) — required

FieldTypeRequiredDescription
levelstring | nullno
policyobject | nullno

Responses

StatusDescription
200Successful Response
422Validation 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

StatusDescription
200Successful 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

StatusDescription
200Successful Response
422Validation 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

StatusDescription
200Successful Response
422Validation Error

GET /badge/{token}.svg

Badge Svg

PUBLIC eval-status badge. Verify the token, pin the tenant schema, render the SVG.

Details

Parameters

ParameterInTypeRequiredDescription
tokenpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

cost-optimization

GET /cost-optimization/frontier

Get Frontier

Which cheaper model could judge your traces without losing your trust.

Details

Parameters

ParameterInTypeRequiredDescription
windowquerystring | nullno
startquerystring | nullno
endquerystring | nullno
versionquerystring | nullnoone agent version label, or __unversioned__ for traces with no label
barquerynumber | nullnoagreement bar in 0–1; overrides the default

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
windowquerystring | nullno
startquerystring | nullno
endquerystring | nullno
versionquerystring | nullnoone agent version label, or __unversioned__ for traces with no label

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
windowquerystring | nullno
startquerystring | nullno
endquerystring | nullno
versionquerystring | nullnoone agent version label, or __unversioned__ for traces with no label

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
windowquerystring | nullno
startquerystring | nullno
endquerystring | nullno
versionquerystring | nullnoone agent version label, or __unversioned__ for traces with no label

Responses

StatusDescription
200Successful Response
422Validation Error

custom-measures

GET /custom-measures

List Custom Measures

This tenant’s measures + the platform catalogue + the authoring limit.

Details

Responses

StatusDescription
200Successful Response

POST /custom-measures

Create Custom Measure

Define a new measure. Admin (MANAGE_MEASURES) + custom_measures tier (Silver+).

Details

Request body (application/json) — required

FieldTypeRequiredDescription
slugstringyes
labelstringyes
sourcestringyes
aggstringyes
grainstring | nullno
unitstring | nullno
descriptionstring | nullno
outcomeKindstring | nullno
outcomeSourcestring | nullno
metadataPathstring | nullno
classifierMetricKeystring | nullno
classifierLabelsstring[] | nullno
rateOpstring | nullno
rateValuenumber | nullno
caseReducerstring | nullno
filtersobject | nullno
directionstring | nullno
targetnumber | nullno
categorystring | nullno

Responses

StatusDescription
201Successful Response
422Validation 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

StatusDescription
200Successful 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

FieldTypeRequiredDescription
definitionobjectyes
daysinteger | nullno
dimensionsstring[] | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /custom-measures/references/{slug}

Custom Measure References

What currently reads this measure — shown BEFORE a destructive edit, not after.

Details

Parameters

ParameterInTypeRequiredDescription
slugpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

PATCH /custom-measures/{slug}

Update Custom Measure

Edit a measure you own. Editing a built-in platform measure returns 409.

Details

Parameters

ParameterInTypeRequiredDescription
slugpathstringyes

Request body (application/json) — required

FieldTypeRequiredDescription
slugstring | nullno
labelstring | nullno
descriptionstring | nullno
unitstring | nullno
grainstring | nullno
aggstring | nullno
sourcestring | nullno
outcomeKindstring | nullno
outcomeSourcestring | nullno
metadataPathstring | nullno
classifierMetricKeystring | nullno
classifierLabelsstring[] | nullno
rateOpstring | nullno
rateValuenumber | nullno
caseReducerstring | nullno
filtersobject | nullno
directionstring | nullno
targetnumber | nullno
categorystring | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

DELETE /custom-measures/{slug}

Delete Custom Measure

Delete a measure. Reports what still REFERENCES it rather than silently orphaning them.

Details

Parameters

ParameterInTypeRequiredDescription
slugpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

docs

Docs Search

Search the shipped documentation. Returns ranked page snippets (may be empty).

Details

Parameters

ParameterInTypeRequiredDescription
qquerystringnoSearch query over the product documentation.
limitqueryintegerno

Responses

StatusDescription
200Successful Response
422Validation Error

fix-engine

GET /fix-engine/runs

List Fix Runs

List fix runs (project-scoped), optionally filtered by remediation / status.

Details

Parameters

ParameterInTypeRequiredDescription
remediationIdquerystring | nullno
statusquerystring | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

POST /fix-engine/runs

Create Fix Run

Launch a Neens-orchestrated fix run for an accepted remediation.

Details

Request body (application/json) — required

FieldTypeRequiredDescription
remediationIdstringyes
driverstring | nullno
vcsInstallationIdstring | nullno
repoUrlstring | nullno
baseBranchstring | nullno
versionLabelstring | nullno
endpointUrlstring | nullno
agentConnectionIdstring | nullno
maxAttemptsinteger | nullno
passKinteger | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /fix-engine/runs/{run_id}

Get Fix Run

Fix-run detail (incl. eval/regression report + verifying judges + PR link).

Details

Parameters

ParameterInTypeRequiredDescription
run_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
run_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

GET /fix-engine/vcs-installations

List Vcs Installations

List the project’s VCS installations. NEVER returns the decrypted credential.

Details

Responses

StatusDescription
200Successful 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

FieldTypeRequiredDescription
providerstringyes
namestringyes
repoUrlstring | nullno
baseBranchstring | nullno
configobject | nullno
credentialstring | nullno

Responses

StatusDescription
201Successful Response
422Validation Error

DELETE /fix-engine/vcs-installations/{inst_id}

Delete Vcs Installation

Delete a VCS installation.

Details

Parameters

ParameterInTypeRequiredDescription
inst_idpathstringyes

Responses

StatusDescription
204Successful Response
422Validation 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

ParameterInTypeRequiredDescription
inst_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

kpi-definitions

GET /kpi-definitions

Get Kpi Definitions

This project’s EFFECTIVE KPI definitions (declared values merged over platform defaults).

Details

Responses

StatusDescription
200Successful Response

PUT /kpi-definitions

Put Kpi Definitions

Declare what this project’s KPIs mean. Admin-only (MANAGE_OUTCOMES).

Details

Request body (application/json) — required

FieldTypeRequiredDescription
definitionsobject | nullno

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
metricKeyquerystring | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

kpis

GET /kpis

List Kpis

This project’s KPIs. status = live (default: draft + active) | active | draft | archived | all.

Details

Parameters

ParameterInTypeRequiredDescription
statusquerystringno

Responses

StatusDescription
200Successful Response
422Validation Error

POST /kpis

Create Kpi

Promote a measure to a commitment.

Details

Request body (application/json) — required

FieldTypeRequiredDescription
measureKeystring | nullno
measure_keystring | nullno
labelstring | nullno
descriptionstring | nullno
directionstring | nullno
targetnumber | nullno
ownerstring | nullno
statusstring | nullno
priorityinteger | nullno
reviewCadencestring | nullno
review_cadencestring | nullno

Responses

StatusDescription
201Successful Response
422Validation Error

GET /kpis/options

Kpi Options

The measures this project may promote, each annotated with what the project actually has.

Details

Responses

StatusDescription
200Successful Response

POST /kpis/snapshot

Snapshot All Kpis

Materialize daily history for every ACTIVE KPI in the caller’s project scope.

Details

Parameters

ParameterInTypeRequiredDescription
daysqueryinteger | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /kpis/summary

Kpi Summary

Every ACTIVE KPI with its current value, in display order.

Details

Parameters

ParameterInTypeRequiredDescription
rangequerystringno
fromquerystring | nullno
toquerystring | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /kpis/{kpi_id}

Get Kpi

One KPI plus its current value over ?range=.

Details

Parameters

ParameterInTypeRequiredDescription
kpi_idpathstringyes
rangequerystringno
fromquerystring | nullno
toquerystring | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

PATCH /kpis/{kpi_id}

Patch Kpi

Partially update a KPI.

Details

Parameters

ParameterInTypeRequiredDescription
kpi_idpathstringyes

Request body (application/json) — required

Schema: object.

Responses

StatusDescription
200Successful Response
422Validation Error

POST /kpis/{kpi_id}/archive

Archive Kpi

Retire a commitment.

Details

Parameters

ParameterInTypeRequiredDescription
kpi_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

GET /kpis/{kpi_id}/calibration

Kpi Calibration

How well this KPI’s LLM classifier agrees with human ground truth.

Details

Parameters

ParameterInTypeRequiredDescription
kpi_idpathstringyes
daysqueryintegerno
windowqueryinteger | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /kpis/{kpi_id}/eroding-clusters

Kpi Eroding Clusters

The failure clusters eroding this KPI, worst first.

Details

Parameters

ParameterInTypeRequiredDescription
kpi_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

GET /kpis/{kpi_id}/history

Kpi History

This KPI’s materialized daily history, plus where the series BREAKS.

Details

Parameters

ParameterInTypeRequiredDescription
kpi_idpathstringyes
daysqueryintegerno

Responses

StatusDescription
200Successful Response
422Validation Error

POST /kpis/{kpi_id}/snapshot

Snapshot Kpi

Materialize daily history for ONE KPI.

Details

Parameters

ParameterInTypeRequiredDescription
kpi_idpathstringyes
daysqueryinteger | nullno

Responses

StatusDescription
200Successful Response
422Validation 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

StatusDescription
200Successful Response

POST /mcp

Mcp Endpoint

MCP Streamable HTTP endpoint. Accepts a single JSON-RPC message or a batch array.

Details

Responses

StatusDescription
200Successful Response

mcp-oauth

GET /.well-known/oauth-authorization-server

Oauth Authorization Server

RFC 8414 authorization-server metadata (fully wired).

Details

Responses

StatusDescription
200Successful Response

GET /.well-known/oauth-protected-resource

Oauth Protected Resource

RFC 9728 protected-resource metadata (fully wired).

Details

Responses

StatusDescription
200Successful 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

StatusDescription
200Successful 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

StatusDescription
200Successful 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

ParameterInTypeRequiredDescription
token_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

GET /oauth/authorize

Oauth Authorize

OAuth 2.1 authorization endpoint (the browser entry point from Claude Code).

Details

Parameters

ParameterInTypeRequiredDescription
response_typequerystringno
client_idquerystringno
redirect_uriquerystringno
code_challengequerystringno
code_challenge_methodquerystringno
statequerystringno
scopequerystringno
resourcequerystringno
login_hintquerystringno

Responses

StatusDescription
200Successful Response
422Validation Error

POST /oauth/authorize/decision

Oauth Authorize Decision

The SPA consent callback (bearer nk_sess_-authenticated).

Details

Responses

StatusDescription
200Successful Response

POST /oauth/introspect

Oauth Introspect

RFC 7662 token introspection.

Details

Responses

StatusDescription
200Successful Response

POST /oauth/register

Oauth Register

Full Dynamic Client Registration (RFC 7591) + RFC 7592 registration credential.

Details

Responses

StatusDescription
200Successful Response

GET /oauth/register/{client_id}

Oauth Register Get

RFC 7592 client read — return the current registration (registration-token authed).

Details

Parameters

ParameterInTypeRequiredDescription
client_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

PUT /oauth/register/{client_id}

Oauth Register Put

RFC 7592 client update — apply whitelisted metadata (registration-token authed).

Details

Parameters

ParameterInTypeRequiredDescription
client_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

DELETE /oauth/register/{client_id}

Oauth Register Delete

RFC 7592 client delete — soft-disable the client (registration-token authed). 204.

Details

Parameters

ParameterInTypeRequiredDescription
client_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

POST /oauth/revoke

Oauth Revoke

RFC 7009 token revocation — user-scoped.

Details

Responses

StatusDescription
200Successful Response

POST /oauth/token

Oauth Token

OAuth 2.1 token endpoint (grant_type=authorization_code).

Details

Responses

StatusDescription
200Successful 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

ParameterInTypeRequiredDescription
includeHistoryquerybooleanno
providerquerystring | nullno
qquerystring | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

POST /model-prices

Create Model Price

Create (or idempotently replace) a TENANT price override.

Details

Request body (application/json) — required

FieldTypeRequiredDescription
modelIdstringyes
providerstring | nullno
displayNamestring | nullno
familyPrefixstring | nullno
inputPerMillionnumber | nullno
cachedInputPerMillionnumber | nullno
outputPerMillionnumber | nullno
effectiveFromstring | nullno
effectiveTostring | nullno
notesstring | nullno

Responses

StatusDescription
201Successful Response
422Validation Error

GET /model-prices/observed

Observed Models

The models this project ACTUALLY ran over the window, joined against the resolved table.

Details

Parameters

ParameterInTypeRequiredDescription
rangequerystringno
fromquerystring | nullno
toquerystring | nullno
projectIdquerystring | nullno

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
price_idpathstringyes

Request body (application/json) — required

FieldTypeRequiredDescription
providerstring | nullno
displayNamestring | nullno
inputPerMillionnumber | nullno
cachedInputPerMillionnumber | nullno
outputPerMillionnumber | nullno
effectiveFromstring | nullno
effectiveTostring | nullno
notesstring | nullno

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
price_idpathstringyes

Responses

StatusDescription
204Successful Response
422Validation 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

ParameterInTypeRequiredDescription
statusquerystring | nullno
limitqueryintegerno

Responses

StatusDescription
200Successful Response
422Validation 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

FieldTypeRequiredDescription
datasetIdstring | nullno
datasetVersionIdstring | nullno
scenarioSuiteIdstring | nullno
armsModelSweepArmBody[]no
passKinteger | nullno
judgeDeploymentIdsstring[] | nullno
budgetUsdnumber | nullno
namestringyes
versionLabelstringyes
gateobject | nullno
baselineobject | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

POST /model-sweeps/preview

Preview Model Sweep

Pre-flight cost estimate — writes nothing, spends nothing.

Details

Request body (application/json) — required

FieldTypeRequiredDescription
datasetIdstring | nullno
datasetVersionIdstring | nullno
scenarioSuiteIdstring | nullno
armsModelSweepArmBody[]no
passKinteger | nullno
judgeDeploymentIdsstring[] | nullno
budgetUsdnumber | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /model-sweeps/{sweep_id}

Get Model Sweep

Sweep detail: header + arms + per-arm child runs, reconciled live.

Details

Parameters

ParameterInTypeRequiredDescription
sweep_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
sweep_idpathstringyes
arm_idpathstringyes
baselineArmquerystring | nullno
limitqueryintegerno

Responses

StatusDescription
200Successful Response
422Validation Error

POST /model-sweeps/{sweep_id}/cancel

Cancel Model Sweep

Cancel a sweep + every non-terminal child pre-prod run it launched.

Details

Parameters

ParameterInTypeRequiredDescription
sweep_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
sweep_idpathstringyes
barquerynumber | nullnopass-rate bar in 0–1; overrides the sweep’s gate
baselineArmquerystring | nullnoarm id to compare against (default: position 0)

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
sweep_idpathstringyes
barquerynumber | nullnopass-rate bar in 0–1; overrides the sweep’s gate
baselineArmquerystring | nullnoarm id to treat as the incumbent (default: pos 0)

Responses

StatusDescription
200Successful Response
422Validation Error

other

GET /app-config

App Config

Front-end bootstrap: docs URL + release version. Public, non-tenant, cache-friendly.

Details

Responses

StatusDescription
200Successful Response

GET /health

Health

Liveness: the process is up. Always 200, cheap, no I/O.

Details

Responses

StatusDescription
200Successful Response

GET /ready

Ready

Readiness: probe the backends this role depends on. 200 if all ok, else 503.

Details

Responses

StatusDescription
200Successful Response

outcome-inlets

GET /outcome-inlets

List Connectors

Details

Responses

StatusDescription
200Successful Response

POST /outcome-inlets

Create Connector

Details

Request body (application/json) — required

FieldTypeRequiredDescription
providerstringyes
namestringyes
baseUrlstringyes
credentialstring | nullno
optionsobject | nullno
enabledboolean | nullno
pollIntervalMinutesinteger | nullno
backfillDaysinteger | nullno

Responses

StatusDescription
201Successful Response
422Validation Error

PATCH /outcome-inlets/{inlet_id}

Update Connector

Details

Parameters

ParameterInTypeRequiredDescription
inlet_idpathstringyes

Request body (application/json) — required

FieldTypeRequiredDescription
namestring | nullno
baseUrlstring | nullno
credentialstring | nullno
optionsobject | nullno
enabledboolean | nullno
pollIntervalMinutesinteger | nullno
backfillDaysinteger | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

DELETE /outcome-inlets/{inlet_id}

Delete Connector

Details

Parameters

ParameterInTypeRequiredDescription
inlet_idpathstringyes

Responses

StatusDescription
204Successful Response
422Validation 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

ParameterInTypeRequiredDescription
inlet_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
inlet_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

outcomes

GET /outcomes

List Outcomes

Details

Parameters

ParameterInTypeRequiredDescription
kindquerystring | nullno
sourcequerystring | nullno
matchStatequerystring | nullno
correlationKeyquerystring | nullno
conversationIdquerystring | nullno
sessionIdquerystring | nullno
sincequerystring | nullno
untilquerystring | nullno
includeSupersededquerybooleanno
limitqueryintegerno
offsetqueryintegerno

Responses

StatusDescription
200Successful Response
422Validation Error

POST /outcomes

Push Outcomes

Record one or many business outcomes.

Details

Request body (application/json) — required

FieldTypeRequiredDescription
correlationKeystring | nullno
correlationTypestring | nullno
kindstring | nullno
valueobjectno
unitstring | nullno
valueTypestring | nullno
occurredAtobjectno
metadataobjectno
idempotencyKeystring | nullno
externalIdstring | nullno
sourcestring | nullno
outcomesOutcomeIn[] | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /outcomes/coverage

Outcome Coverage

Match coverage — the honest denominator.

Details

Parameters

ParameterInTypeRequiredDescription
sincequerystring | nullno
untilquerystring | nullno
kindquerystring | nullno
sourcequerystring | nullno

Responses

StatusDescription
200Successful Response
422Validation 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

StatusDescription
200Successful Response

POST /outcomes/reconcile

Reconcile Now

Re-attempt correlation for this project’s parked outcomes, right now.

Details

Responses

StatusDescription
200Successful Response

GET /outcomes/settings

Get Settings Route

Details

Responses

StatusDescription
200Successful Response

PUT /outcomes/settings

Put Settings Route

Details

Request body (application/json) — required

FieldTypeRequiredDescription
externalKeyPathsstring[] | nullno
matchWindowHoursinteger | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /outcomes/{outcome_id}

Get Outcome

Details

Parameters

ParameterInTypeRequiredDescription
outcome_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

GET /outcomes/{outcome_id}/revisions

Get Outcome Revisions

Every revision of the outcome’s series, oldest → newest.

Details

Parameters

ParameterInTypeRequiredDescription
outcome_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
failureModeIdquerystring | nullno
clusterIdquerystring | nullno
maxTasksqueryinteger | nullno
valFractionquerynumber | nullno
minibatchSizequeryinteger | nullno
maxIterationsqueryinteger | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /prompt-optimization/runs

List Optimization Runs

List optimization runs (project-scoped), newest first.

Details

Parameters

ParameterInTypeRequiredDescription
statusquerystring | nullno
failureModeIdquerystring | nullno
limitqueryintegerno

Responses

StatusDescription
200Successful Response
422Validation Error

POST /prompt-optimization/runs

Create Optimization Run

Launch a GEPA-style offline prompt-optimization run.

Details

Request body (application/json) — required

FieldTypeRequiredDescription
failureModeIdstring | nullno
clusterIdstring | nullno
namestring | nullno
sessionIdsstring[] | nullno
judgeIdsstring[] | nullno
connectionIdstring | nullno
objectivestring | nullno
maxRolloutsinteger | nullno
maxIterationsinteger | nullno
minibatchSizeinteger | nullno
maxTasksinteger | nullno
valFractionnumber | nullno
minImprovementnumber | nullno
autoEmitboolean | nullno

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
run_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
run_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
run_idpathstringyes
candidate_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
run_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

FieldTypeRequiredDescription
textstringyes
modestring | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /redaction/settings

Get Redaction Settings

The per-project policy row + the resolved effective modes (for the governance UI).

Details

Responses

StatusDescription
200Successful 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

FieldTypeRequiredDescription
modestringyes
enforcedbooleanno
egressModestringno
allowliststring[]no
customPatternsCustomPatternBody[]no

Responses

StatusDescription
200Successful Response
422Validation Error

run-targets

GET /run-targets

List Run Targets

Details

Responses

StatusDescription
200Successful Response

POST /run-targets

Create Run Target

Details

Request body (application/json) — required

FieldTypeRequiredDescription
namestringyes
kindstringyes
grainstringyes
filterobject | nullno
samplingobject | nullno
datasetIdstring | nullno
datasetVersionIdstring | nullno
followLatestbooleanno
defaultTriggerstring | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /run-targets/{run_target_id}

Get Run Target

Details

Parameters

ParameterInTypeRequiredDescription
run_target_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

PATCH /run-targets/{run_target_id}

Patch Run Target

Details

Parameters

ParameterInTypeRequiredDescription
run_target_idpathstringyes

Request body (application/json) — required

FieldTypeRequiredDescription
namestring | nullno
filterobject | nullno
samplingobject | nullno
datasetIdstring | nullno
datasetVersionIdstring | nullno
followLatestboolean | nullno
defaultTriggerstring | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

DELETE /run-targets/{run_target_id}

Delete Run Target

Details

Parameters

ParameterInTypeRequiredDescription
run_target_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

scenario-suites

GET /scenario-suites

List Suites

Details

Responses

StatusDescription
200Successful 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

StatusDescription
200Successful Response
422Validation Error

GET /scenario-suites/{suite_id}

Get Suite

Details

Parameters

ParameterInTypeRequiredDescription
suite_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
suite_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
suite_idpathstringyes

Request body (application/json)

Schema: object.

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
suite_idpathstringyes

Request body (application/json)

Schema: object.

Responses

StatusDescription
200Successful Response
422Validation Error

GET /scenario-suites/{suite_id}/scenarios

List Scenarios

Details

Parameters

ParameterInTypeRequiredDescription
suite_idpathstringyes
limitqueryintegerno
offsetqueryintegerno

Responses

StatusDescription
200Successful Response
422Validation Error

scorer-comparisons

GET /scorer-comparisons

List Scorer Comparisons

List comparisons (project-scoped), newest first — headers only.

Details

Responses

StatusDescription
200Successful Response

POST /scorer-comparisons

Create Scorer Comparison Route

Create a scorer comparison and start scoring.

Details

Request body (application/json) — required

FieldTypeRequiredDescription
namestringyes
judgeIdstringyes
scorerConnectionIdsstring[]no
windowstring | nullno
windowStartstring | nullno
windowEndstring | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /scorer-comparisons/{comparison_id}

Get Scorer Comparison

Comparison detail: meta + status/progress + the per-scorer side-by-side aggregate.

Details

Parameters

ParameterInTypeRequiredDescription
comparison_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
comparison_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
comparison_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

List Share Links

Details

Responses

StatusDescription
200Successful Response

POST /share-links

Create Share Link

Details

Request body (application/json) — required

FieldTypeRequiredDescription
resourceTypestringyes
resourceIdstringyes
ttlHoursinteger | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

GET /share-links/settings

Get Share Settings

Per-project toggle state + the global flag / TTL bounds (for the UI).

Details

Responses

StatusDescription
200Successful 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

FieldTypeRequiredDescription
enabledbooleanyes

Responses

StatusDescription
200Successful Response
422Validation Error

Revoke Share Link

Details

Parameters

ParameterInTypeRequiredDescription
link_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

GET /share/{token}

Public Share View

Resolve a share token → pin the owning company’s schema → load + REDACT the incident.

Details

Parameters

ParameterInTypeRequiredDescription
tokenpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

spend-budgets

GET /spend-budgets

List Budgets Route

Every known feature’s budget for this project (unconfigured features read as unlimited).

Details

Responses

StatusDescription
200Successful Response

GET /spend-budgets/{feature}

Get Budget Route

One feature’s budget.

Details

Parameters

ParameterInTypeRequiredDescription
featurepathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

PUT /spend-budgets/{feature}

Put Budget Route

Set a feature’s spend limit + period. limitUsd: null clears the limit.

Details

Parameters

ParameterInTypeRequiredDescription
featurepathstringyes

Request body (application/json) — required

FieldTypeRequiredDescription
limitUsdnumber | nullno
periodstring | nullno
enabledboolean | nullno

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
featurepathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

trace-inlets

GET /trace-inlets

List Connectors

Details

Responses

StatusDescription
200Successful Response

POST /trace-inlets

Create Connector

Details

Request body (application/json) — required

FieldTypeRequiredDescription
providerstringyes
namestringyes
baseUrlstringyes
credentialstring | nullno
optionsobject | nullno
enabledboolean | nullno
pollIntervalMinutesinteger | nullno
backfillDaysinteger | nullno

Responses

StatusDescription
201Successful Response
422Validation Error

PATCH /trace-inlets/{inlet_id}

Update Connector

Details

Parameters

ParameterInTypeRequiredDescription
inlet_idpathstringyes

Request body (application/json) — required

FieldTypeRequiredDescription
namestring | nullno
baseUrlstring | nullno
credentialstring | nullno
optionsobject | nullno
enabledboolean | nullno
pollIntervalMinutesinteger | nullno
backfillDaysinteger | nullno

Responses

StatusDescription
200Successful Response
422Validation Error

DELETE /trace-inlets/{inlet_id}

Delete Connector

Details

Parameters

ParameterInTypeRequiredDescription
inlet_idpathstringyes

Responses

StatusDescription
204Successful Response
422Validation 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

ParameterInTypeRequiredDescription
inlet_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation 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

ParameterInTypeRequiredDescription
inlet_idpathstringyes

Responses

StatusDescription
200Successful Response
422Validation Error

usage

GET /usage

Get Usage

Return the current tenant’s usage aggregates, grouped by group_by.

Details

Parameters

ParameterInTypeRequiredDescription
sincequerystring | nullnoInclusive start day (YYYY-MM-DD); default 30d ago
untilquerystring | nullnoInclusive end day (YYYY-MM-DD); default today
project_idquerystring | nullnoRestrict to one project id
group_byquerystringnofeature | day | project | connection

Responses

StatusDescription
200Successful Response
422Validation Error

GET /usage/kpis

Get Usage Kpis

Headline KPI tiles for the tenant Usage page.

Details

Parameters

ParameterInTypeRequiredDescription
sincequerystring | nullnoInclusive start day (YYYY-MM-DD); default 30d ago
untilquerystring | nullnoInclusive end day (YYYY-MM-DD); default today
project_idquerystring | nullnoRestrict to one project id

Responses

StatusDescription
200Successful Response
422Validation Error

GET /usage/summary

Get Usage Summary

Totals per feature for the window + a daily timeseries for the headline features.

Details

Parameters

ParameterInTypeRequiredDescription
sincequerystring | nullnoInclusive start day (YYYY-MM-DD); default 30d ago
untilquerystring | nullnoInclusive end day (YYYY-MM-DD); default today
project_idquerystring | nullnoRestrict to one project id

Responses

StatusDescription
200Successful Response
422Validation 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

StatusDescription
200Successful Response