---
title: "Retrieve a list of meetings"
method: GET
path: "/v1/meetings"
tags: ["Meetings"]
---

# Retrieve a list of meetings

`GET /v1/meetings`

## Request

- Base URL: `https://api.momentum.io`
- URL: `https://api.momentum.io/v1/meetings`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/momentum/apis/momentum-api/docs/v1/meetings/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns external, non-cancelled meetings that have a recorded call and fall entirely within the
`from`/`to` window. A processed transcript is not required, so a meeting can appear before its
`transcript` is available.

**Ordering.** Results are sorted by `startTime` ascending, then by meeting `id` ascending, so the
order is deterministic even when many meetings share the same `startTime`.

**Window semantics.** By default (`windowMatch=contained`) a meeting is included only if
`startTime >= from` and `endTime <= to`, so a meeting that ends after `to` is not returned for that
window. Set `windowMatch=start` to match on start time only (`from <= startTime <= to`); each meeting
then falls in exactly one of a series of consecutive windows (de-duplicate by `id` in case a meeting
starts exactly on a boundary). With the default, overlap adjacent windows by at least your longest
expected meeting duration and de-duplicate by `id`.

**Paging (recommended: cursor).** Every non-empty page includes `nextCursor`. Pass it back as `cursor`
(with the same filters and `pageSize`) to get the next page; stop when `nextCursor` is `null`. Cursor
paging continues strictly after the last meeting you received, so meetings created or deleted earlier
in the window do not cause duplicates or gaps, and deep pages stay fast. A meeting created mid-pull
that sorts before your position is not returned; pick it up on your next re-pull. `cursor` cannot be
combined with `pageNumber`.

**Paging (offset).** `pageNumber` paging is still supported. Pages are offset-based and are not a
snapshot: meetings created, deleted, or changed between requests can shift later pages. Iterate
`pageNumber` from 1 until a page returns an empty `meetings` array. Requesting a page beyond the last
page returns `{ "meetings": [], "pageCount": 0, "nextCursor": null }`. There is no maximum `pageNumber`, but
deep offsets get slower, so prefer `cursor` or narrower time windows for large backfills.

`pageCount` is recomputed on every request from the current data; with `cursor`, it counts the pages
remaining from the cursor, including the current one. Always pass an explicit `to`: when omitted it
defaults to the current time, so the window grows between page requests.

**Change tracking.** Every field is read live on each request and the response does not include an
`updatedAt` field. Transcripts can be added or reprocessed after a meeting first appears, Salesforce
IDs change when links are re-mapped (including via `POST /v1/meeting/remap`), and attendee and host
details reflect the current user records. To pick up these changes, re-fetch recent windows.

**Recommended backfill pattern.** Use fixed `from`/`to` windows with `windowMatch=start`, page with
`cursor`, de-duplicate by `id`, periodically re-pull recent windows, and
pace requests using `X-RateLimit-Remaining` and `Retry-After`.

**Rate limits.** This endpoint shares the organization-wide limit described in
[API Access](/api-access#rate-limiting).

## Query parameters

- `from` string, date-time, required
- `to` string, date-time
- `windowMatch` 'contained' | 'start'
- `pageNumber` number
- `cursor` string
- `pageSize` number
- `salesforceAccountId` string
- `salesforceOpportunityId` string
- `attendeeEmailAddresses` string[]
- `sourceTypes` string
- `includeDownloadUrl` boolean

## Response `200`

A list of meetings.

- object
  - `meetings` Meeting[], required
    - `id` string
    - `title` string
    - `startTime` string, date-time
    - `endTime` string, date-time
    - `host` object
      - `email` string
      - `name` string
    - `attendees` Attendee[]
      - `id` string
      - `name` string, required
      - `email` string, email, required
      - `isInternal` boolean, required
      - `salesforceCaseId` string
      - `salesforceLeadId` string
    - `transcript` object
      - `entries` TranscriptEntry[]
        - `speaker` object
          - `name` string, required
          - `attendeeId` string
        - `timestamp` string
        - `timestampSeconds` number
        - `text` string, required
    - `salesforceAccountId` string
    - `salesforceLeadId` string
    - `salesforceCaseId` string
    - `salesforceOpportunityId` string
    - `downloadUrl` string, uri: Pre-signed URL to download the meeting recording. Valid for 2 hours from the time of the API request. Only present when includeDownloadUrl=true and the meeting has a recording available.
    - `downloadUrlExpiresAt` string, date-time: Expiration time of the download URL in ISO 8601 format (UTC). Only present when includeDownloadUrl=true and downloadUrl is generated.
  - `pageCount` number: Total number of pages for the current query, recomputed on every request. Returns 0 when the requested page is empty, including pages beyond the last page. With `cursor`, counts the pages remaining from the cursor, including this one.
  - `nextCursor` string, nullable: Pass as `cursor` to fetch the next page. `null` when there are no more results.

## Other responses

- `400`: Bad request due to validation errors
- `429`: Rate limit exceeded
- `500`: Internal server error

## Changes

- **2026-10-26** `9d82a3ae28d8`: 6 info
  - added the new optional `query` request parameter `cursor`
  - added the new optional `query` request parameter `windowMatch`
  - added the non-success response with the status `400`
  - added the non-success response with the status `429`
  - …2 more
- **2026-09-28** `06895f975863`: 1 info
  - added the optional property `meetings/items/salesforceCaseId` to the response with the `200` status
- **2026-07-26** `7c9ae2273788`: 1 breaking
  - the `query` request parameter `from` became required

[Operation history](https://skmtc.dev/momentum/apis/momentum-api/changes/v1/meetings/get.md)

---

[API](https://skmtc.dev/momentum/apis/momentum-api.md) - [All operations](https://skmtc.dev/momentum/apis/momentum-api/llms.txt) - [OpenAPI document](https://skmtc.dev/momentum/apis/momentum-api/revisions/9d82a3ae28d8?raw)
