> ## Documentation Index
> Fetch the complete documentation index at: https://www.myhamlet.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List meetings

> Returns a cursor-paginated list of the meetings under the locations your API key is entitled to, ordered by last update (oldest first) so you can sync incrementally. Page forward by passing the previous response's `next_cursor` as `cursor`. Pass `updated_since` to return only meetings changed at or after that time; it composes with the cursor. Optionally restrict to a single government body with `government_body_uuid`.



## OpenAPI

````yaml /openapi.json get /v1/meetings
openapi: 3.1.0
info:
  title: Hamlet Public API
  version: 0.1.0
  description: >-
    Public API for programmatic access to Hamlet civic intelligence data:
    government meetings, transcripts, and related records from local
    governments.
servers:
  - url: https://api.myhamlet.com
    description: Production
security: []
paths:
  /v1/meetings:
    get:
      tags:
        - Meetings
      summary: List meetings
      description: >-
        Returns a cursor-paginated list of the meetings under the locations your
        API key is entitled to, ordered by last update (oldest first) so you can
        sync incrementally. Page forward by passing the previous response's
        `next_cursor` as `cursor`. Pass `updated_since` to return only meetings
        changed at or after that time; it composes with the cursor. Optionally
        restrict to a single government body with `government_body_uuid`.
      parameters:
        - schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 50
            description: Maximum number of items to return per page.
            example: 50
          required: false
          description: Maximum number of items to return per page.
          name: per_page
          in: query
        - schema:
            type: string
            description: >-
              Opaque pagination cursor from a previous response's `next_cursor`.
              Omit for the first page.
            example: eyJ1IjoiMjAyNi0wNS0wMSAxODoyMjoxMCIsImkiOjQyfQ
          required: false
          description: >-
            Opaque pagination cursor from a previous response's `next_cursor`.
            Omit for the first page.
          name: cursor
          in: query
        - schema:
            type: string
            format: date-time
            description: >-
              Inclusive lower bound on `updated_at` (ISO-8601 with a UTC `Z` or
              numeric offset, e.g. `2026-05-01T18:22:10Z`). Returns only records
              changed at or after this time, ordered and paged exactly like a
              normal request — pass it alongside `cursor` to sync incrementally.
              A malformed or offset-less timestamp returns `400`.
            example: '2026-05-01T18:22:10Z'
          required: false
          description: >-
            Inclusive lower bound on `updated_at` (ISO-8601 with a UTC `Z` or
            numeric offset, e.g. `2026-05-01T18:22:10Z`). Returns only records
            changed at or after this time, ordered and paged exactly like a
            normal request — pass it alongside `cursor` to sync incrementally. A
            malformed or offset-less timestamp returns `400`.
          name: updated_since
          in: query
        - schema:
            type: string
            format: uuid
            description: >-
              Restrict the list to meetings of this government body. The body
              must be under one of your entitled locations; an unknown or
              un-entitled uuid returns 404.
            example: c30d2f7e-9a1b-4c5d-8e6f-0a1b2c3d4e5f
          required: false
          description: >-
            Restrict the list to meetings of this government body. The body must
            be under one of your entitled locations; an unknown or un-entitled
            uuid returns 404.
          name: government_body_uuid
          in: query
      responses:
        '200':
          description: A page of meetings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingList'
        '400':
          description: Invalid cursor, government_body_uuid, or query parameter.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            The government body does not exist or is not entitled to this API
            key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    MeetingList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Meeting'
        next_cursor:
          type:
            - string
            - 'null'
          description: >-
            Pass as `cursor` to fetch the next page; `null` when there are no
            more results.
          example: eyJ1IjoiMjAyNi0wNS0wMSAxODoyMjoxMCIsImkiOjQyfQ
      required:
        - data
        - next_cursor
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: not_found
            message:
              type: string
              example: The requested resource was not found.
          required:
            - code
            - message
      required:
        - error
    Meeting:
      type: object
      properties:
        uuid:
          type: string
          description: Public identifier.
          example: 0b3d5f2e-1c4a-4e8b-9f6d-2a1c3e4b5d6f
        location_uuid:
          type: string
          example: 5f2b0c3a-1d4e-4a8b-9f6d-2a1c3e4b5d6f
        location_name:
          type: string
          example: Oakland
        government_body_uuid:
          type: string
          example: c30d2f7e-9a1b-4c5d-8e6f-0a1b2c3d4e5f
        government_body_name:
          type: string
          example: City Council
        type:
          type: string
          enum:
            - REGULAR
            - SPECIAL
          description: Meeting type.
          example: REGULAR
        date:
          type: string
          description: Meeting date (YYYY-MM-DD).
          example: '2026-05-20'
        ordinal:
          type: integer
          description: Disambiguates multiple meetings on a single day.
          example: 1
        is_cancelled:
          type: boolean
          description: Factual meeting status.
          example: false
        has_agenda:
          type: boolean
          description: Whether a processed agenda exists for this meeting.
          example: true
        has_transcript:
          type: boolean
          description: Whether a downloadable transcript artifact exists.
          example: true
        created_at:
          type: string
          description: ISO-8601 UTC timestamp.
          example: '2026-05-21T02:00:00.000Z'
        updated_at:
          type: string
          description: ISO-8601 UTC timestamp; drives the sync cursor.
          example: '2026-05-22T09:14:00.000Z'
      required:
        - uuid
        - location_uuid
        - location_name
        - government_body_uuid
        - government_body_name
        - type
        - date
        - ordinal
        - is_cancelled
        - has_agenda
        - has_transcript
        - created_at
        - updated_at
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````