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

# Get a call

> Fetch one call's full record — transcript, cost, recording, and AI analysis.

<Tip>
  `cost`, `analysis`, and `custom_analysis` populate after the call ends and post-processing finishes.
  Subscribe to [`call.processing.completed`](/developers/webhooks/events#call-processing-completed) to be
  notified when the complete record is ready. `transcript` is always included here (unlike the list).
</Tip>


## OpenAPI

````yaml developers/openapi.json GET /v1/calls/{call_id}
openapi: 3.1.0
info:
  title: Vocily API
  description: >-
    Public REST API for placing outbound voice calls and reading their results.
    Authenticate with a workspace API key as a Bearer token.
  version: v1
servers:
  - url: https://api.vocily.com
    description: Production
security: []
paths:
  /v1/calls/{call_id}:
    get:
      tags:
        - calls
      summary: Get a call
      description: >-
        Fetch one call's full record — transcript, cost, recording link, and AI
        analysis. Cost and analysis populate once the call ends and
        post-processing finishes.
      operationId: get_call_v1_calls__call_id__get
      parameters:
        - name: call_id
          in: path
          required: true
          schema:
            type: string
            title: Call Id
        - name: authorization
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Authorization
        - name: X-Vocily-Workspace
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Vocily-Workspace
        - name: X-Vocily-Org
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Vocily-Org
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicCallRead'
              example:
                id: c7a1e2b3-4d5f-6789-a0b1-c2d3e4f5a6b7
                agent_id: 9b1c3d5e-7a90-4c21-8b6d-2e4f6a8c0d11
                status: completed
                direction: outbound
                from_number: '+911171366867'
                to_number: '+919876543210'
                duration_seconds: 42
                created_at: '2026-08-04T10:00:00.000Z'
                connected_at: '2026-08-04T10:00:05.000Z'
                ended_at: '2026-08-04T10:00:47.000Z'
                metadata:
                  order_id: '88431'
                variables:
                  customer_name: Rahul
                cost:
                  currency: USD
                  total: 0.0554
                  rate_per_min: 0.0792
                analysis:
                  sentiment: positive
                  outcome: booked
                  language: en
                  summary: Customer confirmed the appointment for Friday at 3pm.
                custom_analysis:
                  lead_score: 9
                transcript:
                  turns:
                    - role: assistant
                      text: Hi Rahul, this is Vocily calling about your order.
                    - role: user
                      text: Yes, go ahead.
                recording_url: >-
                  https://api.vocily.com/v1/calls/c7a1e2b3-4d5f-6789-a0b1-c2d3e4f5a6b7/recording
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: unauthorized
                message: Missing or invalid API key.
        '404':
          description: Call not found (a malformed id also returns this).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: call_not_found
                message: Call not found (a malformed id also returns this).
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: Rate limit exceeded — honor Retry-After.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: rate_limited
                message: Rate limit exceeded — honor Retry-After.
      security:
        - bearerAuth: []
components:
  schemas:
    PublicCallRead:
      properties:
        id:
          type: string
          title: Id
        agent_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Agent Id
        status:
          type: string
          title: Status
        direction:
          type: string
          title: Direction
        from_number:
          anyOf:
            - type: string
            - type: 'null'
          title: From Number
        to_number:
          anyOf:
            - type: string
            - type: 'null'
          title: To Number
        duration_seconds:
          anyOf:
            - type: integer
            - type: 'null'
          title: Duration Seconds
        created_at:
          type: string
          format: date-time
          title: Created At
        connected_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Connected At
        ended_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Ended At
        metadata:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Metadata
        variables:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Variables
        cost:
          anyOf:
            - $ref: '#/components/schemas/PublicCost'
            - type: 'null'
        analysis:
          anyOf:
            - $ref: '#/components/schemas/PublicAnalysis'
            - type: 'null'
        custom_analysis:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Custom Analysis
        transcript:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Transcript
        recording_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Recording Url
      type: object
      required:
        - id
        - agent_id
        - status
        - direction
        - from_number
        - to_number
        - duration_seconds
        - created_at
        - connected_at
        - ended_at
        - metadata
        - variables
        - cost
        - analysis
        - custom_analysis
        - transcript
        - recording_url
      title: PublicCallRead
      description: A call, as the public API promises it. Curated — see module docstring.
    ApiError:
      type: object
      properties:
        code:
          type: string
          example: invalid_request
        message:
          type: string
          example: Malformed request parameter.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    PublicCost:
      properties:
        currency:
          type: string
          title: Currency
          default: USD
        total:
          type: number
          title: Total
        rate_per_min:
          anyOf:
            - type: number
            - type: 'null'
          title: Rate Per Min
      type: object
      required:
        - total
      title: PublicCost
      description: >-
        A call's cost, explicitly currency-labeled (the internal `cost_cents` is
        USD-wallet, so a bare

        number is ambiguous — this names the currency). `total` is in major
        units (USD dollars).
    PublicAnalysis:
      properties:
        sentiment:
          anyOf:
            - type: string
            - type: 'null'
          title: Sentiment
        outcome:
          anyOf:
            - type: string
            - type: 'null'
          title: Outcome
        language:
          anyOf:
            - type: string
            - type: 'null'
          title: Language
        summary:
          anyOf:
            - type: string
            - type: 'null'
          title: Summary
      type: object
      title: PublicAnalysis
      description: >-
        The platform AI analysis. **Same shape as the `call.analysis.completed`
        webhook** — see

        `app/webhooks/payload_builders.py::_analysis_object`; keep the two in
        lockstep.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Your API key as a Bearer token, e.g. `Authorization: Bearer vk_…`.'

````