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

# Search transcripts

> Full-text search across all transcripts with filters for speaker, date range, and meeting.

Search across all of your transcripts using natural language queries. Returns matching segments with surrounding context so you can quickly find the relevant part of a conversation.

This endpoint has an additional rate limit of 30 requests per minute. See [rate limits](/api-reference/rate-limits#endpoint-specific-limits).

### Request body

<ParamField body="query" type="string" required>
  The search query. Supports natural language (e.g., "budget discussion for Q2") and exact phrase matching with quotes (e.g., `"launch date"`).
</ParamField>

<ParamField body="meeting_id" type="string">
  Restrict search to a specific meeting transcript.
</ParamField>

<ParamField body="speaker" type="string">
  Filter results to segments from a specific speaker. Accepts a participant ID (e.g., `prt_a1b2c3`) or a speaker name (partial match supported).
</ParamField>

<ParamField body="from" type="string">
  Only search meetings that started on or after this date. ISO 8601 format.
</ParamField>

<ParamField body="to" type="string">
  Only search meetings that started on or before this date. ISO 8601 format.
</ParamField>

<ParamField body="language" type="string">
  Filter by transcript language (ISO 639-1 code, e.g., `en`, `es`, `fr`).
</ParamField>

<ParamField body="limit" type="integer" default="20">
  Maximum number of results to return. Between 1 and 100.
</ParamField>

<ParamField body="offset" type="integer" default="0">
  Number of results to skip for pagination.
</ParamField>

### Response

<ResponseField name="data" type="array">
  An array of search results.

  <Expandable title="Search result object">
    <ResponseField name="meeting_id" type="string">
      The ID of the meeting containing the match.
    </ResponseField>

    <ResponseField name="meeting_title" type="string">
      The title of the meeting.
    </ResponseField>

    <ResponseField name="transcript_id" type="string">
      The ID of the transcript containing the match.
    </ResponseField>

    <ResponseField name="segment" type="object">
      The matching transcript segment.

      <Expandable title="Segment object">
        <ResponseField name="id" type="string">
          Segment identifier.
        </ResponseField>

        <ResponseField name="speaker" type="object">
          Speaker information.

          <Expandable title="Speaker object">
            <ResponseField name="id" type="string">
              Speaker/participant identifier.
            </ResponseField>

            <ResponseField name="name" type="string">
              Speaker display name.
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="text" type="string">
          The segment text with matching terms wrapped in `<mark>` tags.
        </ResponseField>

        <ResponseField name="start" type="number">
          Start time in seconds.
        </ResponseField>

        <ResponseField name="end" type="number">
          End time in seconds.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="context" type="object">
      Surrounding segments for context.

      <Expandable title="Context object">
        <ResponseField name="before" type="array">
          Up to 2 segments immediately before the match.
        </ResponseField>

        <ResponseField name="after" type="array">
          Up to 2 segments immediately after the match.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="relevance_score" type="number">
      Relevance score between 0 and 1. Results are sorted by this value descending.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="pagination" type="object">
  Pagination metadata.

  <Expandable title="Pagination object">
    <ResponseField name="total" type="integer">
      Total number of matching segments.
    </ResponseField>

    <ResponseField name="limit" type="integer">
      The limit used in this request.
    </ResponseField>

    <ResponseField name="offset" type="integer">
      The offset used in this request.
    </ResponseField>

    <ResponseField name="has_more" type="boolean">
      Whether there are more results.
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.mavioapp.com/v1/transcripts/search \
    -H "Authorization: Bearer mvo_live_abc123" \
    -H "Content-Type: application/json" \
    -d '{
      "query": "launch timeline",
      "from": "2026-04-01T00:00:00Z",
      "limit": 5
    }'
  ```

  ```python Python theme={null}
  results = client.transcripts.search(
      query="launch timeline",
      from_date="2026-04-01T00:00:00Z",
      limit=5
  )
  for result in results.data:
      print(f"[{result.meeting_title}] {result.segment.speaker.name}: {result.segment.text}")
  ```

  ```javascript Node.js theme={null}
  const results = await client.transcripts.search({
    query: 'launch timeline',
    from: '2026-04-01T00:00:00Z',
    limit: 5,
  });
  results.data.forEach(r => {
    console.log(`[${r.meeting_title}] ${r.segment.speaker.name}: ${r.segment.text}`);
  });
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "data": [
      {
        "meeting_id": "mtg_8f3k2j1m4n5p",
        "meeting_title": "Weekly Product Sync",
        "transcript_id": "trs_9a2b3c4d5e6f",
        "segment": {
          "id": "seg_002",
          "speaker": {
            "id": "prt_d4e5f6",
            "name": "James Rodriguez"
          },
          "text": "On the <mark>launch timeline</mark>, we're still tracking for April 20th. The only risk is the payment integration.",
          "start": 13.1,
          "end": 22.6
        },
        "context": {
          "before": [
            {
              "id": "seg_001",
              "speaker": { "id": "prt_a1b2c3", "name": "Sarah Chen" },
              "text": "Let's get started with our weekly product sync. I want to cover three things today: the launch timeline, the open bugs from QA, and next sprint planning.",
              "start": 2.4,
              "end": 12.8
            }
          ],
          "after": [
            {
              "id": "seg_003",
              "speaker": { "id": "prt_g7h8i9", "name": "Priya Patel" },
              "text": "I actually got the Stripe credentials this morning. I'll have the integration tested by end of day tomorrow.",
              "start": 23.0,
              "end": 29.4
            }
          ]
        },
        "relevance_score": 0.94
      }
    ],
    "pagination": {
      "total": 12,
      "limit": 5,
      "offset": 0,
      "has_more": true
    }
  }
  ```
</ResponseExample>
