AnrakLegal API reference

Indian legal data and live court records, through one key

Case law, statutes, citator, global law, web intelligence and official eCourts records as JSON. The same key drives the tools endpoint, the OpenAI-compatible Model API and the MCP connector for AI assistants.

Start here

One call to your first result

Every request is HTTPS against https://anrak.legal and returns JSON. Create a key in the console, then search.
bash
curl "https://anrak.legal/api/v1/search?q=anticipatory+bail+economic+offences" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

What you get

Six product lines under /api/v1: case law, statutes, citator, global law, web intelligence and court records. Plus a tools endpoint, an OpenAI-compatible Model API and an MCP connector, all on the same key.

What is live and what is indexed

Case law, statutes, citator and global law read from AnrakLegal's own indexes. Court records read the official eCourts portals live, then cache for six hours. Web intelligence searches the live web.

Keys

Authentication and permissions

Send the key on every request. Keys are created in the console, start with ANRAK-, and are stored hashed; you see the full key once.

Preferred

Authorization: Bearer ANRAK-…

Also accepted

x-anrak-key: ANRAK-…

Also accepted

x-api-key: ANRAK-…

Permissions

Each key carries a set of permissions chosen when it is created. An endpoint whose permission the key lacks returns 403 with code: "insufficient_scope" and the permission it needs. Every endpoint below shows its scope.

PermissionScopeUnlocks
Indian case law and court recordssearchSearch, documents, citator, court records, court-records tools
Indian statutesstatutesStatute search and sections
Web and global lawwebGlobal law endpoints, web intelligence
Model APImodel:invokeChat completions on the anrak-* models

Jurisdiction

Court records are served to accounts in the India jurisdiction. A key from a United States or Hong Kong account receives 403 with code: "JURISDICTION" on the court-records endpoints and tools; every other endpoint is unaffected.

Plans

Plans and limits

Data endpoints are metered per call against a Data plan. Requests are also rate limited per account.
Monthly quotaData StarterData Pro
Legal Search calls10,00050,000
Full Judgment retrievals5,00025,000
Citator lookupsNot included10,000
Web Intelligence searchesNot included2,500
Global law and court recordsIncludedIncluded
Price₹29,988 a year₹1,19,988 a year

Rate limit

120 requests a minute per account across the API. Over that, 429 with a Retry-After header.

Free accounts

120 data requests in total to try the API, and 5 Model API requests a day. Paid plans lift both.

Beyond a quota

Calls past the monthly quota, and call kinds your plan excludes, bill your pay-as-you-go balance per call (search ₹10, judgment ₹20, citator ₹40, web ₹25). With no balance you get 402 with code: "data_quota_exhausted" or "feature_not_in_plan". Without any Data plan every call is pay-as-you-go. Add credit (minimum ₹5,000) on the console's Billing tab. See pay-as-you-go pricing.

Handling

Errors

Errors are JSON with an HTTP status you can branch on. Two envelopes exist: a short one on authentication and validation, and an OpenAI-style one on metering and the Model API.

401 · missing or invalid key

json
{ "error": "Missing or invalid AnrakLegal API key." }

403 · key lacks the permission

json
{
  "error": "This API key does not have the required permission.",
  "code": "insufficient_scope",
  "required_scope": "search"
}

402 · quota exhausted or feature not in plan

json
{
  "error": {
    "message": "Your Data Starter quota for search is exhausted until the reset date …",
    "type": "insufficient_quota",
    "param": null,
    "code": "data_quota_exhausted"
  }
}

Court records · 400, 404, 501, 504

json
{ "error": "Say which court: a High Court name, or …", "code": "COURT_REQUIRED" }
{ "error": "No case found on the district portal for this CNR", "code": "CASE_NOT_FOUND" }
{ "error": "Supreme Court CNRs are not served by the eCourts portals …", "code": "UNSUPPORTED" }
{ "error": "Courts service did not answer within 170s", "code": "PORTAL_TIMEOUT" }

Retrying

Retry 429 after the Retry-After header and 5xx with exponential backoff. Do not retry 4xx; the request needs a change. Court-records timeouts mean the government portal is slow; a retry a minute later usually succeeds, and cached reads never time out.

Endpoints

Case law

Ranked search over Indian judgments from the Supreme Court, every High Court, tribunals and district courts, with full text, metadata and citation links for each document.
GET/api/v1/documents/{docId}scope search

The complete judgment: full text, court, date, bench, the cases it cites and the cases that cite it.

ParameterTypeDescription
docIdrequiredstringThe tid from a search result.

Request

bash
curl "https://anrak.legal/api/v1/documents/63240555" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Response

json
{
  "docId": "63240555",
  "document": {
    "title": "P. Chidambaram vs Directorate Of Enforcement",
    "docsource": "Supreme Court of India",
    "publishdate": "2019-09-05",
    "doc": "<div>… full judgment text as HTML …</div>",
    "citeList": [{ "tid": 1234567, "title": "Gurbaksh Singh Sibbia vs State Of Punjab" }],
    "citedbyList": [{ "tid": 7654321, "title": "…" }]
  }
}
GET/api/v1/documents/{docId}/metascope search

Metadata only, about 2 KB: title, court, date and citation counts. Use it to build lists without pulling full text.

ParameterTypeDescription
docIdrequiredstringThe tid from a search result.

Request

bash
curl "https://anrak.legal/api/v1/documents/63240555/meta" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Response

json
{
  "docId": "63240555",
  "metadata": {
    "title": "P. Chidambaram vs Directorate Of Enforcement",
    "docsource": "Supreme Court of India",
    "publishdate": "2019-09-05",
    "numcites": 42,
    "numcitedby": 118
  }
}
GET/api/v1/documents/{docId}/fragmentscope search

The passages of a judgment where your query terms appear, with surrounding context.

ParameterTypeDescription
docIdrequiredstringThe tid from a search result.
qrequiredstringTerms to locate inside the document.

Request

bash
curl "https://anrak.legal/api/v1/documents/63240555/fragment?q=triple+test" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Response

json
{
  "docId": "63240555",
  "query": "triple test",
  "fragments": ["… the triple test of flight risk, tampering with evidence and influencing witnesses …"]
}
GET/api/v1/documents/{docId}/originalscope search

The court-filed original file, streamed as the file itself: PDF, HTML or DOC, whichever the court published. Save the response body; the Content-Type header tells you the format.

ParameterTypeDescription
docIdrequiredstringThe tid from a search result.

Request

bash
curl "https://anrak.legal/api/v1/documents/63240555/original" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx" \
  -o 63240555.pdf

Response

json
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: inline; filename="63240555"

%PDF-1.4 … (file bytes)

Endpoints

Statutes

Semantic search across Indian legislation, and any section by act and number. Covers BNS, BNSS, BSA, IPC, CrPC, the Evidence Act, the Constitution and the central acts.
GET/api/v1/statutes/sectionscope statutes

One section in full, with explanations, provisos, cross-references and amendment history.

ParameterTypeDescription
actrequiredstringShort name of the act, for example BNS or Constitution.
sectionrequiredstringSection or article number, for example 138 or 21.

Request

bash
curl "https://anrak.legal/api/v1/statutes/section?act=BNS&section=303" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Response

json
{
  "act": "BNS",
  "fullName": "Bharatiya Nyaya Sanhita, 2023",
  "sectionNumber": "303",
  "heading": "Theft",
  "body": "Whoever, intending to take dishonestly any movable property …",
  "explanation": "…",
  "provisos": [],
  "crossReferences": ["IPC 378"],
  "amendments": [],
  "status": "in_force"
}

Endpoints

Citator

Treatment intelligence for a judgment: whether it has been overruled, doubted, distinguished or affirmed, with the passages that say so.
GET/api/v1/citator/{docId}scope search

Overall signal, red-flag status and snippet-backed flags for a judgment. Data Pro and pay-as-you-go keys only.

Unknown documents return 404 and are not charged.

ParameterTypeDescription
docIdrequiredstringThe tid from a search result.
refresh1Ask for a background re-check when the treatment data is stale. Charged as one lookup.

Request

bash
curl "https://anrak.legal/api/v1/citator/63240555" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Response

json
{
  "docId": "63240555",
  "treatment": {
    "summary": { "signal": "positive", "redFlag": false, "overruled": false, "doubted": false },
    "flags": [
      { "type": "distinguished", "byDocId": 7654321, "snippet": "… the facts in Chidambaram are distinguishable …" }
    ],
    "checkedAt": "2026-09-01T03:10:00.000Z"
  },
  "refreshing": false
}

Endpoints

Global law

Foreign authorities across 180+ jurisdictions, plus Indian regulator and gazette sources: SEBI, RBI, TRAI, the eGazette and IndiaCode.
POST/api/v1/global/resolvescope web

Turn a citation string, such as an ECLI, a CELEX number or a US reporter cite, into a document reference you can fetch.

Body fieldTypeDescription
referencerequiredstringThe citation as written.
hint_countrystringISO-2 code when the citation form is ambiguous.
hint_typecase_law | legislationWhat kind of document it is.

Request

bash
curl -X POST "https://anrak.legal/api/v1/global/resolve" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "reference": "ECLI:EU:C:2014:317" }'

Response

json
{ "source": "eurlex", "source_id": "62012CJ0131", "title": "Google Spain SL v AEPD", "country": "EU" }
GET/api/v1/global/documentscope web

The full text of a global document by source and id.

ParameterTypeDescription
sourcerequiredstringSource identifier from a search or resolve result.
source_idrequiredstringDocument identifier within that source.

Request

bash
curl "https://anrak.legal/api/v1/global/document?source=eurlex&source_id=62012CJ0131" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Response

json
{ "source": "eurlex", "source_id": "62012CJ0131", "title": "Google Spain SL v AEPD", "text": "…" }
GET/api/v1/global/discoverscope web

Which sources and courts are available for a country.

ParameterTypeDescription
countryrequiredstringISO-2 code.

Request

bash
curl "https://anrak.legal/api/v1/global/discover?country=SG" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Response

json
{ "country": "SG", "sources": [{ "source": "elitigation", "namespaces": ["case_law"], "courts": ["Court of Appeal", "High Court"] }] }

Endpoints

Web intelligence

Current-awareness search with source citations: amendments, rulings in the news and regulatory developments. Not a source for legal authority; use case law and statutes for that.

Endpoints

Court records

Live records from the official eCourts portals of all 25 High Courts and every district court in India, read at the time of your request. Five ways in: a CNR, a case number, a party name, an advocate, or an FIR number with its police station. Every route ends at the same case record: parties, advocates, stage, next date, full hearing history, every order with a plain-language summary, and whether the case is on a day's cause list. Available to accounts in the India jurisdiction.
You haveCallYou giveYou get
A CNRGET /courts/cases/{cnr}The 16-character CNRThe full record in one call. Fastest and most complete; use it whenever you have the CNR.
A case numberGET /courts/findCourt (High Court, or state + district), case type as spoken, number, year; optional partyThe CNR(s) and records. Every complex in the district is searched; several cases can share a number, so a party shortlists them.
A party nameGET /courts/searchCourt or state + district, party, registration yearEvery case in that court's register for that party and year, with CNRs.
An advocateGET /courts/searchCourt or state + district, advocate name or bar_codeThe advocate's whole book in that court, with CNRs.
An FIRGET /courts/searchState + district, fir_number, police_station; optional fir_yearThe criminal case(s) that arose from the FIR, with parties, stage and next date filled from the record. Leave the station out and the error lists the district's stations.
A hearing dateGET /courts/causelistHigh Court, date; bench, case number, party or bar_code to filterThe day's board with item numbers, or an advocate's own list.

Where searches run

Every lookup is per court, because that is how the government portals work: there is no all-India index of names or FIRs. Give a High Court by name (delhi, DLHC, "Bombay High Court") or a district court by state and district (Punjab, Jalandhar). For a district, every court complex is searched (up to six) and the rows are merged; add complex to narrow to one. Station names, case types and complexes are matched against the portal's own lists, so say them the way a lawyer would.

Two portals, one contract

High Court CNRs read the High Court portal; all others read the district portal. Responses share one shape either way. Supreme Court CNRs, which begin with ESCR, are not on either portal and return 501.

Timings

A live case read is 5 to 20 seconds; a cached read is under a second. A case-number search across a district's complexes is 10 to 30 seconds. Parsing a large High Court's boards is about a minute, then instant for the day.

Honest by design

Nothing is inferred. If a case is not on the portal you get CASE_NOT_FOUND; if the court is missing you get COURT_REQUIRED; if the police station is unknown you get UNKNOWN_POLICE_STATION with the list; if boards are not published yet the cause list says so.
GET/api/v1/courts/cases/{cnr}scope search

The full case record by CNR: parties and advocates, acts, stage, court, next date, complete hearing history and the list of orders. Add order for the latest order's text and summary, and listing to check a day's cause list.

A first read is live from the portal and takes 5 to 20 seconds. Repeat reads are served from cache for six hours.

ParameterTypeDescription
cnrrequiredstring16-character CNR: four letters and twelve digits, for example PBJL030048482025.
orderlatest | YYYY-MM-DDAlso return the text excerpt and summary of the latest order, or of the order passed on a date.
listingYYYY-MM-DDAlso check whether the case is on the cause list for that date.

Request

bash
curl "https://anrak.legal/api/v1/courts/cases/PBJL030048482025?order=latest&listing=2026-09-07" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Response

json
{
  "case": {
    "cnr": "PBJL030048482025",
    "caseNumber": "1830/2025",
    "caseType": "NACT - 138 NIA ACT",
    "caseStatus": "PENDING",
    "courtName": "Court No. 58, District Court, Punjab",
    "judges": ["Judicial Magistrate First Class"],
    "petitioners": ["AMRIT MALWA CAPITAL LTD"],
    "petitionerAdvocates": ["KAMAL KISHORE ARORA"],
    "respondents": ["PREETI"],
    "actsAndSections": "Negotiable Instruments Act — 138",
    "filingDate": "2025-02-14",
    "nextHearingDate": "2026-10-28",
    "purpose": "Appearance",
    "hearingCount": 21,
    "orderCount": 20
  },
  "fetchedAt": "2026-09-08T09:12:41Z",
  "hearingHistory": [{ "date": "2026-09-07", "purpose": "Appearance", "judge": "Judicial Magistrate First Class" }],
  "orders": [{ "date": "2026-09-02", "orderType": "Interim Orders" }],
  "order": {
    "date": "2026-09-02",
    "orderType": "Interim Orders",
    "summary": {
      "summary": "The complainant has not deposited publication charges despite 13 opportunities …",
      "operativeDirections": ["Deposit publication charges", "Pay previous costs of Rs. 900 to the DLSA"],
      "nextDate": "2026-09-07"
    },
    "excerpt": "CNR No:PBJL030048482025 CASE No:NACT-1830-2025 …",
    "source": "official eCourts portal PDF"
  },
  "listing": {
    "listed": true,
    "portal": "dc",
    "district": { "court": "58-Sh. Pawanpreet Singh-Judicial Magistrate First Class", "serialNumber": 12, "purpose": "Appearance", "listType": "CRIMINAL" }
  },
  "source": "Official eCourts portal"
}
GET/api/v1/courts/findscope search

Case number to CNR. Give the court the way a lawyer would, the case type as spoken, the number and the year. Every court complex in a district is searched and every match is returned with its parties.

A case number is unique only inside one courtroom's register, so the response can hold several candidates. When ambiguous is true, ask which party and use that CNR. Without a court the call returns 400 COURT_REQUIRED; it never guesses.

ParameterTypeDescription
case_typerequiredstringAs spoken: NACT, 138 NI Act, Bail Application, W.P.(C). Matched against the court's own list; the response names what it resolved to.
case_numberrequiredstringThe number alone, without type or year.
yearrequiredYYYYRegistration year.
courtstringHigh Court name, slug or CNR prefix: 'Delhi High Court', delhi, DLHC. Omit for district courts.
state / districtstringDistrict court location by name, for example Punjab and Jalandhar.
complexstringA specific court complex when the district has several. Otherwise all are searched.
partystringShortlist candidates whose petitioner or respondent matches.

Request

bash
curl "https://anrak.legal/api/v1/courts/find?state=Punjab&district=Jalandhar&case_type=NACT&case_number=1830&year=2025" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Response

json
{
  "query": { "caseType": "NACT", "caseNumber": "1830", "year": "2025" },
  "resolved": {
    "portal": "dc",
    "courtName": "Jalandhar, Punjab",
    "courtSource": "given; all 3 complexes in Jalandhar",
    "caseType": { "code": "56^5", "name": "NACT - 138 NIA ACT" },
    "complexesSearched": ["District Court, Jalandhar", "Judicial Complex, Nakodar", "Judicial Complex, Phillaur"]
  },
  "candidates": [
    { "cnr": "PBJL030048482025", "caseNumber": "1830/2025", "petitioners": ["AMRIT MALWA CAPITAL LTD"], "respondents": ["PREETI"], "complex": "District Court, Jalandhar", "partyMatch": null }
  ],
  "cases": [{ "cnr": "PBJL030048482025", "status": "PENDING", "nextHearingDate": "2026-10-28", "orders": [ … ] }],
  "ambiguous": false
}
GET/api/v1/courts/causelistscope search

A High Court's cause list for a date, parsed from the bench-wise board PDFs into rows with item numbers. Filter by bench, case number or party, or pass a bar registration number for the court's own list for an advocate.

Boards are ingested every morning and evening on court days. If a court and date are not ingested yet the response says so; pass live=1 to parse them now, which takes about a minute for a large court.

ParameterTypeDescription
courtrequiredstringHigh Court name, slug or CNR prefix.
dateYYYY-MM-DDDefault today in IST.
benchstringJudge or bench text, or a court number.
case_numberstringFind one case on the board, for example W.P.(C) 6294/2025.
partystringFilter rows by a party name.
bar_codestringAdvocate bar registration number, for example D/1234/2010. Returns the court's own per-case list for that advocate.
live1Parse the boards now if they are not ingested yet.
limitnumberRows to return, up to 300.

Request

bash
curl "https://anrak.legal/api/v1/courts/causelist?court=delhi&date=2026-09-07&case_number=W.P.(C)+6294/2025" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Response

json
{
  "court": "Delhi High Court",
  "date": "2026-09-07",
  "source": "ingested-boards",
  "totalRows": 1,
  "benches": ["HON'BLE MR. JUSTICE V. KAMESWAR RAO, HON'BLE MS. JUSTICE MANMEET PRITAM SINGH ARORA"],
  "rows": [
    {
      "item": "4",
      "bench": "HON'BLE MR. JUSTICE V. KAMESWAR RAO, HON'BLE MS. JUSTICE MANMEET PRITAM SINGH ARORA",
      "courtNo": "285",
      "listType": "ADVANCED LIST",
      "caseNo": "W.P.(C) 6294/2025",
      "title": "V SANGEETHA & ANR. VS NATIONAL LAW UNIVERSITY DELHI & ORS.",
      "stage": "FOR ADMISSION",
      "pdfUrl": "https://hcservices.ecourts.gov.in/…"
    }
  ]
}

Agents

Tools endpoint

The same tools the AnrakLegal assistants use, callable one at a time. List them, then call one by name with a JSON body. Court records exposes the full set of actions here, including the advocate's own board.

List the tools your key can call

bash
curl "https://anrak.legal/api/v1/tools" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"

Call one: case number to CNR with a party shortlist

bash
curl -X POST "https://anrak.legal/api/v1/tools/court_records" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "action": "find_by_number", "state": "Punjab", "district": "Jalandhar",
        "case_type": "138 NI Act", "case_number": "1830", "year": "2025", "party": "Amrit Malwa" }'
ToolScopeDoes
search_casessearchIndian case-law search
get_documentsearchFull judgment by id
search_statutesstatutesStatute search
get_statute_sectionstatutesOne section by act and number
search_webwebWeb intelligence
court_recordssearchLive court records: lookup_cnr, find_by_number, latest_order, case_listing, cause_list, my_board
ip_indiasearchIndian Patent Office registers
legal_researchsearchCombined research with a citation manifest
legal_validationsearchCheck the citations in a draft against the corpus

court_records actions

lookup_cnr (record plus latest order), find_by_number, search (a court register by party and year, by advocate or bar_code, or a district court by fir_number and police_station), latest_order (optional date), case_listing, cause_list (bench, case_number, party, bar_code or mine), and my_board (the caller's tracked cases listed on a date plus their advocate list). Responses are the same JSON as the REST endpoints, wrapped in the tool result envelope.

Models

Model API

Grounded Indian legal reasoning as a model. Point any OpenAI SDK at https://anrak.legal/api/v1 with your key and call anrak-conductor; answers carry retrieved authorities and pass a citation check before they stream. Requires the model:invoke permission.
bash
curl -X POST "https://anrak.legal/api/v1/chat/completions" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anrak-conductor",
    "messages": [{ "role": "user", "content": "Can a non-signatory invoke an arbitration agreement?" }],
    "stream": false
  }'
typescript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.ANRAK_API_KEY,
  baseURL: "https://anrak.legal/api/v1",
});

const models = await client.models.list();          // anrak-conductor, anrak-conductor-ensemble, anrak-conductor-deep …
const reply = await client.chat.completions.create({
  model: "anrak-conductor",
  messages: [{ role: "user", content: "Limitation for a Section 138 complaint?" }],
});

Choosing a model

anrak-conductor routes each question to the depth it needs. anrak-conductor-ensemble always convenes the full panel. anrak-conductor-deep runs the long research pipeline. GET /api/v1/models lists what your key may call.

AI assistants

MCP connector

Claude, ChatGPT, Cursor and any Model Context Protocol client can use AnrakLegal's tools directly: search, statutes, citator, global law, court records, and the paralegal suite for keys with matter permissions. The connector is hosted; there is nothing to install.

Claude.ai

  1. Open Connectors and choose the Claude.ai tab.
  2. Click Add to Claude. Claude opens with the connector pre-filled; approve the sign-in.
  3. Ask Claude what AnrakLegal tools it has. It lists them with court_records among them.

Server URL, if you add it by hand: https://anrak.legal/mcp/anrak

ChatGPT, Claude Desktop, Cursor

  1. Open Connectors and use Quick Setup to create a connector with the permissions you want.
  2. Copy its connector URL into your client's MCP or custom-connector settings.
  3. Restart the client and confirm the tools appear.

Documents in your matters are redacted of Indian personal data before any assistant sees them.

What a court-records conversation looks like

  1. You: "What happened at the last hearing in NACT 1830/2025 at Jalandhar, and is it listed tomorrow?"
  2. The assistant calls court_records.find_by_number with Punjab, Jalandhar, NACT, 1830, 2025 and gets the CNR.
  3. It calls court_records.lookup_cnr and reads the latest order's text rather than guessing.
  4. It calls court_records.case_listing for tomorrow and reports the serial number, courtroom and purpose, or says the case is not listed.

Monitoring

Usage

Per-key request counts and, on a Data plan, how much of each monthly quota is used. The usage dashboard shows the same figures with endpoint and status breakdowns.
bash
curl "https://anrak.legal/api/v1/usage" \
  -H "Authorization: Bearer ANRAK-xxxxx-xxxxx-xxxxx-xxxxx"
json
{
  "key": {
    "id": "cmtro9j4u…",
    "name": "Research pipeline",
    "preview": "ANRAK-d5uM…",
    "scopes": ["search", "statutes", "web"],
    "requestCount": 1842,
    "createdAt": "2026-08-01T06:00:00.000Z",
    "lastUsedAt": "2026-09-08T09:12:41.000Z"
  },
  "dataApi": {
    "dataPlan": "DATA_PRO",
    "cycleStart": "2026-09-01T00:00:00.000Z",
    "quotas": { "search": 50000, "document": 25000, "citator": 10000, "web": 2500 },
    "used": { "search": 1203, "document": 388, "citator": 41, "web": 12 },
    "paygRates": { "search": "₹10.00", "document": "₹20.00", "citator": "₹40.00", "web": "₹25.00" }
  },
  "payg": { "balancePaise": 250000, "balance": "₹2500.00", "topUp": "https://anrak.legal/console" }
}

Help

Support

Write to [email protected] for higher volumes, Data Enterprise, dedicated throughput, audit logging or a private deployment. Include the request id from the response headers when reporting a problem.