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

# Get a meeting's results

> Transcript, speakers, summary and media in one read. Each part has its own
`status`: the transcript is ready before the summary. Media URLs are signed for one
hour (`media.expires_at`); read the results again for fresh ones.

This is the one place a meeting's results are read, whichever way it was recorded.




## OpenAPI

````yaml /openapi.yaml get /meetings/{id}/results
openapi: 3.1.0
info:
  title: MeetingKit API
  description: >
    The MeetingKit API lets you build a meetings feature into your product:
    users connect

    a calendar, a notetaker joins their calls, and you get the transcript,
    speakers and

    summary of each meeting.
  version: '2026-10-12'
  contact:
    name: MeetingKit Developer Support
    email: dev@happyscribe.co
servers:
  - url: https://api.meetingkit.com/api/v1
security:
  - apiKeyAuth: []
tags:
  - name: Agent sessions
    description: Exchange the code a user hands their AI agent for API credentials.
  - name: Uploads
    description: Get signed URLs to upload media files directly to MeetingKit storage.
  - name: Transcribe
    description: Create transcription orders from media URLs.
  - name: Subtitle
    description: Create subtitling orders from media URLs.
  - name: Translate
    description: Create translation orders from existing conversations.
  - name: Orders
    description: Retrieve and confirm the orders created by the service endpoints.
  - name: Conversations
    description: List, retrieve, update, and delete conversations.
  - name: Exports
    description: Export conversations to text, subtitle, video-editing, and data formats.
  - name: Bots
    description: Send a notetaker bot to Zoom, Google Meet, or Microsoft Teams calls.
  - name: Glossaries
    description: List glossaries to apply custom terminology to orders.
  - name: Style guides
    description: List style guides to apply formatting preferences to orders.
  - name: Workspaces
    description: List the workspaces the authenticated user belongs to.
  - name: Organization memberships
    description: Manage which users belong to a workspace.
  - name: Members
    description: A partner's end users inside a workspace (MeetingKit).
  - name: Meetings
    description: >-
      Every meeting of a workspace, from calendars and bots, with its results
      (MeetingKit).
  - name: Calendar connections
    description: >-
      Members' Google and Microsoft calendars, connected through a hosted
      consent link and synced by MeetingKit.
  - name: Calendar events
    description: Calendar events a partner pushes from its own calendar sync (MeetingKit).
  - name: Settings
    description: >-
      What gets recorded and how, as values you assign to a workspace, a member,
      a meeting category or one meeting (MeetingKit).
  - name: Settings assignments
    description: Where settings apply (MeetingKit).
  - name: Files
    description: Images uploaded to a workspace, to use in a brand kit (MeetingKit).
  - name: Webhook endpoints
    description: Register the receivers of a workspace's webhooks, and test them.
  - name: Webhook events
    description: >-
      The webhooks sent to a workspace's endpoints, how each delivery went, and
      redelivery.
  - name: People
    description: >-
      Language Services. People found in your transcripts (Memory API, private
      beta).
  - name: Companies
    description: >-
      Language Services. Companies found in your transcripts (Memory API,
      private beta).
paths:
  /meetings/{id}/results:
    parameters:
      - $ref: '#/components/parameters/MeetingIdPath'
    get:
      tags:
        - Meetings
      summary: Get a meeting's results
      description: >
        Transcript, speakers, summary and media in one read. Each part has its
        own

        `status`: the transcript is ready before the summary. Media URLs are
        signed for one

        hour (`media.expires_at`); read the results again for fresh ones.


        This is the one place a meeting's results are read, whichever way it was
        recorded.
      operationId: getMeetingResults
      parameters:
        - name: include
          in: query
          required: false
          description: >
            Extra parts to include. Off by default.

            - `words`: each segment's word timings, in
            `transcript.segments[].words`
          schema:
            type: string
            enum:
              - words
      responses:
        '200':
          description: The results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingResults'
        '400':
          description: '`include` names something other than `words`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '401':
          description: >-
            Missing or invalid API key, or the key is not an owner or admin of
            the workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '404':
          description: No meeting with that ID, or not one the key can see.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
components:
  parameters:
    MeetingIdPath:
      name: id
      in: path
      required: true
      description: Meeting ID, beginning with `mtg_`. Treat it as an opaque string.
      schema:
        type: string
        example: mtg_01k6a2r9s8x7c2dvq3m5n6p4ab
  schemas:
    MeetingResults:
      type: object
      properties:
        object:
          type: string
          description: Always `meeting_results`.
        meeting_id:
          description: |
            The meeting these results belong to.
          type: string
        status:
          $ref: '#/components/schemas/PartStatus'
        transcript:
          description: |
            The transcript as speaker turns.
          type: object
          properties:
            status:
              $ref: '#/components/schemas/PartStatus'
            language:
              description: |
                The transcript's language tag.
              type:
                - string
                - 'null'
            segments:
              type: array
              description: Speaker turns, in order. Empty until the transcript is ready.
              items:
                type: object
                properties:
                  speaker_id:
                    type:
                      - string
                      - 'null'
                    description: A `speakers[].id`, or null where no speaker was detected.
                  start_seconds:
                    description: >
                      Start of the turn, in seconds from the start of the
                      recording.
                    type: number
                  end_seconds:
                    description: |
                      End of the turn, in seconds.
                    type: number
                  text:
                    description: |
                      What was said.
                    type: string
                  words:
                    type: array
                    description: >-
                      Each spoken word with its timing. Present only when the
                      request asks for `include=words`.
                    items:
                      type: object
                      properties:
                        text:
                          type: string
                          description: The word as transcribed.
                        start_seconds:
                          type: number
                          description: >-
                            When the word starts, in seconds from the start of
                            the recording.
                        end_seconds:
                          type: number
                          description: >-
                            When the word ends, in seconds from the start of the
                            recording.
        speakers:
          description: |
            Everyone who spoke, listed once.
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: Unique within this meeting only (`spk_1`, `spk_2`…).
              label:
                description: >
                  The speaker's name when identified, otherwise a neutral label
                  such as `Speaker 2`.
                type: string
              name:
                description: |
                  The speaker's name when identified, otherwise `null`.
                type:
                  - string
                  - 'null'
              email:
                description: |
                  The speaker's email when identified, otherwise `null`.
                type:
                  - string
                  - 'null'
              member_id:
                description: |
                  Set when the speaker is a member of the workspace.
                type:
                  - string
                  - 'null'
              identified:
                type: boolean
                description: >-
                  False leaves `name`, `email` and `member_id` null. We never
                  guess.
              talk_time_seconds:
                description: |
                  How long this speaker talked, in seconds.
                type: number
        summary:
          description: |
            The summary and its action items.
          type: object
          properties:
            status:
              $ref: '#/components/schemas/PartStatus'
            markdown:
              description: |
                The whole summary, ready to render.
              type:
                - string
                - 'null'
            sections:
              description: >
                The same content as data: a `heading`, then `text` or a list of
                `items`.
              type: array
              items:
                $ref: '#/components/schemas/SummarySection'
            action_items:
              description: |
                The follow-ups.
              type: array
              items:
                type: object
                properties:
                  text:
                    description: |
                      The action item.
                    type: string
                  assignee:
                    oneOf:
                      - $ref: '#/components/schemas/MeetingPerson'
                      - type: 'null'
                    description: >-
                      Set only when the item opens with the name of exactly one
                      known person.
        media:
          description: |
            The recording.
          type: object
          properties:
            status:
              $ref: '#/components/schemas/PartStatus'
            duration_seconds:
              description: |
                Length of the recording, in seconds.
              type:
                - number
                - 'null'
            audio_url:
              description: |
                Signed link to the audio, valid until `expires_at`.
              type:
                - string
                - 'null'
            video_url:
              type:
                - string
                - 'null'
              description: Null for audio-only recordings.
            expires_at:
              description: |
                When the signed links stop working, one hour after the read.
              type:
                - string
                - 'null'
              format: date-time
      example:
        object: meeting_results
        meeting_id: mtg_01k6a2r9s8x7c2dvq3m5n6p4ab
        status: ready
        transcript:
          status: ready
          language: en
          segments:
            - speaker_id: spk_1
              start_seconds: 0
              end_seconds: 14.2
              text: Morning all, shall we start with the renewal?
              words:
                - text: Morning
                  start_seconds: 0
                  end_seconds: 0.42
                - text: all,
                  start_seconds: 0.42
                  end_seconds: 0.7
            - speaker_id: spk_2
              start_seconds: 14.2
              end_seconds: 31.8
              text: Yes. We're keen, but pricing needs to move.
        speakers:
          - id: spk_1
            label: Marc
            name: Marc
            email: marc@gurusup.com
            member_id: mem_01k69x9s8x7c2dvq3m5n6p4ab
            identified: true
            talk_time_seconds: 812.4
          - id: spk_2
            label: Speaker 2
            name: null
            email: null
            member_id: null
            identified: false
            talk_time_seconds: 640.1
        summary:
          status: ready
          markdown: |-
            ## Renewal
            - Acme wants to renew
          sections:
            - heading: Renewal
              text: null
              items:
                - Acme wants to renew
          action_items:
            - text: 'Marc: send revised pricing'
              assignee:
                name: Marc
                email: marc@gurusup.com
                member_id: mem_01k69x9s8x7c2dvq3m5n6p4ab
        media:
          status: ready
          duration_seconds: 1834
          audio_url: https://storage.meetingkit.com/signed-audio
          video_url: https://storage.meetingkit.com/signed-video
          expires_at: '2026-09-29T09:46:10Z'
    Errors:
      type: object
      required:
        - errors
      description: >
        Every error the API returns, `401` and `429` included. See
        [Errors](/api-reference/errors).
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
        retry_in_seconds:
          type: integer
          description: >-
            On `429`, how long to wait before retrying. Also sent as
            `Retry-After`.
      example:
        errors:
          - code: invalid
            field: recording.methods.bot.mode
            message: 'must be one of: audio_and_video, audio_only, inherit'
    PartStatus:
      type: string
      enum:
        - processing
        - ready
        - failed
        - none
      description: >
        `none` until a recording produces it (and for good when nothing was
        recorded, or no

        summary for a failed transcript), `processing` while it is made, then
        `ready` or

        `failed`. Results never forecast: whether a recording will come is the
        meeting's

        `phase`, `recordings` and `settings.recording`.
    SummarySection:
      type: object
      properties:
        heading:
          type: string
          nullable: true
          description: >-
            The section heading as the summary template defines it. `null` for
            text that precedes the first heading.
        text:
          type: string
          nullable: true
          description: >-
            The section's paragraphs as plain text, separated by blank lines.
            `null` when the section holds only bullets.
        items:
          type: array
          items:
            type: string
          description: >-
            The section's bullet points as plain text, nested bullets flattened
            in order.
      example:
        heading: Budget & guests
        text: null
        items:
          - Carmen agreed to send the final budget by Friday
          - Venue shortlisted
    MeetingPerson:
      type: object
      properties:
        name:
          description: |
            The person's name, or `null` when unknown.
          type:
            - string
            - 'null'
        email:
          description: |
            The person's email, or `null` when unknown.
          type:
            - string
            - 'null'
        member_id:
          type:
            - string
            - 'null'
          description: Set when the person is a member of the meeting's workspace.
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: >-
            A stable snake_case word, safe to branch on. See
            [Errors](/api-reference/errors) for the list.
        message:
          type: string
          description: A sentence for humans. It may change; do not parse it.
        field:
          type: string
          description: >-
            The dotted path to the request field at fault, such as
            `recording.methods.bot.mode`. Present only when one field is.
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Your API key, sent bare. See
        [Authentication](/api-reference/authentication).

````