NationGraph Meeting Minutes API
The Meeting Minutes API from NationGraph — 2 operation(s) for meeting minutes.
The Meeting Minutes API from NationGraph — 2 operation(s) for meeting minutes.
openapi: 3.1.0
info:
title: Nationgraph Accounts Meeting Minutes API
version: 0.2.36
tags:
- name: Meeting Minutes
paths:
/api/internal/meeting-minutes/chunks/{id}:
get:
tags:
- Meeting Minutes
summary: Get Meeting Minute Chunk
description: Fetch a single meeting minute chunk by chunk ID.
operationId: get_meeting_minute_chunk_api_internal_meeting_minutes_chunks__id__get
security:
- HTTPBearer: []
parameters:
- name: id
in: path
required: true
schema:
type: integer
title: Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/MeetingMinuteChunkResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/internal/meeting-minutes/search:
post:
tags:
- Meeting Minutes
summary: Search Meeting Minutes
description: 'Search meeting minute chunks via Postgres FTS.
At least one of ``institution_ids`` or ``query`` must be supplied —
chunks table has 20M+ rows and we don''t allow unbounded scans.
With ``query``: results ranked by ``ts_rank_cd`` (cover density —
proximity of query terms). Without ``query`` (institution-scoped
browse): results sorted by meeting date descending.
``query`` accepts a websearch-style string (same syntax as RFP / Grant
search): bare words for stemmed match, ``"phrase"`` for exact phrase,
``OR``, ``-word`` for exclude.
Set ``group_by_document=true`` to collapse to the highest-scoring chunk
per document (or earliest chunk when no query).
Semantic / LLM-synthesized answers are not in scope here — use the
existing ``/v3/rag/query`` endpoint for that. This endpoint returns raw
evidence rows for downstream reasoning.'
operationId: search_meeting_minutes_api_internal_meeting_minutes_search_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MeetingMinuteSearchFilters'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResponse_MeetingMinuteChunkResponse_'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- HTTPBearer: []
components:
schemas:
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
MeetingMinuteSearchFilters:
properties:
query:
anyOf:
- type: string
maxLength: 2000
- type: 'null'
title: Query
institution_ids:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Institution Ids
states:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: States
source_tables:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Source Tables
meeting_date_after:
anyOf:
- type: string
format: date
- type: 'null'
title: Meeting Date After
meeting_date_before:
anyOf:
- type: string
format: date
- type: 'null'
title: Meeting Date Before
group_by_document:
type: boolean
title: Group By Document
default: false
offset:
type: integer
title: Offset
default: 0
limit:
type: integer
title: Limit
default: 50
type: object
title: MeetingMinuteSearchFilters
description: 'Search filters for meeting minute chunks.
The ``query`` field accepts a websearch-style query string evaluated against
the chunks'' ``text_search_fts`` column (english config — stemming enabled).
Same syntax as RFP / Grant search.
Semantic search lives on the existing ``/v3/rag/query`` endpoint (returns
synthesized prose). This endpoint returns raw matching chunks for callers
who want to reason over evidence directly.
At least one of ``institution_ids`` or ``query`` must be supplied — the
chunks table is 20M+ rows and we reject fully unbounded scans. Institution
scoping alone (with no query) lists that institution''s chunks in
reverse-chronological order, useful for surveying what we have.'
MeetingMinuteChunkResponse:
properties:
chunk_id:
type: integer
title: Chunk Id
document_id:
type: integer
title: Document Id
institution_id:
anyOf:
- type: string
- type: 'null'
title: Institution Id
institution_name:
anyOf:
- type: string
- type: 'null'
title: Institution Name
institution_state:
anyOf:
- type: string
- type: 'null'
title: Institution State
institution_type:
anyOf:
- type: string
- type: 'null'
title: Institution Type
meeting_date:
anyOf:
- type: string
format: date
- type: 'null'
title: Meeting Date
document_title:
anyOf:
- type: string
- type: 'null'
title: Document Title
document_url:
anyOf:
- type: string
- type: 'null'
title: Document Url
document_created_at:
anyOf:
- type: string
format: date-time
- type: 'null'
title: Document Created At
text:
type: string
title: Text
relevance:
type: number
title: Relevance
other_matching_chunks_in_document:
anyOf:
- type: integer
- type: 'null'
title: Other Matching Chunks In Document
type: object
required:
- chunk_id
- document_id
- text
- relevance
title: MeetingMinuteChunkResponse
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
PaginatedResponse_MeetingMinuteChunkResponse_:
properties:
results:
items:
$ref: '#/components/schemas/MeetingMinuteChunkResponse'
type: array
title: Results
total:
type: integer
title: Total
offset:
type: integer
title: Offset
limit:
type: integer
title: Limit
type: object
required:
- results
- total
- offset
- limit
title: PaginatedResponse[MeetingMinuteChunkResponse]
securitySchemes:
HTTPBearer:
type: http
scheme: bearer