Uploads a build by providing a buildinfo JSON file.
Each artifact referenced in modules[].artifacts must already exist in Artifactory with matching SHA1 and MD5 checksums. Artifacts must also have build.name and build.number item properties set to the same values as the build-info name and number fields. Without these properties, the Builds UI shows "No path found (externally resolved or deleted/overwritten)".
For Helm OCI charts, use module type helm (not HelmOCI or docker). See the page content below for the full list of module types and a Helm OCI example.
Security: Requires a privileged user. From version 6.6, requires deploy permission for the build, and delete permission for overriding existing build info artifact.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Use this API to publish a build-info JSON document to Artifactory. Build-info captures modules, artifacts, dependencies, environment variables, and other metadata for a build run.
Build-info structure
The request body is a build-info JSON document. Each object in modules[] represents one logical unit in the build (for example, a Maven module, Docker image, or Helm chart).
| Field | Description |
|---|---|
name | Build name |
number | Build number |
started | Build start time in yyyy-MM-dd'T'HH:mm:ss.SSSZ format |
modules[] | List of modules produced or consumed by the build |
modules[].id | Module identifier. Format varies by package type (for example, mychart:0.1.0 for Helm) |
modules[].type | Package manager or build-system type. See Module types |
modules[].artifacts[] | Artifacts produced by the build, with checksums and repository paths |
modules[].dependencies[] | Dependencies resolved during the build |
For the full JSON schema, see the build-info-go README.
Module types (modules[].type)
modules[].type)The type field is a lowercase string that identifies the package manager or build system. Artifactory accepts additional values, but using the correct type ensures artifacts link correctly in the Builds UI and in Xray scans.
| Type | Package manager or use case |
|---|---|
generic | Generic files uploaded with jf rt upload or the Deploy Artifact REST API |
maven | Maven |
gradle | Gradle |
ivy | Apache Ivy |
docker | Docker or OCI container images |
helm | Helm charts, including charts stored in Helm OCI repositories |
npm | npm |
nuget | NuGet |
go | Go modules |
python | Python (pip, pipenv, poetry, and related tools). Legacy builds may use pypi |
uv | uv |
conan | Conan |
terraform | Terraform modules |
nix | Nix |
gem | RubyGems |
apk | Alpine APK packages |
cargo | Rust Cargo crates |
cpp | C/C++ components listed manually for Xray build scanning |
build | Reference to another published build (used by build aggregation) |
Helm OCI repositories
Charts in Helm OCI repositories use the module type
helm. Do not useHelmOCI,helmoci, ordocker. Helm OCI charts are stored using an OCI layout (manifest.jsonandsha256__*layer files), but the build-info module type remainshelm.
Link artifacts to the build
For build-info artifacts to appear in the Builds UI with working Download and Show in Tree actions, each artifact must meet all of the following requirements:
- The artifact already exists in Artifactory.
- The artifact checksums in build-info (
sha1,md5, and ideallysha256) match the stored file. - The artifact has
build.nameandbuild.numberitem properties set to the same values as the build-infonameandnumberfields.
Optionally, also set build.timestamp (milliseconds since epoch) when multiple builds share the same name and number.
If these properties are missing, the Builds UI shows No path found (externally resolved or deleted/overwritten) for the affected artifacts.
To attach build properties:
- Use
--build-nameand--build-numberon JFrog CLI upload or package-manager commands, then publish withjf rt build-publish. - Use the Set Item Properties REST API to attach properties to a file or folder. For Helm OCI charts, set properties recursively on the chart version folder that contains
manifest.json.
Example property string:
build.name=my-build;build.number=18;build.timestamp=1710000000000
Publish build-info for Helm OCI charts
Recommended: JFrog CLI
JFrog CLI 2.92.0 and later supports Helm OCI workflows with build-info collection:
jf helm registry login <registry-host>
jf helm push mychart-0.1.0.tgz oci://<registry-host>/<helm-oci-repo> \
--build-name=helm-charts --build-number=18
jf rt build-publish helm-charts 18See Use Helm with JFrog CLI for full command reference and CI/CD examples.
Manual REST API example
Use this pattern when you push charts with the native helm client and publish build-info separately.
Step 1. Push the chart to the Helm OCI repository:
helm push mychart-0.1.0.tgz oci://<registry-host>/<helm-oci-repo>Step 2. Attach build properties to the chart version folder (the folder that contains manifest.json):
curl -u<USER>:<TOKEN> -X PUT \
"https://<registry-host>/artifactory/api/storage/<helm-oci-repo>/<optional-subpath>/mychart/0.1.0?properties=build.name=helm-charts;build.number=18;build.timestamp=1710000000000&recursive=1"Step 3. Upload build-info with module type helm and artifact checksums that match the stored OCI files:
{
"version": "1.0.1",
"name": "helm-charts",
"number": "18",
"started": "2026-03-11T10:00:00.000+0000",
"buildAgent": {
"name": "Helm",
"version": "3.14.0"
},
"agent": {
"name": "Manual",
"version": "1.0"
},
"modules": [
{
"type": "helm",
"id": "mychart:0.1.0",
"artifacts": [
{
"name": "manifest.json",
"type": "json",
"path": "<optional-subpath>/mychart/0.1.0/manifest.json",
"sha1": "<SHA1>",
"md5": "<MD5>",
"sha256": "<SHA256>"
},
{
"name": "sha256__<config-digest>",
"type": "json",
"path": "<optional-subpath>/mychart/0.1.0/sha256__<config-digest>",
"sha1": "<SHA1>",
"md5": "<MD5>",
"sha256": "<SHA256>"
},
{
"name": "sha256__<layer-digest>",
"type": "gz",
"path": "<optional-subpath>/mychart/0.1.0/sha256__<layer-digest>",
"sha1": "<SHA1>",
"md5": "<MD5>",
"sha256": "<SHA256>"
}
]
}
]
}Replace <optional-subpath>, checksums, and digest values with the paths and checksums from your Helm OCI repository. Retrieve checksums from Artifactory storage APIs or from the Artifactory UI.
Step 4. Upload the build-info JSON:
curl -u<USER>:<TOKEN> -X PUT \
-H "Content-Type: application/json" \
-d @build-info.json \
"https://<registry-host>/artifactory/api/build"Related topics
200Build uploaded successfully
400Bad Request - The request body is malformed or a required parameter is missing.
401Bad Credentials - Authentication failed. A valid token is required.
403Permission Denied - The user does not have deploy permission for the build, and delete permission for overriding existing build info artifact.
