docketrouter
DocumentationBrowse
API reference

Citation check

The library half of citation verification, callable on its own. Each citation is looked up in the Texas law index and in the offline table of 18,123,788 reporter citations across 989 reporters. The wider concept, including the statuses the chat endpoint can return, is in Citation verification.

POST/citations/checkkey, session or site demoLook up to 100 citations in the library.

Request

FieldTypeNotes
citationsstring[]1 to 100 citation strings, each 1 to 200 characters, as written: 488 U.S. 222, 928 S.W.2d 483. Whitespace is normalised; order is preserved in the response.
200 OK
{
  "results": [
    { "input": "488 U.S. 222", "status": "found", "note": "in CourtListener bulk table",
      "match": { "name": "", "citation": ["488 U.S. 222"], "court": "", "date": "",
                 "url": "https://www.courtlistener.com/?q=cluster_id%3A112345" } },
    { "input": "999 F.9th 1", "status": "unverified",
      "note": "not in the DocketRouter library or the bulk citation table; absence is not evidence the citation is fabricated" }
  ],
  "checked": 2,
  "found": 1,
  "took_ms": 21
}

The two statuses

StatusMeaningShow it as
foundThe citation exists in the DocketRouter index or in the offline citation table. When the table supplied the answer, match.url is a CourtListener search for the cluster and the other match fields may be empty.Verified.
unverifiedThe library has no record of it. That is all it means.Not verified. Never "fabricated" or "nonexistent".
This endpoint never says nonexistent

The offline table is the public-domain bulk export and is incomplete for some reporters; the index covers Texas and the Supreme Court. Presence proves a citation exists. Absence proves nothing, so the negative status is unverified, not not_found. If your product needs an affirmative negative, that is a different check with an external source and its own rate limits; do not derive it from this endpoint.

Strings that are not reporter citations at all, such as Tex. R. Civ. P. 166a, come back unverified: the table only holds volume, reporter and page. Use POST /rag/rules to resolve a rule citation to its text.

Examples

curl https://docketrouter.ai/api/v1/citations/check \
  -H "Authorization: Bearer dr-…" -H "content-type: application/json" \
  -d '{ "citations": ["488 U.S. 222", "928 S.W.2d 483", "999 F.9th 1"] }' \
  | jq '.results[] | {input, status}'

Limits

LimitValueOn breach
citations1 to 100 per request400
Each citation200 characters400
Request body64 KB413
Calls per key or session30 per minute, burst 10429 with Retry-After
Calls from the site demo10 per minute per IP, burst 3429 with Retry-After

Results are deterministic for the same library build. A citation the index confirms is cached for the process, so repeated checks of the same list are fast.

Something here wrong or missing? Mail hello@docketrouter.ai with the request_id and we will fix the docs or the API, whichever is broken.