---
title: "Qualification host run identity"
method: GET
path: "/v1/diagnostics/qualification"
tags: ["System"]
---

# Qualification host run identity

`GET /v1/diagnostics/qualification`

## Request

- Base URL: `http://localhost:9998`
- URL: `http://localhost:9998/v1/diagnostics/qualification`
- Auth: HTTP bearer

Read-only, free at every tier. Requires tools:read for authenticated callers and refuses a caller that presents no credential. On an isolated qualification host (a DEBUG launch fixture with a declaration) it reports the observed launch request, host and policy-source instances, loopback endpoint, executable, source inputs and fixture digests, policy generation and section revisions, and the scope's lifetime. Every other ToolPiper answers 404. Nothing in the request selects or shapes the answer.

## Response `200`

The host manifest (version 1)

- QualificationHostManifest: The qualification host's observed run identity (version 1; keys frozen in tests/fixtures/tool-qualification/host-manifest-v1.json).
  - `version` 1, required
  - `launchRequestId` string, required
  - `hostInstanceId` string, required
  - `sourceInstanceId` string, required: The policy store instance whose generation is reported.
  - `endpointURL` string, required: http://127.0.0.1:<port>, the listener's own port.
  - `executableSha256` string, required
  - `sourceInputsSha256` string, required
  - `fixtureSha256` string, required: The sha256 of the canonical-json-v1 bytes of the scope's fixture artifact, which GET /v1/diagnostics/qualification/artifacts serves.
  - `launchDeclarationSha256` string, required: The sha256 of the declaration bytes the launch read; the fixture's id names it too.
  - `generationId` string, required
  - `sectionRevisions` object, required
    - `capabilities` integer, required
    - `permissions` integer, required
    - `delivery` integer, required
  - `lifetime` object, required
    - `id` string, required
    - `startRevision` integer, required
    - `endRevision` integer, required
    - `valid` boolean, required: Always true on a served manifest; a retired scope answers 410.
  - `modes` string[], required
  - `encoder` object, required: The tools encoder the Gate ranks with. A mock host names its deterministic recipe; an artifact host also names the pinned bundle's revision and its verified weights digest.
    - `kind` 'mock' | 'artifact', required
    - `id` string, required
    - `revision` string
    - `weightsSha256` string

## Other responses

- `401`: Authentication required
- `403`: Missing tools:read scope, or a caller with no credential
- `404`: `not_a_qualification_host`: this ToolPiper is not a qualification host
- `410`: `qualification_retired`: the scope was retired and never answers again
- `503`: `qualification_not_ready`: the Gate attempt, resource refresh or a launch identity has not settled

---

[API](https://skmtc.dev/modelpiper/apis/toolpiper-api.md) · [All operations](https://skmtc.dev/modelpiper/apis/toolpiper-api/llms.txt) · [OpenAPI document](https://skmtc.dev/modelpiper/apis/toolpiper-api/revisions/6722bf56385c?raw)
