Quickstart

From sign-in to your first verdict in five minutes, with the request in curl, JavaScript and Python and the response explained line by line.

Last updated 12 September 2026

Quickstart

In five minutes you will send Attest a claim and the sentence it came from and read back a verdict with the span it rests on.

1. Get credits and a credential

Sign in at https://developer.quorumtech.ch. A personal workspace claims 250 starting credits by linking a card on the Billing page. Nothing is charged for linking. A company workspace buys a credit pack or takes a plan on the same page.

Then choose one of two credentials:

  • The playground on these pages. Every endpoint page has a "Try it" panel that sends a real request as you, charged to your workspace. No key needed.
  • An API key, for your own code. A workspace owner or admin creates one on the API keys page. It is shown once, so copy it somewhere safe. Put it in an environment variable rather than in your source: export QUORUM_API_KEY=eyJ....

2. Send your first claim

curl -X POST "https://api.quorumtech.ch/attest/v1/attest" \
  -H "Authorization: Bearer $QUORUM_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "claim": "Revenue increased in FY2025.",
    "evidence": [
      {
        "id": "ev_1",
        "content": "Group revenue for FY2025 was CHF 94.0m, up from CHF 82.0m in the prior year.",
        "source": { "title": "FY2025 Annual Report" }
      }
    ]
  }'
const response = await fetch("https://api.quorumtech.ch/attest/v1/attest", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.QUORUM_API_KEY}`,
    "content-type": "application/json",
  },
  body: JSON.stringify({
    claim: "Revenue increased in FY2025.",
    evidence: [
      {
        id: "ev_1",
        content: "Group revenue for FY2025 was CHF 94.0m, up from CHF 82.0m in the prior year.",
        source: { title: "FY2025 Annual Report" },
      },
    ],
  }),
});
const result = await response.json();
console.log(result.verdict, result.supportingSpans);
import os, requests

response = requests.post(
    "https://api.quorumtech.ch/attest/v1/attest",
    headers={"Authorization": f"Bearer {os.environ['QUORUM_API_KEY']}"},
    json={
        "claim": "Revenue increased in FY2025.",
        "evidence": [
            {
                "id": "ev_1",
                "content": "Group revenue for FY2025 was CHF 94.0m, up from CHF 82.0m in the prior year.",
                "source": {"title": "FY2025 Annual Report"},
            }
        ],
    },
)
result = response.json()
print(result["verdict"], result["supportingSpans"])

3. Read the response

{
  "id": "att_e707128f46434db9b7851398",
  "mode": "evidence",
  "verdict": "SUPPORTED",
  "claim": "Revenue increased in FY2025.",
  "supportingSpans": ["ev_1:0"],
  "contradictingSpans": [],
  "explanation": {
    "axes": {
      "entailment": {
        "covers_every_assertion": {
          "reasoning": "The evidence states revenue rose from CHF 82.0m to CHF 94.0m in FY2025.",
          "holds": "true",
          "spans": ["ev_1:0"]
        }
      }
    },
    "citedSpans": ["ev_1:0"],
    "availableSpans": 1
  },
  "audit": { "referentialIntegrity": 1, "explanationTrust": 1, "findings": [], "explanationDisagrees": false },
  "provenance": {
    "measurementHash": "3f9c...",
    "policyHash": "a41b...",
    "rulesApplied": ["adjacent-not-partial"],
    "promptVersion": "attest-routed-v1+adjacent-not-partial",
    "scoringVersion": "attest-scoring-v1",
    "serviceVersion": "attest-service-v0.1",
    "model": "openai/gpt-oss-120b",
    "createdAt": "2026-09-06T14:02:11.318Z"
  },
  "degraded": []
}
  • verdict is the answer. SUPPORTED means the evidence you sent establishes the claim.
  • supportingSpans names the sentences it rests on. ev_1:0 is the first sentence of the evidence item you called ev_1. Every span id resolves to text you sent.
  • explanation says why, axis by axis, citing spans. audit checks that explanation mechanically. explanationDisagrees: true would mean the explanation read the evidence differently from the verdict, which is a signal that the case is borderline, not an error.
  • provenance lets you reproduce the answer later from the document you still hold.

The response headers say what it cost: X-Credits-Charged: 1 and X-Credits-Remaining with your workspace's balance. A claim with its evidence in the request costs one credit, which is one cent.

4. Try the other verdicts

Change the evidence to Group revenue declined to CHF 76.4m in FY2025 from CHF 82.0m. and the verdict becomes CONTRADICTED, with the sentence in contradictingSpans. Send a claim the evidence does not address and you get INSUFFICIENT_EVIDENCE. Send a compound claim of which only half is covered and you get PARTIALLY_SUPPORTED, the verdict that most often identifies the sentence to fix.

Next steps

  • Split compound sentences into one claim each: a single verdict for a whole sentence cannot say which half failed. See Verdicts.
  • Reviewing a whole document? Upload the pack once as a batch, upload the draft, and let Attest extract and check every claim. See Batches and drafts.
  • Using Claude or ChatGPT? Add https://api.quorumtech.ch/attest/mcp as a connector and approve it with your Quorum account. See the MCP page.

Still need help?

Ask Quincy in the chat bubble below, or write to support@quorumtech.ch and we will help you directly.