Internal Lab

API Coverage & Reviewer Workflows

This is the internal research hub. It maps every backend API route to its frontend coverage status and links to the reviewer workflows. These tools are for authorized reviewers and developers only — they are not product surfaces.

Boundary: Cohort product pages live under /issuers/* and /evidence/* and consume only the sanitized /api/issuers/* contract. Internal /api/internal/research/* endpoints must never appear in cohort pages.

API Coverage Matrix

covered— a UI page or action calls this endpointhidden— endpoint exists but is intentionally not exposed as a pageloader— a loader function exists but no page calls it yet

System

MethodAPI RouteStatusUI RouteReason
GET/api/healthhiddenSystem health probe; no user-facing page

Contract-wins reads

MethodAPI RouteStatusUI RouteReason
GET/api/internal/research/contract-wins/runscovered/research/contract-winsRun list displayed on contract-wins reviewer page
GET/api/internal/research/contract-wins/runs/{experiment_id}covered/research/contract-winsRun detail shown on reviewer page
GET/api/internal/research/contract-wins/evidence-bundles/{evidence_bundle_id:path}covered/research/contract-winsEvidence bundle view on reviewer page
GET/api/internal/research/contract-wins/verificationcovered/research/contract-winsVerification summary on reviewer page
GET/api/internal/research/contract-wins/processescovered/research/contract-winsProcess listing on reviewer page
GET/api/internal/research/contract-wins/processes/{process_id}hiddenProcess rows are listed on the reviewer page; no separate process detail route is exposed
GET/api/internal/research/contract-wins/snapshotscovered/research/contract-winsSnapshot listing on reviewer page
GET/api/internal/research/contract-wins/snapshots/{snapshot_id}hiddenSnapshot rows are listed on the reviewer page; no separate snapshot detail route is exposed
GET/api/internal/research/contract-wins/review-packscovered/research/contract-winsReview packs on reviewer page
GET/api/internal/research/contract-wins/review-packs/{promotion_review_pack_id}hiddenReview packs are listed on the reviewer page; no separate review-pack detail route is exposed

Contract-wins actions

MethodAPI RouteStatusUI RouteReason
POST/api/internal/research/contract-wins/review-packs/{promotion_review_pack_id}/signoffcovered/research/contract-winsSignoff action on reviewer page

Issuer-resolution reads

MethodAPI RouteStatusUI RouteReason
GET/api/internal/research/issuer-resolution/queuecovered/research/issuer-resolutionResolution queue on issuer-resolution page
GET/api/internal/research/issuer-resolution/items/{source_id}/{issuer_group_id}covered/research/issuer-resolutionResolution item detail

Issuer-resolution actions

MethodAPI RouteStatusUI RouteReason
POST/api/internal/research/issuer-resolution/items/{source_id}/{issuer_group_id}/refreshcovered/research/issuer-resolutionRefresh action on issuer-resolution page
POST/api/internal/research/issuer-resolution/items/{source_id}/{issuer_group_id}/approvecovered/research/issuer-resolutionApprove action on issuer-resolution page
POST/api/internal/research/issuer-resolution/items/{source_id}/{issuer_group_id}/supersedecovered/research/issuer-resolutionSupersede action on issuer-resolution page
POST/api/internal/research/issuer-resolution/items/{source_id}/{issuer_group_id}/rejectcovered/research/issuer-resolutionReject action on issuer-resolution page
POST/api/internal/research/issuer-resolution/items/{source_id}/{issuer_group_id}/mark-no-safe-matchcovered/research/issuer-resolutionMark-no-safe-match action
POST/api/internal/research/issuer-resolution/items/{source_id}/{issuer_group_id}/reopencovered/research/issuer-resolutionReopen action on issuer-resolution page

Supplier-mapping reads

MethodAPI RouteStatusUI RouteReason
GET/api/internal/research/issuer-resolution/supplier-mappings/queuecovered/research/issuer-resolutionSupplier mapping queue on issuer-resolution page
GET/api/internal/research/issuer-resolution/supplier-mappings/items/{supplier_mapping_id}covered/research/issuer-resolutionSupplier mapping item detail

Supplier-mapping actions

MethodAPI RouteStatusUI RouteReason
POST/api/internal/research/issuer-resolution/supplier-mappings/items/{supplier_mapping_id}/approvecovered/research/issuer-resolutionApprove supplier mapping action
POST/api/internal/research/issuer-resolution/supplier-mappings/items/{supplier_mapping_id}/rejectcovered/research/issuer-resolutionReject supplier mapping action
POST/api/internal/research/issuer-resolution/supplier-mappings/items/{supplier_mapping_id}/mark-no-safe-matchcovered/research/issuer-resolutionMark-no-safe-match for supplier mapping
POST/api/internal/research/issuer-resolution/supplier-mappings/items/{supplier_mapping_id}/reopencovered/research/issuer-resolutionReopen supplier mapping action

Issuer-lifecycle internal

MethodAPI RouteStatusUI RouteReason
GET/api/internal/research/issuer-lifecycle/issuershiddenInternal lifecycle listing; cohort pages consume the sanitized /api/issuers route instead
GET/api/internal/research/issuer-lifecycle/issuers/{issuer_group_id}hiddenInternal lifecycle detail; cohort pages consume the sanitized /api/issuers/{id} route instead
GET/api/internal/research/issuer-lifecycle/issuers/{issuer_group_id}/processeshiddenInternal lifecycle processes; cohort pages consume the sanitized /api/issuers/{id}/processes route instead

Cohort issuer routes

MethodAPI RouteStatusUI RouteReason
GET/api/issuerscovered/issuersCohort issuer list page calls loadCohortIssuerList
GET/api/issuers/mapping-confidencecovered/issuersCohort issuer list page calls loadCohortMappingConfidenceList
GET/api/issuers/{issuer_group_id}covered/issuers/[issuerGroupId]Cohort issuer detail page calls loadCohortIssuerDetail
GET/api/issuers/{issuer_group_id}/processesloaderloadCohortIssuerProcesses exists but no page calls it yet
GET/api/issuers/{issuer_group_id}/timelinecovered/issuers/[issuerGroupId]Cohort issuer detail page calls loadCohortIssuerTimeline
GET/api/issuers/{issuer_group_id}/mapping-confidencecovered/issuers/[issuerGroupId]Cohort issuer detail page calls loadCohortIssuerMappingConfidence
GET/api/issuers/evidence-bundles/{evidence_bundle_id:path}loaderNo page-level evidence bundle loading yet