> ## 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 call

> The call object as of now.

This is the same object every webhook carries, so you can poll it instead
of, or in addition to, receiving events. `analysis` is null until the call
has been analyzed. The transcript is never included.



## OpenAPI

````yaml api-reference/openapi.json GET /v1/calls/{call_id}
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 and recordings.
    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}:
    get:
      tags:
        - Calls
      summary: Get a call
      description: >-
        The call object as of now.


        This is the same object every webhook carries, so you can poll it
        instead

        of, or in addition to, receiving events. `analysis` is null until the
        call

        has been analyzed. The transcript is never included.
      operationId: get_call
      parameters:
        - in: path
          name: call_id
          required: true
          schema:
            title: Call Id
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallObject'
          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: Call not found.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: No call with this id in your organization.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
        - HTTPBearer: []
components:
  schemas:
    CallObject:
      description: The ``call`` object in every event and in ``GET /v1/calls/{id}``.
      examples:
        - agent_id: 3f1c1b2e-6d1a-4c0e-9b2f-1a2b3c4d5e6f
          analysis:
            extracted_data:
              appointment_confirmed: true
            summary: Jane confirmed her appointment for the 15th.
          call_id: 9d2f7a3c-8e4b-4f1d-a6c7-2b3c4d5e6f70
          direction: outbound
          disconnection_reason: agent_hangup
          disposition: answered
          duration_ms: 84000
          ended_at: '2026-09-10T14:04:35+00:00'
          from_number: '+15555550199'
          metadata:
            your_order_id: ORD-8812
          recording_url: >-
            https://storage.googleapis.com/.../recording.mp3?X-Goog-Signature=...
          source: api
          started_at: '2026-09-10T14:03:11+00:00'
          status: ended
          to_number: '+15555550100'
          variables:
            patient_name: Jane Doe
      properties:
        agent_id:
          anyOf:
            - type: string
            - type: 'null'
          description: The agent that handled the call.
          title: Agent Id
        analysis:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          description: >-
            Null until `call.analyzed`. Then `summary` (text) and
            `extracted_data` (the fields configured on your agent).
          title: Analysis
        call_id:
          description: Stable id for the life of the call.
          title: Call Id
          type: string
        direction:
          description: '`outbound` or `inbound`.'
          title: Direction
          type: string
        disconnection_reason:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Why the call ended, for example `agent_hangup`, `user_hangup`,
            `voicemail`, `no_answer`, `max_duration`.
          title: Disconnection Reason
        disposition:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            What happened on the wire: `answered`, `answering_machine`,
            `no_answer`, `busy`, `rejected`, `unreachable`, `invalid_number`,
            `carrier_failure`. Null until the call ends.
          title: Disposition
        duration_ms:
          anyOf:
            - type: integer
            - type: 'null'
          description: Call length in milliseconds.
          title: Duration Ms
        ended_at:
          anyOf:
            - type: string
            - type: 'null'
          description: ISO 8601 timestamp. Null until the call ends.
          title: Ended At
        from_number:
          anyOf:
            - type: string
            - type: 'null'
          description: The caller ID.
          title: From Number
        metadata:
          additionalProperties: true
          description: Your metadata, echoed back untouched.
          title: Metadata
          type: object
        recording_url:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Presigned link to the recording. Expires after about an hour; null
            until the recording is available. Use `GET
            /v1/calls/{call_id}/recording` for a fresh one.
          title: Recording Url
        source:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            `api` for calls you created. Other values mean the call was started
            from the Contour dashboard or another channel.
          title: Source
        started_at:
          anyOf:
            - type: string
            - type: 'null'
          description: ISO 8601 timestamp.
          title: Started At
        status:
          description: >-
            `queued` → `in_progress` → `ended`, or `failed` if the call never
            went out.
          title: Status
          type: string
        to_number:
          anyOf:
            - type: string
            - type: 'null'
          description: The number dialed.
          title: To Number
        variables:
          additionalProperties: true
          description: The variables the call was created with.
          title: Variables
          type: object
      required:
        - call_id
        - status
        - direction
      title: CallObject
      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
    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`, `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

````