Docs · REST v1 sketch

Async by design.

This is a contract sketch, not a live explorer. Auth is a bearer token. Base URL will be https://api.judgmentcall.ai. There is no synchronous mode in v1: a judgment is a job.

POST

/v1/judgments

Enqueue a judgment. Returns immediately with an id, a status, and an eta. The panel is contacted asynchronously. You do not wait on the HTTP request for the distribution.

Requestapplication/json
{
  "question": "Does this outbound email read as insulting to a VP of Engineering?",
  "stimulus": { "type": "text", "body": "..." },
  "panel": "eng_leaders_us_b2b",
  "n": 24,
  "scale": "likert_5",
  "webhook_url": "https://your-agent.example/hooks/judgment"
}
Response · 202 Acceptedapplication/json
{
  "id": "jdg_2n8k0q",
  "status": "queued",
  "eta_seconds": 900
}

GET

/v1/judgments/:id

Poll a job. Status is queued, in_progress, completed, or failed. On completed, the body includes the distribution, dissent, confidence, rationales, and a call. Same payload delivered on the webhook.

queued
Accepted. Panel not yet in motion.
in_progress
Responses arriving. Partial counts are not returned in v1.
completed
n reached, or the eta expired with a documented shortfall.
failed
Could not field the panel. Credits reversed.

GET

/v1/panels

List panels you can address. First panel: senior engineering leaders, US B2B SaaS. Each record is an id, a segment description, a typical eta, and whether it is currently open.

Response · 200
{
  "panels": [
    {
      "id": "eng_leaders_us_b2b",
      "segment": "Senior engineering leaders, US B2B SaaS",
      "typical_n": [20, 30],
      "typical_eta_seconds": 900,
      "open": true
    }
  ]
}

Webhook

judgment.completed

POST to your webhook_url when the job finishes. Retry with backoff on non-2xx. Verify the signature header (scheme TBD at token issue). Event names for failure and timeout will share this envelope.

Event envelope
{
  "event": "judgment.completed",
  "id": "jdg_2n8k0q",
  "occurred_at": "2026-08-21T18:11:04Z",
  "data": { "/* same body as GET /v1/judgments/:id */" }
}

MCP

Server wrapper

The MCP server exposes the same three calls as tools: create_judgment, get_judgment, list_panels. It does not add a blocking “wait for result” tool in v1. Agents are expected to yield, then resume on the webhook or a later get_judgment. If your runtime cannot receive webhooks, poll.

Contract

No synchronous mode

Judgment takes minutes because humans take minutes. Wrapping that in a long HTTP request is how you get retries, duplicate panel charges, and agents that look stuck. v1 refuses ?sync=true. If you need a human on the hook in seconds, you want accountable sign-off with a named reviewer already online — that is a different endpoint, later.