Georgia Commons Chat API
The chat API from Georgia Commons — 1 operation(s) for chat.
The chat API from Georgia Commons — 1 operation(s) for chat.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/georgiacommons-org:georgiacommons-org-chat-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Georgia Commons Chat API
description: 'Georgia''s public government documents as source text: search across every collection, documents and their Markdown twins, and grounded chat. A project of Georgia Civic Data; not affiliated with the State of Georgia.'
version: 1.0.0
tags:
- name: Chat
paths:
/api/ask:
post:
tags:
- Chat
summary: Ask Route
description: 'Ask a question of the whole corpus (`mode: quick`) or of one document (`mode: document`, with
`document_id`). Streams events: meta, status, interpretation, sources, facets, coverage, found,
clarify, paragraph, dropped, done, error. Each paragraph is sent only after every quotation in it
was found word for word in the stored text; a sentence whose quotation was not is dropped.'
operationId: ask_route_api_ask_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AskRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- APIKeyHeader: []
components:
schemas:
SearchOverride:
properties:
filters:
anyOf:
- $ref: '#/components/schemas/Filters'
- type: 'null'
phrasings:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Phrasings
linked_to:
anyOf:
- $ref: '#/components/schemas/LinkedTo'
- type: 'null'
versions:
anyOf:
- type: string
enum:
- current
- all
- type: 'null'
title: Versions
mode:
anyOf:
- type: string
enum:
- best
- all
- type: 'null'
title: Mode
additionalProperties: false
type: object
title: SearchOverride
description: 'What the reader set by editing a chip or clicking a facet: it replaces
the planner''s reading for this turn.'
ChatMessage:
properties:
role:
type: string
enum:
- user
- assistant
title: Role
content:
type: string
minLength: 1
title: Content
additionalProperties: false
type: object
required:
- role
- content
title: ChatMessage
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
LinkedTo:
properties:
id:
type: string
title: Id
description: A document id; results are documents linked to it (and, with a locator, the linked stretch).
relations:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Relations
description: 'Relation types: discusses, amends, amendment_to, cites, implements, supersedes, same_case. Default: all.'
additionalProperties: false
type: object
required:
- id
title: LinkedTo
AskRequest:
properties:
mode:
type: string
enum:
- quick
- document
title: Mode
default: quick
messages:
items:
$ref: '#/components/schemas/ChatMessage'
type: array
maxItems: 40
minItems: 1
title: Messages
language:
type: string
enum:
- en
- es
title: Language
default: en
document_id:
anyOf:
- type: string
- type: 'null'
title: Document Id
description: 'Required in document mode: the work id of the page the reader is on.'
search:
anyOf:
- $ref: '#/components/schemas/SearchOverride'
- type: 'null'
context_ids:
items:
type: string
type: array
maxItems: 10
title: Context Ids
additionalProperties: false
type: object
required:
- messages
title: AskRequest
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
Filters:
properties:
doc_type:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Doc Type
description: Document types, e.g. bill, opinion, code_section, constitution_provision, meeting_transcript, amendment.
level:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Level
description: 'Levels of government: federal, state, county, municipal, consolidated, school_district, regional.'
branch:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Branch
description: 'Branches: legislative, executive, judicial.'
body:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Body
description: Issuing bodies by id, e.g. ga-supreme-court, ga-senate, ga-house-rules (describe_site lists them).
body_type:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Body Type
description: 'Kinds of body: legislative_chamber, legislative_committee, court, board_of_education, governing_body, ...'
place:
anyOf:
- type: string
- type: 'null'
title: Place
description: A Georgia place in words or as an id (Atlanta, Cobb County, city:savannah). Matches the body's jurisdiction.
include_overlapping:
type: boolean
title: Include Overlapping
description: 'With place: also bodies whose area overlaps it (Fulton and DeKalb for Atlanta).'
default: true
place_scope:
type: string
enum:
- either
- jurisdiction
- mentions
title: Place Scope
description: 'With place: documents issued for that place (jurisdiction), documents that mention it (mentions), or either (default).'
default: either
date_from:
anyOf:
- type: string
- type: 'null'
title: Date From
description: 'Earliest date: YYYY, YYYY-MM, or YYYY-MM-DD.'
date_to:
anyOf:
- type: string
- type: 'null'
title: Date To
description: 'Latest date: YYYY, YYYY-MM, or YYYY-MM-DD.'
date_field:
anyOf:
- type: string
enum:
- date_primary
- date_filed
- date_met
- date_adopted
- date_effective
- type: 'null'
title: Date Field
description: Which date the range applies to; defaults to each type's own (filing date for opinions, meeting date for meetings).
session:
anyOf:
- type: string
- type: 'null'
title: Session
description: Legislative session slug, e.g. 2025-2026 or 2026-special.
status:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Status
description: 'Status classes: pending, passed_one_chamber, passed_both, enacted, vetoed, failed, in_force, repealed, decided, held.'
action:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Action
description: 'Stage of an action inside a meeting: reading, motion, vote, adopted, failed, public_comment, ...'
additionalProperties: false
type: object
title: Filters
description: Hard filters. Every field is optional; values come from the vocabularies.
securitySchemes:
APIKeyHeader:
type: apiKey
in: header
name: X-API-Key