LITMUS_URL, LITMUS_TOKEN and LITMUS_ORG (your org tag) set in your shell (see Authentication). A $NAME in a path is an id you read from the listing route on this page; a <field> in a body is a value you supply, and every field the handler reads is shown, so send only the ones you need. Fields are what the handler’s source reads and writes, listed mechanically; they are not a schema.
GET /v0/orgs/{orgtag}/datasets
The datasets a run can be started over — one per environment, by the name LangFuse holds it under. The Runner’s picker reads this, so the picker and LangFuse’s dataset list are one set by name.
Path parameters:
orgtag
Query parameters the handler or its helper reads: field, value
Response: JSON: a stored record or a helper’s result, answered as it is, so its keys are not written in the source and none are listed.
POST /v0/orgs/{orgtag}/datasets/publish
Send every environment of this org to LangFuse as a dataset. push: it sends the customer’s task set to a system outside this workspace.
Path parameters:
orgtag
Response fields written in the handler: org
This call changes state in the org.
POST /v0/orgs/{orgtag}/deliveries/slack
The bug finding as one Slack message: {group, channel?, against?, main?, thread_ts?, dry_run?, confirm?, weekly?} → the blocks, and on a real post {channel, ts, permalink}.
Path parameters:
orgtag
Body fields the handler or its helper reads: against, channel, confirm, dry_run, group, main, thread_ts, weekly
Response fields written in the handler: channel, log, permalink, posted, ts
This call changes state in the org.
POST /v0/orgs/{orgtag}/runs/group/{gid}/pr-comment
Post a landed run’s result on its branch’s open pull request: {against?, console?, dry_run?} → {number, pr_url, comment_url, action, branch, verdict}.
Path parameters:
orgtag, gid
Body fields the handler or its helper reads: against, console, dry_run
Response fields written in the handler: against, error, group, org, reason, verdict
This call changes state in the org.
POST /v0/orgs/{orgtag}/deliveries/datadog
POST /v0/orgs/{orgtag}/deliveries/datadog {group, against?, main?, bug?, kinds?, dry_run?, confirm?, console?, format?} — one bug finding as Datadog payloads: an event, a notebook and the Experiments record, each citing the trace ids the compare carries and linking the finding’s page (?via=datadog). dry_run is the default and answers the payloads; format: zip answers the import file (the payloads and the curl lines a customer runs with their own key). A real push needs the org’s own datadog_write credential, by name and never the read key, and a member’s confirm; with no write credential it answers why, in one sentence, and where the import file is.
Path parameters:
orgtag
Body fields the handler or its helper reads: against, bug, confirm, console, dry_run, format, group, kinds, main
Response fields written in the handler: dry_run, error, log, reason, sent
This call changes state in the org.
POST /v0/orgs/{orgtag}/runs/{rid}/reexport
Re-export one stored run from the directory already on disk. 200 with the refreshed run row.
Path parameters:
orgtag, rid
Response fields written in the handler: bundle_version, key_verdicts_gained, reexported_at
This call changes state in the org.
GET /v0/orgs/{orgtag}/export
Every world of one org, one tier, one target.
Path parameters:
orgtag
Query parameters the handler or its helper reads: environment, format, group, tier
Response: A file, not JSON: application/x-ndjson, application/zip.
POST /v0/exports/datadog
POST /v0/exports/datadog {org, set, environment?} -> a zip of one set (ci-10 / smoke-20 / full) in Datadog’s dataset shape. A per-org token’s org fills org; read is enough, as for every other export.
Body fields the handler or its helper reads:
environment, org, set
Response: A file, not JSON: application/zip.
This call changes state in the org.
POST /v0/exports/datadog-experiment
POST /v0/exports/datadog-experiment {org, group} -> a zip of one landed run group in Datadog Experiments’ shape. A per-org token’s org fills org; read is enough, as for every other export.
Body fields the handler or its helper reads:
group, org
Response: A file, not JSON: application/zip.
This call changes state in the org.
POST /v0/exports/datadog-judges
POST /v0/exports/datadog-judges {org, environment?} -> a zip of judge definitions mirroring the dataset’s verifiers, in Datadog’s evaluation shape. A per-org token’s org fills org; read is enough, as for every other export.
Body fields the handler or its helper reads:
environment, org
Response: A file, not JSON: application/zip.
This call changes state in the org.
GET /v0/orgs/{orgtag}/archive
The whole org as one tar.gz, streamed.
Path parameters:
orgtag
Response fields written in the handler: error, retry_after, status
POST /v0/orgs/{orgtag}/mirror
POST /v0/orgs/{org}/mirror {to?, kinds?, since?, replace?, dry_run?} — start a round sending this org’s records to the workspace this one mirrors into. Answers 202 with the job.
Path parameters:
orgtag
Body fields the handler or its helper reads: dry_run, kinds, replace, since, to
Response fields written in the handler: error, job, status
This call changes state in the org.
GET /v0/orgs/{orgtag}/mirror
GET /v0/orgs/{org}/mirror[?since=&kinds=a,b] — what a round from this workspace would send, in order, with each member’s digest and size, and what it holds back with why. litmus-ai mirror reads this on the source. Ids, digests and counts; no record body.
Path parameters:
orgtag
Query parameters the handler or its helper reads: kinds, since
Response fields written in the handler: members, order, tier
GET /v0/orgs/{orgtag}/mirror/{kind}
GET /v0/orgs/{org}/mirror/{kind}?id= — one listed member’s bytes, as stored: what litmus-ai mirror streams from the source into the receiver’s door. Another org’s member and an unknown one are one 404.
Path parameters:
orgtag, kind
Query parameters the handler or its helper reads: id
Response: A file, not JSON: application/octet-stream.
GET /v0/orgs/{orgtag}/mirror-in
GET /v0/orgs/{org}/mirror-in[?wait=1] — what this workspace holds of the org, as {"<kind>/<id>": sha256}, for a sender to diff against, and what it refused at which digest, so a refusal is named again and not re-sent. Answered at once from the digests a background fill stored, with pending: how many members it has no current digest for. ?wait=1 waits up to mirror.WAIT_S for the fill first. The start of a round: refused unless the caller’s identity is on LITMUS_MIRROR_FROM.
Path parameters:
orgtag
Query parameters the handler or its helper reads: wait
Response fields written in the handler: filled_at, filling, held, org, pending, refused, tier
POST /v0/orgs/{orgtag}/mirror-in/{kind}
POST /v0/orgs/{org}/mirror-in/{kind}?id=&sha256=[&bundle=][&replace=1] — admit ONE member of a mirror round. The body is its bytes, read as it uploads and never held.
Path parameters:
orgtag, kind
Query parameters the handler or its helper reads: bundle, id, replace, sha256
Response fields written in the handler: error, result
This call changes state in the org.