Bindinglaw

Overview

A first real answer before you have an account.

binding.law serves US statutes, regulations, court rules, jury instructions, agency guidance and the Sentencing Guidelines as data — each section carrying the URL it came from, the time it was fetched, a hash of the text, and the dates it was in force. The coverage endpoint is public and unmetered, so the quickstart below runs right now.

Sixty seconds: ask what we carry

Start with /v1/law/coverage. It takes no key, bills nothing, and answers the question every other call depends on — is this jurisdiction and this body of law in the corpus at all, and how far back does it go. Narrow it with jurisdiction and corpus, or omit both for everything.

curl "https://api.binding.law/v1/law/coverage?jurisdiction=fl&corpus=statutes"

No Authorization header. This call is public and bills zero units.

200 · captured 2026-09-20
{
  "coverage": [
    {
      "jurisdiction": "fl",
      "corpus": "statutes",
      "name": "Florida",
      "cadenceClass": "edition",
      "temporalBasis": "compiled-edition",
      "coverageFrom": "2010-07-01",
      "latestVersion": "2025",
      "sections": 26776,
      "versions": 48076,
      "lastRetrievedAt": "2026-07-22 05:14:30.429+00"
    }
  ],
  "note": "asOf dates earlier than coverageFrom return no_edition_on_file; a jurisdiction+corpus absent from this list returns not_carried. temporalBasis declares what validity bounds mean per jurisdiction.",
  "generatedAt": "2026-09-20T19:51:41.148Z"
}

Live values move; the shape does not. coverageFrom is the earliest date with a version on file, and an asOf before it is an explicit miss rather than a nearest guess.

Two fields decide how you read everything else. coverageFrom is the floor for point-in-time queries. temporalBasis says what the validity dates mean for that jurisdiction — compiled-edition resolves to the edition in force (a March 2020 date lands on Florida’s 2019 edition, not 2020), act-effective-date to the date the text actually took effect, and as-observed to the day we first observed that text at the source.

Then: get a key and look something up

Everything past coverage and quality needs Authorization: Bearer. Sign up for a key, then resolve a citation as of a date. The response carries the section text, its validity window, and the provenance you would need to defend the quote.

curl "https://api.binding.law/v1/law/lookup?jurisdiction=fl&citation=768.28&asOf=2019-03-01" \
  -H "Authorization: Bearer lf_live_..."

Replace lf_live_… with your own key. Keys go in an environment variable, never in a repository.

What every answer carries

A successful lookup returns one section version wrapped in result. Inside it, provenance names the exact page the text was read from (sourceUrl), when it was read (retrievedAt), the SHA-256 of the normalized body (contentHash), the publishing system (sourceSystem) and the edition label (versionLabel). Alongside it, validFrom and validTo bound the period this text was in force, and permalink is a binding.law URL a human can open.

Provenance is on every tier and every response, including the free one. If a field cannot be sourced it is not served. Search results carry the same provenance object per hit; the compact /v1/law/text variant carries versionLabel and permalink instead of the full object, so an agent quoting a section still has somewhere to send the person who asks where it came from.

A miss is an answer, not a failure

binding.law never resolves a citation to the nearest thing it has. A lookup that finds nothing returns 404 with one of two codes, and the difference between them is the single most important thing to get right in an integration.

not_carried

We hold nothing of that material for that jurisdiction. No citation within it can be confirmed or denied, and nothing found elsewhere carries our authority. The correct behaviour is to stop and say the source is not carried.

no_edition_on_file

We carry that material, but not that number or not on that date. Check error.didYouMean, the form of the key, or the asOf date against coverageFrom, and ask again.

The errors page has the full list, the verbatim messages, and the reason this distinction exists.

Base URLs

https://api.binding.law/v1The REST API. Every path on this page is relative to it.
https://mcp.binding.lawThe MCP server. POST only, streamable HTTP, same bearer token.
https://api.binding.law/v1/openapi.yamlThe machine-readable spec. Also served as .json.

/v1/statutes/* is a permanent alias for /v1/law/* — same handlers, same responses. It exists because earlier integrations hardcoded it. New code should use /v1/law/*.

The API is designed to be called from a server. It does not send permissive CORS headers, so a browser cannot call it directly from an arbitrary origin; proxy it through your own backend.

Where to go next

Bindinglaw

Point-in-time US law with the receipt attached. Source URL, retrieval time, content hash, and validity dates on every answer.

curl api.binding.law/v1/law/coverage

© 2026 binding.law · a Jubal, Inc. productAttorneys and firms never pay. Ever.