Citation verification · Courts of Australia
True·Cite

Developers · API v2

Check citations from your own software

Send TrueCite a list of case citations; it tells you, for each one, whether that citation identifies a real judgment in its source records, and what evidence the finding rests on. Use it to catch invented or mistyped citations in AI-drafted documents before they are filed.

Your API keys

Sign in to create a key. Keys belong to your TrueCite account. You can read the documentation below without signing in.

Production keys and plans

Production keys run against the production ledger with a monthly allowance set by your plan. Prices are in Australian dollars and include GST for Australian companies. UK companies pay the sterling prices shown on truecite.uk; other overseas businesses pay the Australian-dollar price less GST (GST-free export).

No overage on any plan: when the checks run out, API requests stop (429 QUOTA_EXHAUSTED) until the next month or an upgrade. Getting a production key takes four steps: verify your business (Australian companies: ABN, checked against the Australian Business Register; UK companies: Companies House number, verified by us), accept the API agreement, add a card via Revolut, then create the key.

Quickstart

Every call to POST /api/v2/verify needs three headers: Authorization: Bearer <your key>, Content-Type: application/json, and an Idempotency-Key (8–128 letters, digits, . _ : -). Send 1–100 citations per request.

curl

export TRUECITE_KEY="tcs_…"   # your key

curl -sS https://truecite.com.au/api/v2/verify \
  -H "Authorization: Bearer $TRUECITE_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"items":[{"item_id":"c1","citation":"[2024] HCA 32"}]}'

JavaScript (Node 18+, server-side)

const res = await fetch('https://truecite.com.au/api/v2/verify', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.TRUECITE_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({ items: [{ item_id: 'c1', citation: '[2024] HCA 32' }] }),
});
if (!res.ok) throw new Error(`TrueCite ${res.status}: ${(await res.json()).error_code}`);
const { run_id, results } = await res.json();
for (const r of results) {
  console.log(r.item_id, r.original_citation, r.existence_status, r.reason_codes);
}

Reading the result

Retrying with the same Idempotency-Key and body returns the original result (Idempotent-Replayed: true) and uses no extra quota. On 429, wait for Retry-After.

Check your usage

curl -sS https://truecite.com.au/api/v2/usage -H "Authorization: Bearer $TRUECITE_KEY"

Use with your own MCP client

The TrueCite MCP server at https://truecite.com.au/mcp accepts the same API key as the REST API. Send it as Authorization: Bearer <your key>. MCP calls use the same allowance, rate limits and sandbox or production mode as POST /api/v2/verify. When the monthly allowance is used up, calls are refused with HTTP 429 and QUOTA_EXHAUSTED, and nothing is charged. The tools are verify_citation_identities, verify_entity_identities, get_usage and get_coverage. Claude.ai and ChatGPT connectors do not need a key: add TrueCite from the connector directory and sign in.

Your key is a secret. Keep it in a user-level config file or a prompted input, never in a repository. A revoked key stops working on the next call.

Claude Desktop (via mcp-remote)

Add this to claude_desktop_config.json (Settings → Developer → Edit Config), then restart Claude Desktop. It needs Node.js 18 or later.

{
  "mcpServers": {
    "truecite": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote", "https://truecite.com.au/mcp",
        "--header", "Authorization:${TRUECITE_AUTH}"
      ],
      "env": { "TRUECITE_AUTH": "Bearer tcs_…" }
    }
  }
}

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "truecite": {
      "url": "https://truecite.com.au/mcp",
      "headers": { "Authorization": "Bearer tcs_…" }
    }
  }
}

VS Code (.vscode/mcp.json)

VS Code asks for the key the first time and stores it securely, so this file can be committed.

{
  "inputs": [
    { "type": "promptString", "id": "truecite-key", "description": "TrueCite API key", "password": true }
  ],
  "servers": {
    "truecite": {
      "type": "http",
      "url": "https://truecite.com.au/mcp",
      "headers": { "Authorization": "Bearer ${input:truecite-key}" }
    }
  }
}

Any client: list the tools with curl

curl -sS https://truecite.com.au/mcp \
  -H "Authorization: Bearer $TRUECITE_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

An invalid, expired or revoked key gets 401 with WWW-Authenticate: Bearer … error="invalid_token". A request with no key gets the standard OAuth challenge used by directory connectors.

Reference