API Reference Guide | CourtMesh
    Skip to main content

    CourtMesh API v1

    REST API for Indian court case data, litigation checks and AI legal analysis. 41 live endpoints, documented against the code that serves them.

    API key or bearer token
    Rate limits by tier
    318.9 million keyword, AI semantic on top

    Who can call this API today

    Anyone with an account. Sign up for a Free Developer key with no card on file, subscribe to Scale for predictable monthly volume, or talk to us about an Enterprise contract with pooled credits and custom limits. Every tier shares the same endpoints below; what differs is your credit balance, your rate limits and, on Free, which AI endpoints are available.

    Trial accounts are the one exception: API access is not available during a trial, and unlocks automatically once the trial ends or you upgrade. Every price and allowance below is also published on the API pricing page, so the two can never disagree.

    Quick start
    Three steps from an account to a first response.
    1

    Create a key

    Keys are created on the API Keys screen inside the CourtMesh Research app, at research.courtmesh.ai/api-keys. The full key is shown once, at creation, and only its hash is stored, so copy it then. If your plan does not include API access the screen will still let you create a key; the refusal happens on the first call.

    Key format: a prefix, then 32 characters, then 4 more, joined by hyphens. New keys use the cm- prefix. Older keys issued with vv- still authenticate and do not need replacing.

    2

    Set the base URL

    Every endpoint below is relative to:

    https://research.courtmesh.ai/api/v1/prod
    3

    Make the first request

    Send the key in X-API-Key or in Authorization: Bearer. Both work.

    curl -X POST https://research.courtmesh.ai/api/v1/prod/search/cases \
      -H "X-API-Key: cm-YOUR_KEY_HERE" \
      -H "Content-Type: application/json" \
      -d '{
        "query": "dishonour of cheque section 138",
        "court": "Bombay High Court",
        "limit": 20,
        "page": 1
      }'
    Questions developers actually ask
    Answers checked against the code, including the ones that are inconvenient.

    Who can get an API key today?

    Anyone. Create a Free Developer account and a key is issued immediately, no card required. Enterprise accounts and the Pay As You Go and Scale tiers work the same way, just with a different credit balance and rate limit attached to the key. Every new key is created against the tier limits published on the API pricing page from day one.

    Which headers authenticate a request?

    Either X-API-Key or Authorization: Bearer. The same middleware reads both, checks X-API-Key first, and falls back to the bearer token. Keys are issued in the form prefix-32characters-4characters, where the prefix is cm for keys issued now and vv for older keys that still authenticate. Anything that does not match that shape is rejected with HTTP 401 'Invalid API key format' before the key is looked up.

    What is the rate limit?

    It is keyed to your tier: the requests per minute ceiling ranges from 10 per minute on Free Developer up to 600 per minute on Enterprise, with per day and per month windows alongside it. The per minute limit is applied per key rather than per account, so splitting traffic across keys splits the budget too. Every successful response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, so budget against the real number. Exceeding it returns HTTP 429 with retryAfter in seconds and an ISO 8601 resetTime.

    Are there daily or monthly call limits?

    Yes, and they are enforced, keyed to your tier. Every tier carries a requests per minute, requests per day and requests per month window, plus a maximum page size and a pagination depth cap; the exact numbers are on the rate limits section below and on the API pricing page. Free Developer additionally caps AI analysis at zero calls per month and party screens at 10 per month. Distinct case fetches per day and PDF calls per month are also enforced per tier, refusing with DISTINCT_CASES_LIMIT_REACHED and PDF_LIMIT_REACHED once a tier's cap is reached; analyze requests apply a concurrency limit (CONCURRENT_ANALYSIS_LIMIT). Additional abuse protections apply beyond the published tier limits; contact support for a legitimate high-volume or shared-IP integration.

    Why did my practiceArea or caseNumber filter do nothing?

    practiceArea is not part of either search schema. The validator parses the body against a plain object schema, so any key it does not know about is stripped silently before the handler sees it: no error, no filter. caseNumber is different. It is accepted by the keyword search schema and echoed back in meta.filters, but the handler never forwards it to the search engine, so it also has no effect on results. To find a case by its number, put the number in the query field instead.

    How do I scope a semantic search to one court?

    Put it inside the nested filters object, not at the top level. The semantic handler reads only query, limit, page and filters. The schema still accepts court, year, caseType, caseNumber, judgeName, judges, judge, fromDate and toDate at the top level, so sending them does not raise an error, but nothing reads them. Send filters with a court key instead, and the endpoint merges it over whatever it inferred from your natural language query.

    Which endpoint searches 318.9 million records and which runs AI semantic search?

    POST /search/cases runs against the keyword index, which holds 318.9 million case records across the Supreme Court, all 25 High Courts, District Courts and Tribunals. POST /search/cases/semantic runs against the vector index, which holds the cases that have been analysed and embedded, and is not available on the Free tier. The semantic corpus is a curated subset, not the whole archive, so a semantic query can miss a document that keyword search finds.

    Do all endpoints cost credits?

    No. GET /health, GET /get-timeline and GET /coverage settle at zero credits, GET /me and GET /audit are absent from the price list entirely and so are unmetered, and the remaining endpoints carry published prices that range from one credit for a keyword search to four hundred for a consolidated AI analysis. POST /party/screen is priced by outcome rather than as a flat rate: a genuine no match is far cheaper than a screen that finds one, and requesting adjudicate=true adds a surcharge on top, all published on the endpoint below and on the API pricing page.

    Ready to build?

    Create a Free Developer account and you have a key in minutes, no card required. Need higher volume or a litigation check pilot? Talk to us and we will size the right tier for your use case.