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

# Get test run results

> Pass counts per case and agent, and by agent, tag and category. Available while the run is going, too.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/test_runs/{test_run_id}/results
openapi: 3.1.0
info:
  title: GuidingHand API
  version: 1.0.0
  description: >-
    Create sessions (an invite link with a code for the person at the computer),
    run tasks on their computer with one of your agents, follow them, answer
    their questions and approvals, and fetch history and recordings. Test your
    agents with evals: test cases on fresh machines, run in test sets, scored by
    a check script or a rubric. Agents are versioned (save a draft, publish it),
    have tools (their own file system, and your HTTP endpoints), and every
    change is in the org’s audit log.
servers:
  - url: https://guidinghand.ai
    description: Production
  - url: https://dev.guidinghand.ai
    description: Development (Stripe test mode)
security:
  - bearerAuth: []
tags:
  - name: Agents
  - name: Agent files
  - name: Agent tools
  - name: Sessions
  - name: Tasks
  - name: Webhooks
  - name: Audit log
  - name: Test cases
  - name: Test sets
  - name: Test runs
  - name: Start states
  - name: Runners
paths:
  /v1/test_runs/{test_run_id}/results:
    parameters:
      - name: test_run_id
        in: path
        required: true
        description: The test run’s id (`tr_…`).
        schema:
          type: string
    get:
      tags:
        - Test runs
      summary: Get test run results
      description: >-
        Pass counts per case and agent, and by agent, tag and category.
        Available while the run is going, too.
      operationId: getTestRunResults
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TestRunResults'
        '401':
          $ref: '#/components/responses/E401'
        '404':
          $ref: '#/components/responses/E404'
components:
  schemas:
    TestRunResults:
      type: object
      description: >-
        Counts the last attempt of each (case, agent, try): an error that was
        retried counts as its retry.
      properties:
        data:
          type: array
          description: One row per case and agent.
          items:
            type: object
            properties:
              test_case_id:
                type: string
              key:
                type:
                  - string
                  - 'null'
              name:
                type: string
              category:
                type:
                  - string
                  - 'null'
              tags:
                type: array
                items:
                  type: string
              agent_id:
                type: string
              tries:
                type: integer
              passed:
                type: integer
              failed:
                type: integer
              error:
                type: integer
              all_passed:
                type: boolean
                description: Every try passed.
              median_seconds:
                type:
                  - number
                  - 'null'
                description: Median active time of its finished tries.
              cost_cents:
                type:
                  - integer
                  - 'null'
                description: What its tries cost, together.
        by_agent:
          type: object
          additionalProperties:
            type: object
            properties:
              tries:
                type: integer
              passed:
                type: integer
              pass_rate:
                type:
                  - number
                  - 'null'
        by_tag:
          type: object
          description: Per tag, per agent.
          additionalProperties:
            type: object
            additionalProperties:
              type: object
              properties:
                tries:
                  type: integer
                passed:
                  type: integer
        by_category:
          type: object
          description: Per category, per agent.
          additionalProperties:
            type: object
            additionalProperties:
              type: object
              properties:
                tries:
                  type: integer
                passed:
                  type: integer
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - type
            - message
          properties:
            type:
              type: string
              enum:
                - invalid_request
                - authentication
                - payment_required
                - permission
                - not_found
                - conflict
                - rate_limit
                - server_error
            message:
              type: string
            code:
              type: string
              description: >-
                Why it was refused, when there’s more to say than the status.
                Starting a task: `insufficient_balance`,
                `auto_topup_limit_reached` or `card_needs_attention` (402: the
                balance can’t cover a minute; add funds, raise the auto top-up
                limit, or update the card), `concurrency_limit` (429),
                `model_unavailable` (503: the agent’s `model` can’t run on this
                server; choose another). On `/respond`: `already_answered`
                (someone answered or decided first: see `answered_by`) or
                `not_pending` (that question or approval isn’t open any more).
                The GuidingHand app hears two more, which the API never returns:
                `customer_answers_off` and `customer_approvals_off` (the agent
                keeps its questions or approvals for your team). Deleting a
                start state that test cases use: `in_use` (409, with
                `test_case_ids`).
            answered_by:
              type: string
              enum:
                - customer
                - operator
                - timeout
              description: >-
                With `already_answered`: who answered or decided first
                (`customer`: the person at the computer; `timeout`: nobody
                decided an approval within the agent’s
                `approval_timeout_minutes`, so it was denied).
            test_case_ids:
              type: array
              items:
                type: string
              description: 'With `in_use`: the test cases that use the start state.'
  responses:
    E401:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    E404:
      description: Not found in this org.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: An org API key (`gh_live_…`) from Settings → API keys in the console.

````