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

# Get a transcript

> What was said on the call, turn by turn.

Only the agent's and the caller's speech is included; tool calls and other
internal events are not. `turns` is the conversation in order and `text`
is the same conversation as plain text. Per-turn `started_at` / `ended_at`
are present when timing was captured and absent otherwise.

Returns `404` until the transcript exists, which is when the call ends
(the `call.ended` webhook). The transcript is never included on the call
object or in webhook bodies.



## OpenAPI

````yaml api-reference/openapi.json GET /v1/calls/{call_id}/transcript
openapi: 3.1.0
info:
  description: >-
    Programmatic access to Contour from your own backend: place outbound calls,
    read their results, and manage the webhook endpoints that receive signed
    `call.started`, `call.ended` and `call.analyzed` events.
  title: Contour API
  version: '1.0'
servers:
  - url: https://api.contourvoice.com
security:
  - HTTPBearer: []
tags:
  - description: Place outbound calls and read their state, recordings and transcripts.
    name: Calls
  - description: >-
      Register URLs to receive signed events, send test events, and inspect or
      retry deliveries.
    name: Webhook Endpoints
paths:
  /v1/calls/{call_id}/transcript:
    get:
      tags:
        - Calls
      summary: Get a transcript
      description: >-
        What was said on the call, turn by turn.


        Only the agent's and the caller's speech is included; tool calls and
        other

        internal events are not. `turns` is the conversation in order and `text`

        is the same conversation as plain text. Per-turn `started_at` /
        `ended_at`

        are present when timing was captured and absent otherwise.


        Returns `404` until the transcript exists, which is when the call ends

        (the `call.ended` webhook). The transcript is never included on the call

        object or in webhook bodies.
      operationId: get_call_transcript
      parameters:
        - in: path
          name: call_id
          required: true
          schema:
            title: Call Id
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranscriptResponse'
          description: Successful Response
        '401':
          content:
            application/json:
              example:
                detail: Invalid or expired API key
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Missing or invalid API key.
        '404':
          content:
            application/json:
              example:
                detail: No transcript is available for this call.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: No call with this id, or no transcript exists for it yet.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
        - HTTPBearer: []
components:
  schemas:
    TranscriptResponse:
      examples:
        - call_id: 9d2f7a3c-8e4b-4f1d-a6c7-2b3c4d5e6f70
          text: >-
            Customer: Hello?

            Agent: Hi, this is Ava calling from Contour with a critical
            radiology result. Am I speaking with Dr. Johnson?
          turns:
            - ended_at: '2026-09-10T14:03:20Z'
              interrupted: false
              role: user
              started_at: '2026-09-10T14:03:19Z'
              text: Hello?
            - ended_at: '2026-09-10T14:03:27Z'
              interrupted: false
              role: agent
              started_at: '2026-09-10T14:03:20Z'
              text: >-
                Hi, this is Ava calling from Contour with a critical radiology
                result. Am I speaking with Dr. Johnson?
      properties:
        call_id:
          description: The call this transcript belongs to.
          title: Call Id
          type: string
        text:
          description: >-
            The same conversation as plain text, one line per turn, prefixed
            `Agent:` or `Customer:`.
          title: Text
          type: string
        turns:
          description: The conversation in order, one entry per spoken turn.
          items:
            $ref: '#/components/schemas/TranscriptTurn'
          title: Turns
          type: array
      required:
        - call_id
        - turns
        - text
      title: TranscriptResponse
      type: object
    ErrorResponse:
      description: |-
        Every error is wrapped in a `detail` key. Validation and dispatch
        failures carry an object; auth and not-found errors carry a string.
      properties:
        detail:
          anyOf:
            - $ref: '#/components/schemas/ErrorDetail'
            - type: string
          description: An `ErrorDetail` object, or a plain message.
          title: Detail
      required:
        - detail
      title: ErrorResponse
      type: object
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          title: Detail
          type: array
      title: HTTPValidationError
      type: object
    TranscriptTurn:
      description: |-
        One spoken turn. Only agent and caller speech is included; tool calls
        and other internal events are not.
      properties:
        ended_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: When the turn ended. Absent when timing was not captured.
          title: Ended At
        interrupted:
          default: false
          description: True when the agent was cut off before finishing this turn.
          title: Interrupted
          type: boolean
        role:
          description: '`agent` for the voice agent, `user` for the person on the call.'
          enum:
            - agent
            - user
          title: Role
          type: string
        started_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: When the turn began. Absent when timing was not captured.
          title: Started At
        text:
          description: What was said, as transcribed.
          title: Text
          type: string
      required:
        - role
        - text
      title: TranscriptTurn
      type: object
    ErrorDetail:
      description: |-
        Structured error body for validation and dispatch failures on
        `POST /v1/calls`.
      properties:
        call_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            With dispatch failures: the id of the call record that was created
            and marked `failed`.
          title: Call Id
        error:
          description: Human-readable explanation.
          title: Error
          type: string
        error_code:
          description: >-
            Machine-readable code: `agent_not_found`, `agent_not_outbound`,
            `agent_inactive`, `missing_variables`, `from_number_mismatch`,
            `dnc_blocked`, `number_blocked`, `no_outbound_number`,
            `invalid_phone_number`, `missing_call_data`,
            `invalid_transfer_number`, `dispatch_error`, `dispatch_failed`.
          title: Error Code
          type: string
        expected_from_number:
          anyOf:
            - type: string
            - type: 'null'
          description: 'With `from_number_mismatch`: the caller ID to send.'
          title: Expected From Number
        missing_variables:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          description: 'With `missing_variables`: the variable keys to add.'
          title: Missing Variables
      required:
        - error
        - error_code
      title: ErrorDetail
      type: object
    ValidationError:
      properties:
        ctx:
          title: Context
          type: object
        input:
          title: Input
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          title: Location
          type: array
        msg:
          title: Message
          type: string
        type:
          title: Error Type
          type: string
      required:
        - loc
        - msg
        - type
      title: ValidationError
      type: object
  securitySchemes:
    HTTPBearer:
      description: >-
        Your organization's API key (`sk_cont_...`), sent as `Authorization:
        Bearer sk_cont_...`. Keep it server-side.
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.