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:
textuses preserved source text per segment, falling back to stored text when source text is unavailable.full_textandword_countfollow those selected segments. Historical transcripts without segment rows retain stored full text and count because the original cannot be reconstructed. - Translated:
textuses stored transcript text, which may be untranslated when a translation is unavailable. - Both:
textuses stored text andoriginal_textappears 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.
What to read next
- 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.