MeetsoAPI Docs

Quickstart

Mint a key and pull your first meeting in five minutes.

1. Mint an API key

Sign in to Meetso, click Settings → API Keys, then Create key. You'll need an Owner or Admin role on the organization.

Pick the scopes you need — at minimum meetings:read. The reveal modal shows the plaintext key once. Copy it now; we hash it on our side and can't recover it later.

2. Make your first request

Replace mts_live_… with the key you just copied.

curl 'https://api.meetso.ai/public/v1/meetings?limit=3' \
  -H 'Authorization: Bearer mts_live_…'

You'll get a paginated list of past meetings:

{
  "data": [
    {
      "id": "ckxyz…",
      "title": "Weekly product sync",
      "start_time": "2026-04-29T15:00:00.000Z",
      "end_time": "2026-04-29T15:30:00.000Z",
      "transcript_id": "ckabc…",
      "recording_id": "ckdef…",
      "processing_status": "COMPLETED",
      "...": "..."
    }
  ],
  "pagination": {
    "next_cursor": "eyJzIjoi…",
    "has_more": true
  }
}

3. Drill into a transcript

curl 'https://api.meetso.ai/public/v1/transcripts/ckabc…' \
  -H 'Authorization: Bearer mts_live_…'

You get the full transcript with speaker-resolved segments, ready to ingest into your CRM, RAG pipeline, or data warehouse. Segment timestamps are absolute UTC ISO 8601 timestamps; use meeting.timezone for local display.

An organization ADMIN or OWNER can choose Original, Translated (the default), or Both under Settings → Developer → API keys → Transcript output. This one preference applies to all API keys and MCP connections, including existing transcripts, on subsequent retrieval requests.

  • Original: text uses preserved source text per segment, falling back to stored text when source text is unavailable. full_text and word_count follow those selected segments. Historical transcripts without segment rows retain stored full text and count because the original cannot be reconstructed.
  • Translated: text uses stored transcript text, which may be untranslated when a translation is unavailable.
  • Both: text uses stored text and original_text appears only for a distinct preserved original. Responses may be larger.

Every response includes text_mode and nullable translated_to. The first is the applied preference; the second is the stored translation target. A target does not guarantee every row was translated, and preserved originals can exist when the target is null. primary_language remains the detected source language.

MCP get_transcript uses textMode, translatedTo, and originalText with the same rules. It retains its segment paging: follow nextOffset until null. Each page applies the current preference, so restart traversal if its mode changes and your integration needs a consistent mode.

This preference does not generate translations or change the transcript viewer. Search still matches current stored text; choosing Original does not enable original-language search.

4. Paginate

The first response's pagination.next_cursor is the input for the next page:

curl 'https://api.meetso.ai/public/v1/meetings?cursor=eyJzIjoi…&limit=3' \
  -H 'Authorization: Bearer mts_live_…'

When pagination.has_more is false, you've reached the end.

  • Authentication — Bearer header, scopes, key lifecycle.
  • Pagination — the cursor model in detail.
  • Errors — every error code, what it means, how to handle it.
  • Rate limits — burst + sustained windows, retry advice.

On this page