> ## 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 test coverage

> SignalMD's test plan and gaps: which calls it would test and why, coverage cells it could not fill, brief lines that get a probe, and tests it would retire. Reads only.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/agents/{agentId}/coverage
openapi: 3.1.0
info:
  title: SignalMD API
  version: 1.0.0
  description: >-
    SignalMD 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://api.signalmd.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 SignalMD 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}/coverage:
    get:
      tags:
        - Tests
      summary: Get test coverage
      description: >-
        SignalMD's test plan and gaps: which calls it would test and why,
        coverage cells it could not fill, brief lines that get a probe, and
        tests it would retire. Reads only.
      operationId: getCoverage
      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
      responses:
        '200':
          description: The plan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Coverage'
        '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://api.signalmd.dev/v1/agents/6f1d2c3b-4a5e-4f60-8b7a-9c0d1e2f3a4b/coverage"
            \
              -H "Authorization: Bearer $SIGNAL_API_KEY"
components:
  schemas:
    Coverage:
      type: object
      properties:
        object:
          type: string
          enum:
            - coverage
        picks:
          type: array
          items:
            type: object
            properties:
              callId:
                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
              issueKey:
                type:
                  - string
                  - 'null'
                description: >-
                  Set for a test of an issue: it carries the issue reversed and
                  expects the defect.
              cells:
                type: array
                items:
                  type: string
                description: The coverage cells it fills, as kind:key.
              existingTestId:
                type:
                  - string
                  - 'null'
                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 stored test that already covers this pick.
            required:
              - callId
              - issueKey
              - cells
              - existingTestId
          description: The calls SignalMD would turn into tests.
        coverage:
          type: array
          items:
            type: object
            properties:
              kind:
                type: string
                enum:
                  - sub_use_case
                  - issue
                  - unsupported
                  - persona
                  - silence
              key:
                type: string
              label:
                type: string
              supported:
                type:
                  - boolean
                  - 'null'
                description: 'Whether the agent was built for it. Null: not a use case.'
              support:
                type:
                  - string
                  - 'null'
              lane:
                type:
                  - string
                  - 'null'
                enum:
                  - hearing
                  - understanding
                  - flow
                  - speaking
                  - integrations
                  - null
                description: >-
                  The lane a defect lives in: hearing, understanding, flow,
                  speaking or integrations.
              calls:
                type: integer
                description: Spoken calls of this kind in the window.
              wanted:
                type: integer
              picked:
                type: integer
                description: >-
                  Calls chosen for this cell. A chosen call is not a test until
                  one is made from it.
              tested:
                type: integer
                description: >-
                  Chosen calls a test already exists for. Only these count
                  toward `status`.
              callIds:
                type: array
                items:
                  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
              reserveCallIds:
                type: array
                items:
                  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: >-
                  An issue's other usable calls, in the order calibration falls
                  back on them.
              status:
                type: string
                enum:
                  - covered
                  - partial
                  - uncovered
              reason:
                type:
                  - string
                  - 'null'
            required:
              - kind
              - key
              - label
              - supported
              - support
              - lane
              - calls
              - wanted
              - picked
              - tested
              - callIds
              - reserveCallIds
              - status
              - reason
        briefLines:
          type: array
          items:
            type: object
            properties:
              section:
                type: string
                enum:
                  - intent
                  - out_of_scope
                  - guardrails
              key:
                type: string
              text:
                type: string
              calls:
                type:
                  - integer
                  - 'null'
                description: >-
                  Spoken calls linked to the line. Null: no stored reading links
                  a call to it.
              probe:
                type: boolean
                description: Whether the line gets a probe test.
              reason:
                type: string
            required:
              - section
              - key
              - text
              - calls
              - probe
              - reason
        excluded:
          type: object
          properties:
            silent:
              type: integer
            scripted:
              type: integer
            unansweredTools:
              type: integer
            outsideWindow:
              type: integer
          required:
            - silent
            - scripted
            - unansweredTools
            - outsideWindow
          description: Calls left out of the plan, by why.
        retire:
          type: array
          items:
            type: object
            properties:
              testId:
                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
              reason:
                type: string
            required:
              - testId
              - reason
          description: Tests the plan would retire.
        totals:
          type: object
          properties:
            tests:
              type: integer
            newTests:
              type: integer
            supportedCovered:
              type: integer
            supportedCells:
              type: integer
            unsupportedCovered:
              type: integer
            unsupportedCells:
              type: integer
          required:
            - tests
            - newTests
            - supportedCovered
            - supportedCells
            - unsupportedCovered
            - unsupportedCells
      required:
        - object
        - picks
        - coverage
        - briefLines
        - excluded
        - retire
        - totals
    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: credits
                  description: >-
                    credits when the workspace's monthly credits are used up, or
                    agents when the plan's agent limit is reached.
                activity:
                  type: string
                  enum:
                    - observation
                    - testing
                    - chat
                  example: testing
                  description: >-
                    With metric credits: what the request would have spent them
                    on. observation is analysing calls, testing is test runs,
                    chat is the copilot.
                requested:
                  type: integer
                  example: 18
                  description: >-
                    With metric credits: the credits the request needed to
                    start.
                limit:
                  type: integer
                  description: 'The plan''s limit: the month''s credits, or its agents.'
                used:
                  type: integer
                  description: How much of the limit is used this month.
                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.
            proposalId:
              type: string
              format: uuid
              description: >-
                Present when code is criteria_locked: the pending criteria
                proposal the change was filed as. A person approves or rejects
                it.
          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
    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.