Scanner Endpoint Registration Matrix

Last updated: 2026-08-29 (Q-25 removes Scanner’s duplicate generic offline-kit HTTP map; Sprint 20260722_017 SCN-2E added the DC-15 digest detail route; the remaining inventory is based on Sprint 20260714_002, tasks SVC-4/SVC-6).

This file is the Scanner WebService source-of-truth for endpoint registration intent and authorization posture.

Q-25 assigns canonical HTTP import/status/manifest/validate, carrier quarantine/CAS, lifecycle and import-ledger ownership to OfflineKit at /api/offlinekit/v1. Scanner accepts the exact Scanner artifact-BOM part through its active bounded owner seam; it does not accept generic carrier imports. MapOfflineKitEndpoints is therefore not an active or deferred Scanner endpoint map and must not be reintroduced. The same source cut removes the route-only MapObservabilityEndpoints because its sole backing store, OfflineKitMetricsStore, retires with the duplicate import plane; /metrics is not an active Scanner route. Scanner’s other instrumentation remains.

Captured openapi_* snapshots describe their capture-time route surface and are not current source authority. They remain unchanged until their owning regeneration/capture step; use Program.cs and this matrix for the current registration set.

Active endpoint maps (registered in Program.cs)

Map methodBase pathAuthorization postureNotes
MapHealthEndpoints/healthz, /readyzscanner.scans.readHealth and readiness are authenticated.
MapScannerArtifactBomExchangeEndpointsGET /api/internal/v1/offlinekit/artifact-boms; POST /api/internal/v1/offlinekit/artifact-boms/activatescanner.offlinekit.artifact-boms (scanner:offlinekit:artifact-boms)Bounded, exact-tenant export/activation for scanner/artifact-boms.v1.json; Scanner remains the sole persistence owner.
MapScanEndpoints/api/v1/scansExplicit policies per routeIncludes nested scan maps (callgraphs, sbom, reachability, export, evidence, approval, manifest, github-code-scanning, by-digest).
MapScanDigestDetailEndpoints (nested under /api/v1/scans)/api/v1/scans/by-digest/{imageDigest}/detailscanner.scans.readDC-15’s digest-scoped read API (SCN-2E), the companion to the scanner.scan.completed event. Tenant from the validated claim only (allowDefaultTenant: false); 404 rather than an empty 200 when no succeeded scan exists for the digest. Template pinned against ScanCompletedContract.DetailRouteTemplate by ScannerConsolidationConformanceTests.
MapSourcesEndpoints/api/v1/sourcesscanner.sources.read/write/adminTenant-aware source CRUD and source-run operations (sbom_source_runs reads/writes are tenant-filtered).
MapWebhookEndpoints/api/v1/webhooksAllowAnonymousExternal provider ingress; tenant-scoped source resolution for name routes.
MapSbomUploadEndpoints/api/v1/sbomExplicit policies per routeIncludes SBOM upload and hot lookup maps.
MapReachabilityDriftRootEndpoints/api/v1/reachabilityscanner.scans.read/writeRoot drift query/compute routes.
MapDeltaCompareEndpoints/api/v1/deltaExplicit policies per routeDelta compare operations.
MapSmartDiffEndpoints/api/v1/smart-diffExplicit policies per routeSmart diff + VEX candidate workflows.
MapBaselineEndpoints/api/v1/baselinesscanner.scans.readReserved recommendation/rationale route shapes fail closed with deterministic HTTP 501 scanner_baseline_recommendations_unavailable; the former synthesized response is unwired until a persisted tenant truth source exists.
MapActionablesEndpoints/api/v1/actionablesExplicit policies per routeActionable findings operations.
MapCounterfactualEndpoints/api/v1/counterfactualsExplicit policies per routeCounterfactual analysis operations.
MapProofSpineEndpoints/api/v1/spinesExplicit policies per routeProof spine APIs.
MapReplayEndpoints/api/v1/replayExplicit policies per routeReplay command and verification APIs.
MapScoreReplayEndpoints (feature-gated)/api/v1/replay/scoreExplicit policies per routeEnabled only when scanner:scoreReplay:enabled=true.
MapWitnessEndpoints/api/v1/witnessesExplicit policies per routeWitness management APIs.
MapEpssEndpoints/api/v1/epssExplicit policies per routeEPSS ingestion/query APIs.
MapTriageStatusEndpoints/api/v1/triagescanner.triage.read/writeTriage status workflows.
MapTriageInboxEndpoints/api/v1/triagescanner.triage.read/writeGET /inbox requires artifactDigest; optional filter, sortBy, similarityThreshold, and descending are parsed explicitly. Each path exposes canonical bare UUIDs in findingIds[].
MapBatchTriageEndpoints/api/v1/triagescanner.triage.read/writeCluster statistics are live; batch action responses are non-persistent and unsigned until the triage decision/snapshot store is composed.
MapProofBundleEndpoints/api/v1/triagescanner.triage.writeReserved proof-bundle generation shape; IProofBundleGenerator has no implementation/DI registration and the contract is not tenant-bound.
MapUnknownsEndpoints/api/v1/unknownsscanner.scans.readTenant-scoped unknown listing/detail/evidence/history/stats/bands routes.
MapSecretDetectionSettingsEndpoints/api/v1/secrets/configscanner.secret-settings.* / scanner.secret-exceptions.*Secret detection config APIs with tenant-scoped exception get/update/delete lookups.
MapScannerTenantSettingsEndpoints/api/v1/scanner/settingsGET scanner.operations.read (scanner:read or scanner.admin); PUT scanner.operations.write (scanner:write or scanner.admin)Tenant-scoped GET/PUT of disabled signed-analyzer IDs; strong ETag compare-and-swap, audit event, and Worker consumption.
MapScannerAnalyzerEndpoints/api/v1/scanner/analyzersscanner.operations.read (scanner:read or scanner.admin)Worker probe-report truth plus tenant enablement; health is healthy, unhealthy, or evidence-absent unknown.
MapScannerPerformanceEndpoints/api/v1/scanner/performancescanner.operations.read (scanner:read or scanner.admin)Tenant-scoped pending depth and non-replay duration percentiles over durable Scanner records; unavailable metrics are omitted with reasons.
MapPolicyEndpoints (feature-gated)/api/v1/policyExplicit policies per routeEnabled only when policy preview feature flag is true.
MapReportEndpoints/api/v1/reportsscanner.reportsReport generation and retrieval routes.
MapRuntimeEndpoints/api/v1/runtimescanner.runtime.ingest and scan policiesRuntime ingest/reconcile APIs.
MapSliceEndpoints/api/slicesExplicit policies per routeReachability slice query/replay APIs.

Webhook tenant contract (name routes)

Triage tenant contract

Unknowns tenant contract

Reachability + SmartDiff tenant contract (SCAN-TEN-11)

Source-runs + secret-exception tenant contract (SCAN-TEN-13)

Deferred endpoint maps (not registered by design)

Map methodCurrent stateReason for deferralActivation prerequisite
MapValidationEndpointsDeferredValidation endpoint stack is not wired in Program.cs (validator service graph and option bindings are not part of default webservice startup contract).Add explicit validation DI and contract docs, then register in Program.cs.
MapReachabilityEvidenceEndpointsDeferredLegacy standalone /api/reachability surface is not part of current /api/v1/scans/triage scanner API contract.Contract decision to promote or remove this surface.
MapReachabilityStackEndpointsDeferredStack endpoints depend on optional repository path and are not part of the current public API registration set.Contract decision and stable backing repository implementation.
MapFidelityEndpointsDeferredFidelity analyzer endpoints are experimental and require explicit analyzer service contract decisions before exposure.Product sign-off and DI contract hardening.