---
title: "List Recorder Meetings"
method: GET
path: "/recorder_metrics/all_meetings"
tags: ["RecorderMetrics"]
---

# List Recorder Meetings

`GET /recorder_metrics/all_meetings`

Returns a cursor-paginated, deduplicated list of calendar meetings for the authenticated organization with the recording status of each meeting and each org participant. One row per calendar event.

Intended for bulk export to data warehouses and analytics pipelines. Requires an organization-level API key — user-scoped keys are rejected.

### Window
* `fromDateTime` and `toDateTime` are required and must define a window of at most **90 days**.
* When `upcoming=true`, results are ordered ascending by date; otherwise descending. UUID is used as a stable tiebreaker for same-date meetings.

### Pagination
* Cursor-based. The first page is requested with no `cursor`. The response's `nextCursor` is passed back unchanged on the next call.
* When the response has no `nextCursor`, the iteration has reached the end of the dataset.
* `size` is clamped to a server-side maximum of 200 (default 50).
* For periodic backfills, run a complete iteration per refresh (start each refresh with no `cursor`); rows inserted into the window after an iteration starts are picked up on the next refresh.

### Meeting `status` values
Attention's native status taxonomy is returned as-is. Values currently surfaced (non-exhaustive list, subject to additive evolution): `recorded`, `calendar_event_cancelled`, `empty_recording`, `user_override`, `event_not_accepted`, `not_join_internal_team_meetings`, `external_meetings_disabled`, `blacklisted_attendees`, `not_join_when_alone`, `bot_disabled`, `bot_removed`, `waiting_room`, `technical_error`, `no_meeting_link`, `bot_not_scheduled`, `scheduled_future`.

Clients should map these codes to their own reporting taxonomy on the consumer side (e.g. dbt models, BI views).

### Field semantics
* `uuid` — calendar event UUID (deduplication key).
* `conversationUuid` — populated only when a recording exists (`status=recorded`).
* `userUuid` / `userName` — the user attributed as the recorder; falls back to the first event participant when no recording exists.
* `participants[]` — every org user invited to the event with their per-user status (a user may be `recorded` while another is `not_join_when_alone` on the same meeting).
* `statusLabel` — human-readable label resolved server-side, suitable for direct display.

## Query parameters

- `fromDateTime` string, date-time, required
- `toDateTime` string, date-time, required
- `cursor` string
- `size` integer
- `upcoming` boolean
- `filter[user_id]` string[]
- `filter[meeting_type]` 'internal' | 'external'

## Response `200`

Cursor-paginated list of meetings with recording status

- RecorderMetricsMeetingsPage
  - `items` RecorderMetricsMeeting[], required — Page of meetings ordered by date (ascending when upcoming=true, descending otherwise) with UUID as tiebreaker.
    - `uuid` string, required — Calendar event UUID. Acts as the deduplication key.
    - `conversationUuid` string — Conversation UUID. Populated only when a recording exists (status=recorded).
    - `summary` string, required — Meeting title.
    - `date` string, date-time, required — Meeting start time, ISO 8601.
    - `userUuid` string, required — UUID of the user attributed as the recorder. Falls back to the first event participant when no recording exists.
    - `userName` string, required — Display name for userUuid.
    - `status` string, required — Attention's native status code. Clients map this to their own taxonomy. See the endpoint description for the current set of values.
    - `statusLabel` string, required — Human-readable label for the status, resolved server-side.
    - `participants` RecorderMetricsMeetingParticipant[], required — Every org user invited to the event with their per-user recording status.
      - `userUuid` string, required
      - `userName` string, required
      - `status` string, required — Per-user status. Same code space as the meeting-level status; can differ from it (e.g. a meeting may be `recorded` while a particular user is `not_join_when_alone`).
      - `statusLabel` string, required
    - `consentLinkUsed` boolean — Whether the meeting used an Attention consent link.
    - `consentStatus` string — consented | declined | no_response, when consentLinkUsed is true (no_response = a consent link was used but no attendee acted). Null when consentLinkUsed is false (no consent link).
  - `nextCursor` string — Opaque cursor for the next page. Absent (or empty) when the iteration has reached the end of the dataset.

## Other responses

- `400` — Invalid request parameters (missing dates, invalid cursor, window over 90 days)
- `401` — Authentication failed or non-organization API key supplied
- `500` — Internal server error

---

[API](https://skmtc.net/attention/apis/attention-service-v2.md) · [All operations](https://skmtc.net/attention/apis/attention-service-v2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/attention/attention-service-v2/revisions/5de55d3804cf/schema)
