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

# Get a call

> One call with its analysis, who called and why, and the open issues it is evidence for. The transcript is in the call's trace.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/agents/{agentId}/calls/{callId}
openapi: 3.1.0
info:
  title: Signal API
  version: 1.0.0
  description: >-
    Signal reads a voice agent's production calls and says what to fix, then
    tests whether the fix worked.

    This API exposes the same data the web app shows: agents, calls and their
    traces, signals, issues,

    versions and their comparisons, tests, and test runs.


    Authenticate with `Authorization: Bearer sig_...` (an API key from the API
    keys page). Read keys may

    call every `read` operation; write keys may also call `write` operations,
    within their monthly budget.

    Each operation's scope is in `x-signal-scope`. Errors share one envelope
    (`Error`), lists share one

    cursor scheme (`limit`, `cursor`, `hasMore`, `nextCursor`), and every
    response carries `Request-Id`

    and `RateLimit-*` headers.
servers:
  - url: https://first-signal-api.fly.dev
    description: Production
  - url: http://localhost:43124
    description: Local development
security:
  - bearerAuth: []
tags:
  - name: Account
    description: Who the token belongs to and what it may do.
  - name: Agents
    description: Voice agents connected to the workspace.
  - name: Calls
    description: Production calls, their traces and per-call signals.
  - name: Signals
    description: What Signal noticed across calls.
  - name: Issues
    description: 'Problems worth fixing: where, why, and what to change.'
  - name: Versions
    description: Agent versions and how each one did.
  - name: Comparisons
    description: Stored comparisons between two versions.
  - name: Tests
    description: Tests, test sets, personas and coverage.
  - name: Runs
    description: Test runs and the attempts inside them.
paths:
  /v1/agents/{agentId}/calls/{callId}:
    get:
      tags:
        - Calls
      summary: Get a call
      description: >-
        One call with its analysis, who called and why, and the open issues it
        is evidence for. The transcript is in the call's trace.
      operationId: getCall
      parameters:
        - schema:
            type: string
            format: uuid
            pattern: >-
              ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$
            example: 3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f
            description: The agent's id.
          required: true
          description: The agent's id.
          name: agentId
          in: path
        - schema:
            type: string
            format: uuid
            description: The call's id in Signal (not the platform's call id).
          required: true
          description: The call's id in Signal (not the platform's call id).
          name: callId
          in: path
      responses:
        '200':
          description: The call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Call'
        '400':
          description: 'Invalid request: a parameter or the body failed validation.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing, invalid or revoked credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Not permitted for this principal.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            The agent, or a resource under it, does not exist or is not visible
            to this key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited. See Retry-After.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Server error. The message is generic; quote the request id.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-codeSamples:
        - lang: bash
          label: curl
          source: >-
            curl
            "https://first-signal-api.fly.dev/v1/agents/6f1d2c3b-4a5e-4f60-8b7a-9c0d1e2f3a4b/calls/0b9e8d7c-6f5a-4b3c-9d2e-1f0a9b8c7d6e"
            \
              -H "Authorization: Bearer $SIGNAL_API_KEY"
components:
  schemas:
    Call:
      allOf:
        - $ref: '#/components/schemas/CallSummary'
        - type: object
          properties:
            analysis:
              type:
                - object
                - 'null'
              properties:
                intentConfidence:
                  type: number
                  description: 0 to 1.
                objectiveFulfilled:
                  type:
                    - boolean
                    - 'null'
                  description: >-
                    Whether the caller got what they came for. Null when it
                    could not be judged.
                fulfillmentConfidence:
                  type: number
                  description: 0 to 1.
                reasoning:
                  type:
                    - string
                    - 'null'
                  description: Why the outcome was read as it was.
                source:
                  type: string
                  description: >-
                    Which reading produced this analysis. For information only;
                    do not branch on it.
                analyzedAt:
                  type: string
                  format: date-time
                  example: '2026-10-02T14:03:07.120Z'
                frictions:
                  type: array
                  items:
                    type: object
                    properties:
                      type:
                        type: string
                        description: >-
                          A signal code, or a kind the analysis named.
                          `checklist.*` types are readings of what was said, not
                          measurements.
                      label:
                        type: string
                      klass:
                        type: string
                        enum:
                          - technical
                          - flow
                          - content
                          - behaviour
                        description: >-
                          Which kind of fix it points at: `technical` (an
                          engineer), `flow` (whoever owns the conversation
                          design), `content` (whoever owns prompts and
                          knowledge), or `behaviour` (something callers do that
                          is worth knowing but is not a defect).
                      confidence:
                        type: number
                        description: 0 to 1.
                      location:
                        type: object
                        properties:
                          kind:
                            type: string
                            enum:
                              - node
                              - edge
                              - tool
                              - global
                            description: >-
                              A step of the flow, a transition between two
                              steps, a tool, or the whole call.
                          id:
                            type: string
                            description: >-
                              The step id, `from->to` for a transition, the tool
                              name, or `global`.
                          label:
                            type: string
                            description: How the place reads to a person.
                        required:
                          - kind
                          - id
                          - label
                      cause:
                        type:
                          - object
                          - 'null'
                        properties:
                          code:
                            type: string
                            description: Stable key for the cause.
                          label:
                            type: string
                            description: How the cause reads to a person.
                          detail:
                            type:
                              - string
                              - 'null'
                            description: What in the trace says so.
                        required:
                          - code
                          - label
                          - detail
                        description: >-
                          Why it happened, read from what the trace shows around
                          it. Null when no cause was read.
                      turnIndex:
                        type:
                          - integer
                          - 'null'
                        description: >-
                          The turn it is about, an index into the trace's
                          `turns`.
                      quote:
                        type:
                          - string
                          - 'null'
                      explanation:
                        type: string
                    required:
                      - type
                      - label
                      - klass
                      - confidence
                      - location
                      - cause
                      - turnIndex
                      - quote
                      - explanation
                  description: >-
                    What the analysis noticed on the call, above `info`
                    severity. Symptoms, not diagnosed issues; `issues` lists the
                    issues this call is evidence for.
              required:
                - intentConfidence
                - objectiveFulfilled
                - fulfillmentConfidence
                - reasoning
                - source
                - analyzedAt
                - frictions
              description: The call's analysis. Null until the call is analysed.
            alsoAsked:
              type: array
              items:
                type: object
                properties:
                  slug:
                    type: string
                  label:
                    type: string
                  coverage:
                    type:
                      - string
                      - 'null'
                    enum:
                      - designed
                      - out_of_scope
                      - no_instructions
                      - not_established
                      - null
                    description: >-
                      Whether the agent was built for this use case: `designed`,
                      `out_of_scope` (it says it does not handle it),
                      `no_instructions` (nothing in its design covers it), or
                      `not_established` (it could not be settled). Null when not
                      checked.
                required:
                  - slug
                  - label
                  - coverage
              description: Use cases the caller asked for besides `useCase`.
            traits:
              type: array
              items:
                type: object
                properties:
                  slug:
                    type: string
                  label:
                    type: string
                  trait:
                    type: string
                    enum:
                      - customer_type
                      - demeanour
                      - speech
                      - surroundings
                      - language
                required:
                  - slug
                  - label
                  - trait
              description: >-
                The caller's traits as classified: who they are to the business,
                demeanour, speech, surroundings, language.
            coverage:
              type: object
              properties:
                useCase:
                  type:
                    - string
                    - 'null'
                  enum:
                    - designed
                    - out_of_scope
                    - no_instructions
                    - not_established
                    - null
                  description: >-
                    Whether the agent was built for this use case: `designed`,
                    `out_of_scope` (it says it does not handle it),
                    `no_instructions` (nothing in its design covers it), or
                    `not_established` (it could not be settled). Null when not
                    checked.
                subUseCase:
                  type:
                    - string
                    - 'null'
                  enum:
                    - designed
                    - out_of_scope
                    - no_instructions
                    - not_established
                    - null
                  description: >-
                    Whether the agent was built for this use case: `designed`,
                    `out_of_scope` (it says it does not handle it),
                    `no_instructions` (nothing in its design covers it), or
                    `not_established` (it could not be settled). Null when not
                    checked.
              required:
                - useCase
                - subUseCase
              description: Whether the agent was built for what this caller wanted.
            audio:
              type:
                - object
                - 'null'
              properties:
                noiseDb:
                  type: number
                  description: >-
                    Median level of the caller's channel outside their turns, in
                    dBFS.
                speechDb:
                  type:
                    - number
                    - 'null'
                  description: >-
                    Loud end of the caller's channel inside their turns, in
                    dBFS.
                snrDb:
                  type:
                    - number
                    - 'null'
                  description: '`speechDb - noiseDb`.'
              required:
                - noiseDb
                - speechDb
                - snrDb
              description: >-
                What the recording measured on the caller's side. Null when it
                was not read.
            issues:
              type: array
              items:
                $ref: '#/components/schemas/CallIssue'
              description: >-
                Open issues this call is evidence for, highest priority first.
                Resolved and withdrawn issues are left out.
          required:
            - analysis
            - alsoAsked
            - traits
            - coverage
            - audio
            - issues
      example:
        object: call
        id: 0b9e8d7c-6f5a-4b3c-9d2e-1f0a9b8c7d6e
        providerCallId: call_5e0c2b7a91d34f6e8a1b
        version: 8
        startedAt: '2026-10-01T15:42:05.000Z'
        endedAt: '2026-10-01T15:44:51.000Z'
        durationMs: 166000
        direction: inbound
        disconnectionReason: user_hangup
        outcome: abandoned
        objective: Book a cleaning for next week
        intent:
          slug: book_appointment
          label: Book appointment
        useCase:
          slug: scheduling
          label: Scheduling
        subUseCase:
          slug: new_booking
          label: New booking
        callerPersona:
          slug: hurried-returning-patient
          label: Hurried returning patient
        caller:
          kind: repeat
          nth: 2
          of: 3
        counts:
          turns: 24
          callerTurns: 12
          agentTurns: 12
          toolFailures: 1
          frictions: 2
        signalCodes:
          - tool_timeout
          - dead_air
        analysis:
          intentConfidence: 0.94
          objectiveFulfilled: false
          fulfillmentConfidence: 0.81
          reasoning: >-
            The caller asked for a cleaning next week; the availability lookup
            did not answer and the caller hung up before a time was offered.
          source: llm
          analyzedAt: '2026-10-01T15:47:30.000Z'
          frictions: []
        alsoAsked:
          - slug: insurance_question
            label: Insurance question
            coverage: designed
        traits:
          - slug: in_a_hurry
            label: In a hurry
            trait: demeanour
        coverage:
          useCase: designed
          subUseCase: designed
        audio:
          noiseDb: -58.2
          speechDb: -21.4
          snrDb: 36.8
        issues:
          - object: issue
            id: a2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d
            key: tool_timeout:check_availability
            title: The agent did not reply in Book appointment
            status: discovered
            klass: technical
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              $ref: '#/components/schemas/ErrorType'
            code:
              type: string
              example: agent_not_found
              description: The specific reason; stable within v1.
            message:
              type: string
              example: Agent not found.
            param:
              type:
                - string
                - 'null'
              description: The request field at fault, for a validation error.
            requestId:
              type:
                - string
                - 'null'
              example: req_8c1f0e2b4a6d9e3f7a5c1b0d
            quota:
              type: object
              properties:
                metric:
                  type: string
                  example: test_calls
                  description: analysed_calls, agents, copilot_messages or test_calls.
                limit:
                  type: integer
                used:
                  type: integer
                plan:
                  type: string
                  example: free_org
                  description: The workspace's plan slug.
                upgradePath:
                  type: string
                  example: /billing
                  description: Where in the web app the plan is changed.
              required:
                - metric
                - limit
                - used
                - plan
                - upgradePath
              description: >-
                Present when code is quota_exceeded: the plan limit the request
                would pass.
          required:
            - type
            - code
            - message
            - param
            - requestId
      required:
        - error
      example:
        error:
          type: not_found_error
          code: agent_not_found
          message: Agent not found.
          param: null
          requestId: req_8c1f0e2b4a6d9e3f7a5c1b0d
    CallSummary:
      type: object
      properties:
        object:
          type: string
          enum:
            - call
        id:
          type: string
          format: uuid
          pattern: >-
            ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$
          example: 3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f
          description: The call's id in Signal.
        providerCallId:
          type: string
          description: >-
            The call's id on the voice platform. Unique within an agent, not
            across agents.
        version:
          type:
            - integer
            - 'null'
          description: The agent version that took the call.
        startedAt:
          type:
            - string
            - 'null'
          format: date-time
          example: '2026-10-02T14:03:07.120Z'
        endedAt:
          type:
            - string
            - 'null'
          format: date-time
          example: '2026-10-02T14:03:07.120Z'
        durationMs:
          type:
            - integer
            - 'null'
        direction:
          type:
            - string
            - 'null'
          description: '`inbound` or `outbound`, as the platform reports it.'
        disconnectionReason:
          type:
            - string
            - 'null'
          description: >-
            Why the call ended, in the platform's words (`user_hangup`,
            `agent_hangup`, ...).
        outcome:
          type:
            - string
            - 'null'
          enum:
            - resolved
            - unresolved
            - transferred
            - abandoned
            - no_contact
            - null
          description: How the call ended for the caller. Null until the call is analysed.
        objective:
          type:
            - string
            - 'null'
          description: >-
            One line, in the caller's terms, of what they were trying to do.
            Null until analysed.
        intent:
          type:
            - object
            - 'null'
          properties:
            slug:
              type: string
            label:
              type: string
          required:
            - slug
            - label
          description: The intent the analysis gave the call. Null until analysed.
        useCase:
          type:
            - object
            - 'null'
          properties:
            slug:
              type: string
            label:
              type: string
          required:
            - slug
            - label
          description: >-
            What the caller wanted, from the use case classification. Null when
            not classified.
        subUseCase:
          type:
            - object
            - 'null'
          properties:
            slug:
              type: string
            label:
              type: string
          required:
            - slug
            - label
          description: The narrower use case under `useCase`, when there is one.
        callerPersona:
          type:
            - object
            - 'null'
          properties:
            slug:
              type: string
            label:
              type: string
          required:
            - slug
            - label
          description: The kind of caller the call was read as. Null when not classified.
        caller:
          type: object
          properties:
            kind:
              type: string
              enum:
                - test
                - automated
                - silent
                - repeat
                - new
              description: >-
                Who called, from facts alone. `test`: a line the agent's own
                team tests it from; such a call counts in no issue. `automated`:
                another company's AI agent. `silent`: nobody on the caller's
                side spoke. `repeat`: a number that called this agent more than
                once. `new`: none of these.
            nth:
              type:
                - integer
                - 'null'
              description: >-
                For `repeat`: which of that number's calls this is, oldest
                first.
            of:
              type:
                - integer
                - 'null'
              description: 'For `repeat`: how many calls that number made to this agent.'
          required:
            - kind
            - nth
            - of
          description: >-
            Who called, from facts alone. The phone number itself is never
            returned.
        counts:
          type: object
          properties:
            turns:
              type:
                - integer
                - 'null'
              description: Turns in the transcript. Null when the call has no trace.
            callerTurns:
              type:
                - integer
                - 'null'
            agentTurns:
              type:
                - integer
                - 'null'
            toolFailures:
              type:
                - integer
                - 'null'
              description: >-
                Tool calls that failed. A tool that ended the call is not a
                failure.
            frictions:
              type:
                - integer
                - 'null'
              description: >-
                Points of friction the analysis recorded (see the call's
                `analysis.frictions`). Null until analysed.
          required:
            - turns
            - callerTurns
            - agentTurns
            - toolFailures
            - frictions
        signalCodes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: >-
            Codes of the signals detected on the call, sorted. A signal is a
            symptom noticed on a call, not a diagnosed issue; what to fix is on
            the issues. Null until analysed, empty when nothing was noticed.
      required:
        - object
        - id
        - providerCallId
        - version
        - startedAt
        - endedAt
        - durationMs
        - direction
        - disconnectionReason
        - outcome
        - objective
        - intent
        - useCase
        - subUseCase
        - callerPersona
        - caller
        - counts
        - signalCodes
      example:
        object: call
        id: 0b9e8d7c-6f5a-4b3c-9d2e-1f0a9b8c7d6e
        providerCallId: call_5e0c2b7a91d34f6e8a1b
        version: 8
        startedAt: '2026-10-01T15:42:05.000Z'
        endedAt: '2026-10-01T15:44:51.000Z'
        durationMs: 166000
        direction: inbound
        disconnectionReason: user_hangup
        outcome: abandoned
        objective: Book a cleaning for next week
        intent:
          slug: book_appointment
          label: Book appointment
        useCase:
          slug: scheduling
          label: Scheduling
        subUseCase:
          slug: new_booking
          label: New booking
        callerPersona:
          slug: hurried-returning-patient
          label: Hurried returning patient
        caller:
          kind: repeat
          nth: 2
          of: 3
        counts:
          turns: 24
          callerTurns: 12
          agentTurns: 12
          toolFailures: 1
          frictions: 2
        signalCodes:
          - tool_timeout
          - dead_air
    CallIssue:
      type: object
      properties:
        object:
          type: string
          enum:
            - issue
        id:
          type: string
          format: uuid
          pattern: >-
            ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$
          example: 3f1c2d4e-5a6b-4c7d-8e9f-0a1b2c3d4e5f
        key:
          type: string
          description: The issue's stable key; tests take an issue by it.
        title:
          type: string
        status:
          type: string
          description: >-
            `discovered`, `investigating`, `fix_deployed`, `measuring` or
            `regressed`.
        klass:
          type: string
          enum:
            - technical
            - flow
            - content
            - behaviour
          description: >-
            Which kind of fix it points at: `technical` (an engineer), `flow`
            (whoever owns the conversation design), `content` (whoever owns
            prompts and knowledge), or `behaviour` (something callers do that is
            worth knowing but is not a defect).
      required:
        - object
        - id
        - key
        - title
        - status
        - klass
    ErrorType:
      type: string
      enum:
        - invalid_request_error
        - authentication_error
        - budget_error
        - permission_error
        - not_found_error
        - conflict_error
        - rate_limit_error
        - api_error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: An API key (`sig_...`), or a session token from the web app.

````

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