---
title: "Classification Provenance"
method: GET
path: "/api/v1/gm/classification-provenance"
tags: ["gm", "gm"]
---

# Classification Provenance

`GET /api/v1/gm/classification-provenance`

## Request

- Base URL: `https://app.goodleads.club` (the document declares no server; this is the origin it was published from)
- URL: `https://app.goodleads.club/api/v1/gm/classification-provenance`
- Auth: API key in header `X-API-Key`

Read-only diagnostic: entities whose industry_sector was stamped by a
given classification method — default 'llm_classify', the paid LLM second
pass. Built for vendor bake-offs: pull the exact records a prior LLM model
already classified, replay them through a candidate model, and measure
agreement against what's on file — instead of eyeballing a fresh sample
with no reference answer. Modeled on agents/services/llm_distill.py's
`_pull_llm_wins` query (same join, same method filter).

Caveat: entity_attribute.method records WHICH STAGE produced a result
('llm_classify' vs 'classification_service'), not which specific model
version was live when it ran — that isn't persisted per-row. This
identifies "the LLM stage decided this", not a pinned model ID.

No vendor spend, no writes — gated to ADMIN/READ_ONLY like every other
full-fidelity read (see backend/auth.py::require_export_key).

## Query parameters

- `state` string, required: Two-letter state code
- `method` string: entity_attribute.method to filter on (e.g. llm_classify, classification_service)
- `limit` integer

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/goodleads/apis/formation-gtm-api.md) · [All operations](https://skmtc.dev/goodleads/apis/formation-gtm-api/llms.txt) · [OpenAPI document](https://skmtc.dev/goodleads/apis/formation-gtm-api/revisions/2068d13a82cf?raw)
