Skip to main content

API reference

Every endpoint, every field, every response shape. Use the sidebar to jump to a specific section, or read top to bottom on first pass.

Assemblies

POST /v1/assemblies, Create an assembly

Creates a new assembly owned by the calling API key. You use the returned id in POST /v1/debates to identify the panel.

Request body.

ModelConfig (one item in the models array):

Response 201 Created:

{
 "id": "9fa4f385-1214-461a-8463-17242854e0d1",
 "name": "My first panel",
 "description": "3 frontier models stress-testing prompts.",
 "isPublic": false,
 "userId": "233bab9e-188a-4da8-910a-4ca5c3fdd27d",
 "models": [
 { "id": "openai/gpt-5.5", "name": "GPT-5.5", "role": "INITIATOR" },
 { "id": "anthropic/claude-opus-4.8", "name": "Claude Opus 4.8", "role": "REVIEWER" },
 { "id": "x-ai/grok-4.3", "name": "Grok 4.3", "role": "SYNTHESIZER" }
 ],
 "maxRounds": 3,
 "agreementLimit": 75,
 "mode": "REFINEMENT",
 "format": "REFINEMENT",
 "formatMeta": null,
 "createdAt": "2026-06-28T12:34:56.000Z",
 "updatedAt": "2026-06-28T12:34:56.000Z"
}

Errors. 400 missing fields, 401 bad key, 409 duplicate name, 500 server.

GET /v1/assemblies, List assemblies

Returns the caller's non-hidden assemblies, newest first.

Query parameters.

Response 200 OK:

{
 "items": [
 /* Assembly objects, same shape as the POST response */
 ],
 "total": 7,
 "limit": 50,
 "offset": 0
}

GET /v1/assemblies/:id, Get one assembly

Returns the assembly if it belongs to the caller or is public. It returns 404 otherwise to avoid leaking the existence of private assemblies.

Response 200 OK. An Assembly object, same as POST response.

Errors. 404 not found or not visible.


Debates

POST /v1/debates, Start a debate

Queues a debate. Returns immediately with 202 Accepted. The assembly supplies the full panel config, models, maxRounds, agreementLimit, format, and formatMeta. You only pass the prompt.

Required headers:

HeaderExample
AuthorizationBearer dbt_…
Content-Typeapplication/json
Idempotency-Keyf47ac10b-58cc-4372-a567-0e02b2c3d479

See idempotency for the dedup behavior.

Request body.

Response 202 Accepted:

{
 "id": "efb4097e-e58c-49b7-885d-860753a0d7ed",
 "status": "queued",
 "title": "Will low-code + AI agents make traditional full-stack developers obsolete by 2028?"
}

For prompts of 150 characters or fewer, title is the original prompt. Longer prompts receive a concise task-focused title. The complete text remains available as userPrompt in the full session and webhook payload.

If you have used the same Idempotency-Key before, the server returns the original session without starting a new debate.

Errors. 400 missing fields/Idempotency-Key, 401 bad key, 402 budget exhausted, 404 assembly not found, 500 server.

GET /v1/debates, List debates

Returns a summary projection of the caller's debates. It omits turns and includes just enough to list and filter.

Query parameters.

Response 200 OK:

{
 "items": [
 {
 "id": "efb4097e-e58c-49b7-885d-860753a0d7ed",
 "title": "Will low-code + AI agents make traditional full-stack developers obsolete by 2028?",
 "userPrompt": "Will low-code + AI agents make traditional full-stack developers obsolete by 2028?",
 "status": "COMPLETED",
 "format": "REFINEMENT",
 "mode": "REFINEMENT",
 "maxRounds": 3,
 "agreementLimit": 75,
 "totalCost": 0.42,
 "totalTokens": 12100,
 "startedAt": "2026-06-28T12:35:01.000Z",
 "completedAt": "2026-06-28T12:36:14.000Z",
 "assemblyId": "9fa4f385-1214-461a-8463-17242854e0d1",
 "shareSlug": "low-code-ai-killed-full-stack-dev",
 "isPublic": true,
 "createdAt": "2026-06-28T12:35:00.000Z"
 }
 ],
 "total": 1,
 "limit": 20,
 "offset": 0
}

GET /v1/debates/:id, Full session

Returns the entire session: prompt, format, status, every round, every model's turn, the chairman's verdict, and per-turn cost/latency/tokens.

This response can be large because each turn is a full LLM response plus the verdict. Use /status for polling and only call this when you need the transcript.

Response 200 OK, truncated:

{
 "id": "efb4097e-e58c-49b7-885d-860753a0d7ed",
 "status": "COMPLETED",
 "title": "Will low-code + AI agents make traditional full-stack developers obsolete by 2028?",
 "userPrompt": "Will low-code + AI agents make traditional full-stack developers obsolete by 2028?",
 "mode": "REFINEMENT",
 "format": "REFINEMENT",
 "maxRounds": 3,
 "agreementLimit": 75,
 "totalCost": 0.42,
 "totalTokens": 12100,
 "chairmanModelId": "deepseek/deepseek-v4-pro",
 "finalAnswer": "Low-code platforms + AI agents have not killed traditional full-stack development…",
 "faultLines": {
 "sharedAssumptions": [
 "Low-code speeds up boilerplate UI generation",
 "Traditional developers are still needed for complex business logic"
 ],
 "faultLines": [
 {
 "description": "Whether low-code platforms will replace the need for custom database design",
 "positions": [
 {
 "modelId": "x-ai/grok-4.3",
 "position": "Yes, abstractions will be good enough for 90% of apps."
 },
 {
 "modelId": "anthropic/claude-opus-4.8",
 "position": "No, data migration and scaling issues limit them to prototypes."
 }
 ]
 }
 ],
 "consensusDegree": "MEDIUM"
 },
 "startedAt": "2026-06-28T12:35:01.000Z",
 "completedAt": "2026-06-28T12:36:14.000Z",
 "isPublic": true,
 "shareSlug": "low-code-ai-killed-full-stack-dev",
 "formatMeta": {
 "_models": [
 /* full ModelConfig array */
 ]
 },
 "rounds": [
 {
 "id": "round-uuid",
 "roundNumber": 1,
 "consensusScore": 70,
 "converged": false,
 "rotationOffset": 0,
 "panelConsensus": {
 "panelScore": 70,
 "perModel": [
 { "modelId": "x-ai/grok-4.3", "score": 70 },
 { "modelId": "anthropic/claude-opus-4.8", "score": 68 },
 { "modelId": "google/gemini-3.1-pro-preview", "score": 72 }
 ],
 "pairwise": [
 { "a": "x-ai/grok-4.3", "b": "anthropic/claude-opus-4.8", "score": 68 },
 { "a": "x-ai/grok-4.3", "b": "google/gemini-3.1-pro-preview", "score": 72 },
 { "a": "anthropic/claude-opus-4.8", "b": "google/gemini-3.1-pro-preview", "score": 70 }
 ],
 "rationale": "Models broadly agree on the trajectory but differ on timing.",
 "isConverged": false
 },
 "turns": [
 {
 "id": "turn-uuid",
 "modelId": "x-ai/grok-4.3",
 "provider": "direct",
 "orderInRound": 0,
 "agreementScore": 70,
 "panelAgreement": 70,
 "disagreements": ["Premature to declare dev obsolete by 2028"],
 "improvements": ["Adds the data on co-evolution vs replacement"],
 "refinedAnswer": "Low-code platforms + AI agents have not 'killed' traditional full-stack development…",
 "rawResponse": "{ ... full LLM JSON ... }",
 "latencyMs": 13801,
 "cost": 0.0042,
 "inputTokens": 1820,
 "outputTokens": 940,
 "reasoningTokens": 320,
 "cachedTokens": 0,
 "webSearch": false,
 "enableThinking": false,
 "createdAt": "2026-06-28T12:35:14.000Z"
 }
 ]
 }
 ]
}

Errors. 404 not found.

GET /v1/debates/:id/status, Lightweight polling

Returns just enough to know if the debate is done. It includes no transcript, no prompt text, and no per-turn data. Use this in your poll loop, then call GET /v1/debates/:id once for the full result.

Response 200 OK:

{
 "id": "efb4097e-e58c-49b7-885d-860753a0d7ed",
 "status": "RUNNING",
 "title": "Will low-code + AI agents make traditional full-stack developers obsolete by 2028?",
 "assemblyId": "9fa4f385-1214-461a-8463-17242854e0d1",
 "maxRounds": 3,
 "agreementLimit": 75,
 "totalCost": 0.18,
 "totalTokens": 5400,
 "startedAt": "2026-06-28T12:35:01.000Z",
 "completedAt": null,
 "createdAt": "2026-06-28T12:35:00.000Z",
 "roundsStarted": 1,
 "roundsConverged": 0,
 "progress": {
 "phase": "round_1",
 "roundNumber": 1,
 "currentModel": null,
 "activeModels": [
 {
 "id": "google/gemini-3.5-flash",
 "name": "Gemini 3.5 Flash",
 "roundNumber": 1,
 "orderInRound": 0
 },
 {
 "id": "deepseek/deepseek-v4-pro",
 "name": "DeepSeek V4 Pro",
 "roundNumber": 1,
 "orderInRound": 1
 }
 ],
 "lastEventAt": "2026-06-28T12:35:20.000Z"
 },
 "isComplete": false
}

The isComplete field is true when status is COMPLETED or FAILED. progress.activeModels lists every model currently producing a response in stable panel order, so you can see parallel execution without pulling the transcript.

Errors. 404 not found.


What's next

  • Idempotency. Exactly-once semantics for POST /v1/debates
  • Webhooks. Get a POST instead of polling
  • Errors. Every status code and what to do with it