---
title: "Verify Run"
method: GET
path: "/api/v1/verify/{run_id}"
tags: ["verify"]
---

# Verify Run

`GET /api/v1/verify/{run_id}`

## Request

- Base URL: `https://api.badgeia.com`
- URL: `https://api.badgeia.com/api/v1/verify/{run_id}`
- Auth: none declared

Verify a run's certificate. Public, anonymous, cache-friendly.

Flag-off → 404 explicit (CLAUDE.md rule #4). The fingerprint is
RECOMPUTED server-side from the persisted run fields and the
signature checked against it, so any post-signing mutation of a
signed field reads as `valid: false` (AC-03).

## Path parameters

- `run_id` string, uuid, required

## Response `200`

Successful Response

- VerifyResponse
  - `run_id` string, uuid, required
  - `agent_id` string, uuid, required
  - `state` string, required
  - `valid` boolean, required
  - `execution_mode` string, required
  - `is_simulated` boolean, required
  - `verification_hash` string, nullable, required
  - `signature` string, nullable, required
  - `signed_at` string, nullable, required
  - `key_id` string, nullable, required
  - `task_title` string, nullable, required
  - `task_difficulty` string, nullable, required
  - `agent_name` string, nullable, required
  - `honesty_statement` string, required
  - `state_statement` string, required
  - `reliability_pass_k` object, nullable
  - `reliability_n_runs` integer, nullable
  - `reliability_plain` string, nullable
  - `is_certified` boolean
  - `certified_suite_version` integer, nullable
  - `current_suite_version` integer, nullable
  - `manifest` CertificationManifestProjection
    - `certification_id` string, uuid, required
    - `version` string, required
    - `state` string, required
    - `valid` boolean, required
    - `failure_reason` string, nullable, required
    - `coverage_complete` boolean, required
    - `run_count` integer, nullable, required
    - `task_count` integer, nullable, required
    - `successful_run_count` integer, nullable, required
    - `answer_exposed_run_count` integer, nullable
    - `input_tokens` integer, nullable, required
    - `output_tokens` integer, nullable, required
    - `calculated_cost_usd` number, nullable, required
    - `cost_per_success_usd` number, nullable, required
    - `provider` string, nullable, required
    - `requested_model` string, nullable, required
    - `returned_model` string, nullable, required
    - `pricing_snapshots` ManifestPricingSnapshot[], required
      - `pricing_id` string, uuid, required
      - `model` string, required
      - `provider` string, required
      - `input_cost_per_million` number, required
      - `output_cost_per_million` number, required
      - `effective_date` string, date, required
      - `run_count` integer, required
    - `runs_digest` string, required
    - `manifest_hash` string, required
    - `signature` string, required
    - `signed_at` string, required
    - `key_id` string, required
  - `architecture_version_id` string, uuid, nullable
  - `fingerprint_version` string, nullable
  - `architecture_binding_partial` boolean
  - `cost_basis` string, nullable
  - `answer_exposed` boolean
  - `approval` PublicApproval: The ONLY approval fields an anonymous reader ever sees.
    - `status` 'approved', required
    - `workspace` string, required
    - `decided_at` string, date, nullable, required
    - `blueprint_version_id` string, uuid, nullable, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/badgeia/apis/badge.md) · [All operations](https://skmtc.dev/badgeia/apis/badge/llms.txt) · [OpenAPI document](https://skmtc.dev/badgeia/apis/badge/revisions/7e7f7fee8b77?raw)
