Endpoints
Every route the API serves, grouped by collection, with its parameters. All of them are public reads except the two chat routes, which are the site's own.
At a glance
Every collection answers the same eight routes below https://api.georgiacommons.org/api/{collection}, where the collection is code, bills, or opinions. Learn these and the rest is each collection's own document addresses.
| Route | What it does |
|---|---|
| `` | The collection's root: its routes, and its coverage sentence with the qualifications. |
/meta | Coverage, counts, and corpus version, computed from the store at request time. |
/search | Full-text search. Add in=headings to search only headings and titles. |
/items?ids= | Up to 20 documents in one request. |
/verify | Whether a quotation appears verbatim in the stored text. POST. |
/index/markdown | The collection's map: every unit at routing depth, one line each. |
/about/markdown | Provenance, coverage, license, and the independence statement. |
/search/markdown | The same search as Markdown, about ten hits with snippets. |
/sitemap-entries | Document ids, for enumerating the collection. Bills and opinions give the whole list with dates; the Code pages it. |
Reads need no key and no account. The full rules for identifiers, caching, and rate limits are on getting started.
Bills
Bills of the Georgia General Assembly, addressed by session and number. The doubled segment in /api/bills/bills/... is not a typo: the first is the collection, the second the resource.
/api/{slug}A collection's root (/api/bills, /api/opinions, /api/code): its routes, and its coverage sentence with the qualifications.
/api/bills/metaCoverage, counts, sessions, and corpus version.
/api/bills/recentBills with the newest activity first.
limit: 1 to 100, default 20offset: 0 to 10000
/api/bills/filteredThe same slim list, narrowed.
session: a session slug such as2025-2026chamber:HorSbill_type:B,R,CR, orJRstatus: a LegiScan status codeq: at least two characterslimit,offset: as above
/api/bills/searchFull-text search over bill text, titles, and the labeled summaries. A bare bill number is a direct lookup.
q: required, 1 to 300 charactersin:headingsto search only titles, tags, and subjectssession,chamber,bill_type,status: as abovelimit: 1 to 100, default 20
/api/bills/sessionsEvery session with its bill count.
/api/bills/sessions/{session}One session: counts by kind, its caption subjects, and a window of bills.
kind:hb,sb,hr, orsrstart: 0 or morelimit: 1 to 500, default 500
/api/bills/resolveWhere a written bill reference leads. Accepts HB 136, H.B. 136, hb-136, House Bill 136, with or without a session.
q: 1 to 200 characters
/api/bills/bills/{session}/{number}One bill: sponsors, status, history, and the labeled summaries. The bill text is not included.
/api/bills/bills/{session}/{number}/full-textThe stored bill text with minimal metadata, as JSON.
/api/bills/bills/{session}/{number}/textThe bill text alone as text/plain. The page and its twin are named in the Link header.
/api/bills/bills/{session}/{number}/markdownThe bill's Markdown twin: frontmatter, the text as filed, then the labeled summaries.
full=1: add history, votes, and amendments
/api/bills/itemsSeveral bills at once, with their text. Up to 20 a call; the response names the rest in next_ids.
ids: a comma-separated list, 1 to 2000 characters
/api/bills/verifyWhether a quotation appears verbatim in the stored bill, after the same normalization the ingestion quote filter uses. in names the reading that matched: text (the words as printed), text_as_amended (struck passages left out), or text_before_amendment (added passages left out).
- body:
{"id": ..., "quote": ...} - quotes shorter than 12 characters are refused with a 422
/api/bills/index/markdownThe map: sessions with their counts, kinds, and caption subjects.
/api/bills/about/markdownProvenance, coverage, license, and the independence statement.
/api/bills/search/markdownThe same search as Markdown: about ten hits with an id, a title, a status, a snippet, and a URL.
q: requiredsession,in: as abovelimit: 1 to 40, default 10
/api/bills/sessions/{session}/markdownOne session as Markdown, 500 bills a page.
type:hb,sb,hr, orsrstart: where the page begins
/api/bills/sitemap-entriesEvery bill id with its date. No ETag on this one.
/api/bills/bills/{bill_id}/askThe grounded question answering behind the chat panel on a bill page, streamed. This one route holds a server-side key and is not part of the public API.
Opinions
Opinions of the Supreme Court of Georgia, addressed by docket number. A CourtListener id or a lower-case docket redirects to the docket address.
/api/opinions/metaCoverage, counts, years, and corpus version.
/api/opinions/recentOpinions with the newest filing date first.
limit: 1 to 100, default 20offset: 0 to 10000
/api/opinions/filteredThe same slim list, narrowed.
year: a comma-separated listcase_type: a comma-separated listq: at least two characterslimit,offset: as above
/api/opinions/searchFull-text search over opinion text, case names, and the labeled summaries. A bare docket or reporter citation is a direct lookup.
q: required, 1 to 300 charactersin:headingsto search only names, legal areas, and case typeyear: 1900 to 2100case_typelimit: 1 to 100, default 20
/api/opinions/search-by-nameSearch case names alone. Prefix matches rank first.
q: at least two characterslimit: 1 to 100, default 20
/api/opinions/yearsEvery year with its opinion count.
/api/opinions/years/{year}One year: counts by case type and a window of opinions.
case_typestart: 0 or morelimit: 1 to 400, default 400
/api/opinions/resolveWhere a written reference leads. Accepts a docket in any case, a reporter citation in 883 S.E.2d 746, 883 SE2d 746, or 308 Ga. 283 form, a CourtListener id, or a case name.
q: 1 to 200 characters
/api/opinions/cases/{ref}One opinion by docket, citation, id, or case name. The opinion text is not included.
/api/opinions/cases/{docket}/{cluster_id}One opinion at its stable address, for the 77 dockets that carry more than one row.
full: add the summarized reasoning and the checked quotes
/api/opinions/cases/{docket}/{cluster_id}/textThe opinion text alone as text/plain.
/api/opinions/cases/{docket}/{cluster_id}/markdownThe opinion's Markdown twin: frontmatter, the court's text, then the labeled summaries.
full=1: add the reasoning, the checked quotes, and the CourtListener records
/api/opinions/cases/{docket}/{cluster_id}/full-textThe stored opinion text with its metadata, as JSON.
/api/opinions/itemsSeveral opinions at once, with their text. Up to 20 a call.
ids: a comma-separated list, 1 to 2000 characters
/api/opinions/verifyWhether a quotation appears verbatim in the stored opinion.
- body:
{"id": ..., "quote": ...} - quotes shorter than 12 characters are refused with a 422
/api/opinions/index/markdownThe map: years with their counts and case types.
/api/opinions/about/markdownProvenance, coverage, license, and the independence statement.
/api/opinions/search/markdownThe same search as Markdown, about ten hits with snippets.
q: requiredyear,case_type,in: as abovelimit: 1 to 40, default 10
/api/opinions/years/{year}/markdownOne year as Markdown, 400 opinions a page.
case_typestart: where the page begins
/api/opinions/sitemap-entriesEvery opinion id with its date. No ETag on this one.
/api/opinions/clusters/{cluster_id}/askThe grounded question answering behind the chat panel on an opinion page, streamed. This one route holds a server-side key and is not part of the public API.
The Code
The Official Code of Georgia Annotated, addressed by citation. Source text only: there is no chat route here, and no model anywhere in this path.
/api/code/metaCoverage sentence and its qualifications, counts, corpus version, release date, and the bulk download addresses.
/api/code/treeEvery title with its headings and counts, plus both constitutions.
/api/code/sections/{ref}One section by citation, written any of the ways people write it. Returns every version, whether it is in force now, and the neighboring sections. A range or a list redirects to /items?ids=.
version: one stored version rather than the current one
/api/code/sections/{ref}/textThe statute text alone as text/plain.
version
/api/code/sections/{ref}/markdownThe section's Markdown twin.
versionnotes=all: lift the 12,000-character cap on annotationssubsection: one subsection, such asa-1
/api/code/titles/{title}One title's chapters, with its articles, parts, and subparts.
/api/code/titles/{title}/markdownThe title's map as Markdown.
/api/code/titles/{title}/chapters/{chapter}One chapter's sections, slim.
/api/code/titles/{title}/chapters/{chapter}/markdownThe chapter as Markdown.
full=1: inline the section text, under a 200,000-character capstart: where the page begins
/api/code/searchFull-text search of the Code. A bare citation is a direct lookup; an act's short title returns the section that states it.
q: required, 1 to 300 charactersin:headingsto search only catchlines and headingstitle: 1 to 99chapterstatus:active(the default),repealed,reserved,redesignated,superseded,note_only, orallscheme:ocga(the default),ga, oruslimit: 1 to 100, default 20
/api/code/actsThe short-title index: every name a statute gives itself, with the section that states it.
qlimit: 1 to 100, default 25
/api/code/itemsSeveral sections at once. Up to 20 ids, or a range of up to 40 sections, under a 300,000-character budget.
ids: a comma-separated list;44-7-30..44-7-35for a range
/api/code/verifyWhether a quotation appears verbatim in the stored text.
- body:
{"id": ..., "quote": ...} idis a citation, orga-const:{slug}orus-const:{slug}
/api/code/index/markdownThe map: 53 titles with their chapters, about 50 KB.
/api/code/about/markdownProvenance, coverage, license, and the independence statement.
/api/code/acts/markdownEvery short title, alphabetically, as Markdown.
/api/code/search/markdownThe same search as Markdown, about ten hits with snippets.
q: requiredtitle,chapter,status,scheme,in: as abovelimit: 1 to 40, default 10
/api/code/bulkA JSON listing of the download bundle: the release page, the checksum file, and each asset with its address. Always a listing, never a redirect.
/api/code/bulk/{filename}One asset of the bundle.
/api/code/sitemap-entriesSection ids, a page at a time.
page: 0 or more; omit it for the list of pages
The constitutions
The Georgia and United States constitutions as printed in the Code, under the same collection. {scheme} is ga or us.
/api/code/constitution/{scheme}The articles and sections, plus any standalone provisions.
/api/code/constitution/{scheme}/index/markdownEvery provision, one line each.
/api/code/constitution/{scheme}/{citation}One provision, by slug (art-i-sec-i-para-i) or by citation.
/api/code/constitution/{scheme}/{citation}/markdownThe provision's Markdown twin.
notes=allsubsection
/api/code/constitution/{scheme}/{citation}/textThe provision's text alone as text/plain.
The API itself
Two routes that describe the service rather than a document.
/The API's own index: its version, the collections it serves, and where the MCP server is mounted.
/healthWhether the process is up and which collections are loaded, with each one's count and corpus version.