SBOM-Upload-API
Referenz für den Upload-Endpunkt für CycloneDX-SBOMs, inklusive Eingaben, Zielauswahl und Response-Formaten.
/api/sbom/upload/
Zweck
- genau ein CycloneDX-JSON-Dokument annehmen
- es genau einem bestehenden Ziel zuordnen
- es zur Verarbeitung einplanen
Request
Query-Parameter
Nutze genau einen Zielmodus.
Paketartefakt-Modus
-
artifact_id: erforderlich
Nutze diesen Modus, wenn die SBOM zu einem bestehenden Paketartefakt wie einem Python-Wheel oder npm-Tarball gehört.
Kopiere die
artifact_id
aus der Zeile Artifact ID im Detailbereich des Artefakts in Craftifact oder löse sie zuerst über die Artefakt-Suche API auf. Der Upload-Endpunkt legt nicht zuerst ein neues Paketartefakt für dich an.
OCI-Modus
oci_digest: erforderlichrepository: erforderlich
Nutze diesen Modus, wenn die SBOM zu bestehendem OCI-Inhalt gehört, der per Digest identifiziert wird.
| Name | Erforderlich | Typ |
|---|---|---|
artifact_id |
Optional | string · uuid |
oci_digest |
Optional | string · pattern: ^sha256:[a-f0-9]{64}$ |
repository |
Optional | string |
Header-Aliasse
Nutze diese, wenn deine Automation lieber Header statt Query-Parameter setzt.
| Name | Erforderlich | Typ |
|---|---|---|
X-Sbom-Artifact-Id |
Optional | string · uuid |
X-Sbom-Oci-Digest |
Optional | string · pattern: ^sha256:[a-f0-9]{64}$ |
X-Sbom-Repository |
Optional | string |
Request-Body
Der Body muss genau ein JSON-Objekt im CycloneDX-Format sein.
Minimale praktische Form:
{
"bomFormat": "CycloneDX",
"specVersion": "1.6"
}
Validierungsregeln:
- der Body muss gültiges JSON sein
- der Top-Level-Wert muss ein Objekt sein
bomFormatmussCycloneDXseinspecVersionmuss ein String sein
JSON-Payload
ErforderlichbomFormat
Erforderlich
string · const: CycloneDX
CycloneDX.specVersion
Erforderlich
string
Zusätzliche Objektfelder sind erlaubt.
{
"bomFormat": "CycloneDX",
"specVersion": "1.6"
}
Responses
Häufige Statuscodes:
201 Created: die SBOM wurde angenommen und zur Verarbeitung eingeplant.400 Bad Request: die Zielauswahl ist ungültig oder der Body ist kein gültiges CycloneDX-JSON.401 Unauthorized: es wurden keine gültigen programmgesteuerten Credentials mitgegeben.403 Forbidden: dem Aufrufer fehlt der nötige Scope oder die nötige Repository-Berechtigung.404 Not Found: das referenzierte Artefakt oder der OCI-Inhalt existiert nicht.413 Payload Too Large: das konfigurierte Größenlimit oder die Repository-Quota würde überschritten.
Created
document_id
Erforderlich
string · uuid
status
Erforderlich
string · enum: pending
{
"document_id": "3f5d0a9d-4cbe-4e6a-b5b1-1b4c3930d9a1",
"status": "pending"
}
Bad Request
Bad request. Typical causes include:
- Neither
artifact_idnoroci_digestwas provided. - Both target modes were provided at once.
repositoryis missing in OCI mode.- The body is invalid JSON.
- The body is not a JSON object.
- The body is not valid CycloneDX JSON.
error
Erforderlich
string
{
"error": "one of artifact_id or oci_digest is required"
}
Unauthorized
error
Erforderlich
string
{
"error": "authentication required"
}
Forbidden
Forbidden. Typical causes include:
- The token scope does not allow this repository family.
- The caller lacks write or redeploy permission.
- Redeploy is disabled for the target repository.
error
Erforderlich
string
{
"error": "token scope does not permit this operation"
}
Not Found
Not found. Typical causes include:
artifact_iddoes not resolve to an uploaded artifact.oci_digesttogether withrepositorydoes not resolve to uploaded OCI content.
error
Erforderlich
string
{
"error": "artifact not found"
}
Payload Too Large
Payload too large. Typical causes include:
- The SBOM exceeds the configured maximum size.
- Repository quota would be exceeded by storing the uploaded SBOM blob.
error
Erforderlich
string
{
"error": "document exceeds maximum size (10485760 bytes)"
}
Beispiele
curl \
-X POST \
-H "Authorization: Bearer $CRAFTIFACT_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @dist/example-cyclonedx.json \
"https://packages.example.com/api/sbom/upload/?artifact_id=ARTIFACT_ID"
curl \
-X POST \
-H "Authorization: Bearer $CRAFTIFACT_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @image-cyclonedx.json \
"https://packages.example.com/api/sbom/upload/?oci_digest=sha256:DIGEST&repository=libs-release"
Verwandte Seiten
- Für praktische Client-Workflows siehe SBOMs mit Client-Tools erzeugen.
- Für Repository-URLs und Token-Setup siehe Client-Tools für Paketformate konfigurieren.