Skip to main content

API overview

The v1 API is assembly-first. You define a panel of rival models once as an "assembly", save it, and then run any number of debates against it. The body for starting a debate is deliberately minimal, prompt + assemblyId. Everything else lives in the assembly, which models, what format, how many rounds, and when to converge.

All endpoints

MethodPathPurpose
POST/v1/assembliesCreate a new assembly (the panel definition)
GET/v1/assembliesList your assemblies
GET/v1/assemblies/:idGet one assembly
POST/v1/debatesStart a debate against an assembly
GET/v1/debatesList your debates (paginated)
GET/v1/debates/:idGet the full session, every round, every turn, the verdict
GET/v1/debates/:id/statusLightweight status for polling

Base URL

https://rigordesk.com/api

The web UI at rigordesk.com uses the same /v1/* endpoints internally. The assemblies you create via the web are the same ones you'd create via API and vice-versa.

Authentication

All /v1/* endpoints require a Bearer API key in the Authorization header:

Authorization: Bearer dbt_xxxxxxxxxxxxxxxx

You generate API keys in Settings → API Keys in the web app. The app shows each key only once on creation, so store it securely. You can revoke keys from the same screen.

Required headers

HeaderWhenNotes
Authorization: Bearer dbt_…All requestsRequired.
Content-Type: application/jsonPOST/PUTRequired for bodies.
Idempotency-KeyPOST /v1/debatesRequired. Any unique string. Same key = same session returned, no new debate started. See idempotency.

Response envelopes

  • Success. You get the resource directly, or { items: [...], total, limit, offset } for list endpoints.
  • Error. { "error": "human-readable message", "reason"?: "..." } with a status code.

The two-step flow

The whole API reduces to two calls:

{
 "name": "Code Review Panel",
 "models": [
 { "id": "openai/gpt-5.5" },
 { "id": "anthropic/claude-opus-4.8" },
 { "id": "google/gemini-3.1-pro-preview" }
 ],
 "maxRounds": 3,
 "agreementLimit": 75
}
{
 "prompt": "Refactor this React component for readability",
 "assemblyId": "9fa4f385-1214-461a-8463-17242854e0d1"
}

That's it. Re-running the same prompt against the same assembly reuses the same panel. You don't repeat the model list, round count, or threshold.