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

# Get conversation metrics

> Returns the quality and cost figures of a conversation: LLM token usage, the number of tool calls and turns, the median end-to-end reply latency, and whether the call was judged resolved. Every field is null until the figures have been recorded (shortly after the call ends), and stays null for calls made before metrics were captured.



## OpenAPI

````yaml api-reference/voice-openapi.json GET /v1/projects/{projectId}/conversations/{id}/metrics
openapi: 3.0.3
info:
  title: Clarity Voice API
  version: '1.0'
  description: >-
    Voice agents and their tools, outbound calls, conversations, campaigns,
    telephony, and evals.
servers:
  - url: https://voice-api.onclarity.com
security:
  - organizationApiKey: []
tags:
  - name: Projects
    description: >-
      The projects your organization owns. Every other resource lives in a
      project.
  - name: Agents
    description: Create, configure, version and publish voice agents.
  - name: Outbound calls
    description: Have a published agent phone a number now.
  - name: Conversations
    description: >-
      One record per call session, with its calls, recordings, transcripts and
      artifacts.
  - name: Calls
    description: The calls of a project, with their status, direction, timing and outcome.
  - name: Campaigns
    description: Outbound calling campaigns that phone a list of numbers on a schedule.
  - name: Eval suites
    description: >-
      Reusable sets of eval scenarios and test cases to measure an agent
      against.
  - name: Eval judges
    description: The LLM judges that score eval calls against your test cases.
  - name: Eval scenarios
    description: The simulated-caller scenarios of your eval suites.
  - name: Eval test cases
    description: The checks a judge applies to each eval call.
  - name: Eval submissions
    description: Run an eval suite against an agent and read the verdicts.
  - name: Phone numbers
    description: >-
      The phone numbers of a project, where their calls come from, and how
      agents call out from them.
  - name: Inbound SIP trunks
    description: Bring calls from your own SIP infrastructure to Clarity agents.
  - name: Outbound SIP trunks
    description: >-
      The SIP endpoints Clarity dials through for outbound calls from your
      numbers.
  - name: Tools
    description: The tools agents call during a conversation, and which agents use them.
paths:
  /v1/projects/{projectId}/conversations/{id}/metrics:
    parameters:
      - $ref: '#/components/parameters/ProjectIdPath'
      - $ref: '#/components/parameters/ConversationId'
    get:
      tags:
        - Conversations
      summary: Get conversation metrics
      description: >-
        Returns the quality and cost figures of a conversation: LLM token usage,
        the number of tool calls and turns, the median end-to-end reply latency,
        and whether the call was judged resolved. Every field is null until the
        figures have been recorded (shortly after the call ends), and stays null
        for calls made before metrics were captured.
      operationId: getConversationMetrics
      responses:
        '200':
          description: The conversation's metrics.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConversationMetrics'
              example:
                total_tokens: 18452
                prompt_tokens: 17210
                completion_tokens: 1242
                cached_tokens: 12800
                tool_call_count: 3
                e2e_median_latency_ms: 1180
                num_turns: 9
                resolution_state: resolved
                resolution_reason: The caller's appointment was moved to Thursday at 10:00.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: >-
            The project or conversation does not exist, or your key cannot reach
            it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Conversation not found
components:
  parameters:
    ProjectIdPath:
      name: projectId
      in: path
      required: true
      schema:
        type: string
      description: Project id
    ConversationId:
      name: id
      in: path
      required: true
      schema:
        type: string
      description: Conversation id
  schemas:
    ConversationMetrics:
      type: object
      description: Quality and cost figures of one conversation. Null means not recorded.
      properties:
        total_tokens:
          type: integer
          nullable: true
          description: LLM tokens used, input plus output.
        prompt_tokens:
          type: integer
          nullable: true
          description: LLM input tokens.
        completion_tokens:
          type: integer
          nullable: true
          description: LLM output tokens.
        cached_tokens:
          type: integer
          nullable: true
          description: Input tokens served from the provider's prompt cache.
        tool_call_count:
          type: integer
          nullable: true
          description: Number of tool calls the agent made.
        e2e_median_latency_ms:
          type: integer
          nullable: true
          description: >-
            Median time, in milliseconds, from the end of the caller's speech to
            the start of the agent's reply. Replies slower than 10 seconds are
            left out as broken.
        num_turns:
          type: integer
          nullable: true
          description: Number of conversation turns.
        resolution_state:
          type: string
          nullable: true
          description: >-
            The resolution verdict: `resolved`, `unresolved`, `pending` or
            `not_applicable`.
        resolution_reason:
          type: string
          nullable: true
          description: Why the call was judged that way.
    Error:
      type: object
      required:
        - error
      additionalProperties: true
      properties:
        error:
          type: string
          description: Error message
        code:
          type: string
          description: >-
            A stable machine-readable reason, present on the refusals a client
            may branch on. Among them: `PUBLISH_CAPABILITY_REQUIRED` (403, the
            credential may not change what is live), `AGENT_NOT_PUBLISHED` (409,
            the agent has no published version yet),
            `AGENT_TYPE_NOT_DISPATCHABLE` (422, a Voice Assist agent named where
            an agent must place a call or answer one itself — a campaign, an
            outbound caller ID, a dispatched call, an eval; a number's inbound
            dispatch rule accepts one; the body carries `agent_type` and
            `agent_id`), `ASSIST_FLEET_NOT_CONFIGURED` (422 on a dispatch rule
            naming a Voice Assist agent in a project whose LiveKit has no Voice
            Assist listener), `NOT_APPLICABLE_TO_AGENT_TYPE` (422, a voice-only
            setting written on a Voice Assist agent), `AGENT_TYPE_BOUNDARY`
            (409), `AGENT_TYPE_NOT_SUPPORTED` (400), `INVALID_CUSTOMER_TIMEZONE`
            (400, `customer_timezone` is not a time zone name; the body carries
            the value), `VOICE_ASSISTANT_REQUIRED` (403, the organization is not
            licensed for Voice Assist), `ORGANIZATION_UNAVAILABLE` (503),
            `REGION_PROFILE_CONFLICT` (503), `LLM_SERVICE_TIER_UNAVAILABLE`
            (422, an agent's processing speed is not offered by its model or not
            enabled for the organization; `reason` says which) and
            `AUTH_UPSTREAM_UNAVAILABLE` (503 on any endpoint, with
            `Retry-After`: the credential could not be checked right now; it was
            not rejected and the request was not carried out).
  responses:
    Unauthorized:
      description: >-
        No credential was sent, or the API key is invalid or revoked. A key that
        could not be checked at all answers 503 `AUTH_UPSTREAM_UNAVAILABLE`
        instead (see Errors).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Invalid or revoked token
    Forbidden:
      description: >-
        The credential carries no access to this project, or the operation needs
        administrative rights
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    organizationApiKey:
      type: http
      scheme: bearer
      description: >-
        Your organization API key (it starts with `anek_org_`). The same key
        works on the Voice API and the Support API. See
        [Authentication](/authentication).

````

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