API Coverage

Maintained in seebom-labs/bomhort-go — edit it there.

Every route of the BOMHort api-gateway (backend/cmd/api-gateway/main.go) and the client method that calls it.

Since is the first BOMHort release with the route (≤ 0.6 = present in 0.6.1, the oldest release checked). Routes newer than the server answer 404 (IsNotFound); newer query parameters are ignored and newer fields stay empty (COMPATIBILITY.md). Pagination column: ✓ = ListX page call + X iterator (+ AllX where useful).

All /api/v1 routes require authentication when BOMHort runs with AUTH_ENABLED=true; the health probes are always public.

Health

Method & pathClientReturnsSince
GET /healthzHealthyerror≤ 0.6
GET /livezLiveerror≤ 0.6
GET /readyzReadyerror (503 → IsUnavailable)≤ 0.6

SBOMs

Method & pathClientReturnsPaginatedSince
GET /api/v1/sbomsListSBOMs, SBOMs, AllSBOMs, FindSBOMSBOM✓≤ 0.6
↳ ?search=SBOMListOptions.Search≤ 0.6
↳ ?project=SBOMListOptions.Project0.8.0 (ignored by older servers)
GET /api/v1/sboms/{id}/detailSBOMDetailSBOMDetail≤ 0.6
GET /api/v1/sboms/{id}/vulnerabilitiesVulnerabilities[]Vulnerability≤ 0.6
↳ ?scope=VulnerabilityOptions.Scope0.8.0 (ignored by older servers)
GET /api/v1/sboms/{id}/dependenciesDependencies[]DependencyNode≤ 0.6 (404 for unknown ids since 0.8.0)
GET /api/v1/sboms/{id}/licensesSBOMLicenses[]SBOMLicense≤ 0.6
GET /api/v1/sboms/{id}/vexSBOMVEXStatements[]VEXStatement0.7.0
GET /api/v1/sboms/{id}/downloadDownloadSBOM, DownloadSBOMTo[]byte / streamed≤ 0.6
PATCH /api/v1/sboms/{id}PatchSBOMSourceSourceAttribution0.7.0
POST /api/v1/sboms/uploadUpload, UploadSBOM, UploadVEXUploadResult0.7.0
↳ ?sbom_id= (VEX only)UploadOptions.SBOMID0.7.0
↳ ?cluster= ?namespace= ?project= ?tags=UploadOptions0.7.0
↳ ?parent=UploadOptions.ParentUploadResult.Parent0.8.0
↳ X-Source-Repo, X-Source-RefUploadOptions.SourceRepo/SourceRef0.7.0

Per-SBOM lists answer 200 [] for unknown (but well-formed) ids and 400 for ids that are not UUIDs; detail, download and (since 0.8.0) dependencies answer 404.

Vulnerabilities & VEX

Method & pathClientReturnsPaginatedSince
GET /api/v1/vulnerabilitiesListVulnerabilitiesVulnerability✓≤ 0.6
↳ ?scope=VulnerabilityListOptions.Scope0.8.0
GET /api/v1/reports/vulnerabilities?format=csv (&scope=)VulnerabilityReportCSVstreamed CSV0.8.0
GET /api/v1/vulnerabilities/{id}/affected-projectsAffectedProjects[]AffectedProject≤ 0.6
GET /api/v1/vex/statementsListVEXStatements, VEXStatements, AllVEXStatementsVEXStatement✓≤ 0.6

Projects, tags, ownership

Method & pathClientReturnsPaginatedSince
GET /api/v1/projectsListProjects, ProjectsProject✓≤ 0.6
↳ ?search= / ?tag=ProjectListOptions.Search / .Tag≤ 0.6 / 0.7.0
↳ ?group_by=parentListProjectGroupsProjectGroup✓0.8.0 (older servers ignore it and return projects)
GET /api/v1/projects/{name}ProjectProjectDetail0.8.0
GET /api/v1/projects/{name}/sbomsListProjectSBOMsSBOM✓0.8.0
GET /api/v1/projects/{name}/vulnerabilities (?scope=)ProjectVulnerabilities[]Vulnerability (with AffectedSBOMs)0.8.0
GET /api/v1/projects/{name}/packagesListProjectPackagesProjectPackage✓0.8.0
GET /api/v1/projects/license-complianceLicenseViolations[]LicenseViolation≤ 0.6
↳ ?summary=trueLicenseViolationSummaries[]LicenseViolationSummary0.8.0 (older servers ignore it)
GET /api/v1/tagsTags[]Tag0.7.0
GET /api/v1/clustersClusters[]Cluster≤ 0.6
GET /api/v1/clusters/{name}/statsClusterStatsClusterStats≤ 0.6
GET /api/v1/clusters/{name}/sbomsListClusterSBOMsSBOM✓≤ 0.6
GET /api/v1/namespaces (?cluster=)Namespaces[]Namespace0.7.0
GET /api/v1/namespaces/{name}/statsNamespaceStatsNamespaceStats0.7.0
GET /api/v1/namespaces/{name}/sbomsListNamespaceSBOMsSBOM✓0.7.0
GET /api/v1/fleetFleet[]FleetCluster0.7.0

Project names may contain / (argo/cd); the client percent-encodes path segments. A project literally named license-compliance cannot be fetched via /projects/{name} because the static route wins on the server.

Statistics, search, packages, licenses

Method & pathClientReturnsSince
GET /api/v1/stats/dashboardDashboardStatsDashboardStats≤ 0.6
GET /api/v1/stats/dependencies (?limit=)DependencyStatsDependencyStats≤ 0.6
GET /api/v1/stats/version-skewVersionSkewVersionSkew (paginated body)≤ 0.6
GET /api/v1/search (?q= &limit=)SearchSearchResult≤ 0.6
GET /api/v1/packages/searchSearchPackagesPackageSearch≤ 0.6
GET /api/v1/packages/detail (?name=)PackageDetailPackageDetail≤ 0.6
GET /api/v1/packages/archivedArchivedPackages[]ArchivedPackage≤ 0.6
GET /api/v1/licenses/complianceLicenseCompliance[]LicenseCompliance≤ 0.6
GET /api/v1/licenses/sourcesLicenseSources[]LicenseSource0.8.0
GET /api/v1/license-exceptionsLicenseExceptionsLicenseExceptions≤ 0.6
GET /api/v1/license-policyLicensePolicyLicensePolicy≤ 0.6

How coverage is verified

  • endpoints_test.go pins method, escaped path, query, headers, body and response decoding of every row above against an httptest server.
  • test/integration calls every row against a real BOMHort with WithStrictDecoding(); rows newer than the server are skipped on 404. CI runs it against the pinned release on every PR and against BOMHort main weekly (TESTING.md).

When BOMHort adds a route or a field: add the method/field here, in types.go (with the BOMHort version in the doc comment), in endpoints_test.go and in the integration tests (RELEASING.md).