Build Upload

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.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

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).

FieldDescription
nameBuild name
numberBuild number
startedBuild start time in yyyy-MM-dd'T'HH:mm:ss.SSSZ format
modules[]List of modules produced or consumed by the build
modules[].idModule identifier. Format varies by package type (for example, mychart:0.1.0 for Helm)
modules[].typePackage 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)

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.

TypePackage manager or use case
genericGeneric files uploaded with jf rt upload or the Deploy Artifact REST API
mavenMaven
gradleGradle
ivyApache Ivy
dockerDocker or OCI container images
helmHelm charts, including charts stored in Helm OCI repositories
npmnpm
nugetNuGet
goGo modules
pythonPython (pip, pipenv, poetry, and related tools). Legacy builds may use pypi
uvuv
conanConan
terraformTerraform modules
nixNix
gemRubyGems
apkAlpine APK packages
cargoRust Cargo crates
cppC/C++ components listed manually for Xray build scanning
buildReference to another published build (used by build aggregation)
📘

Helm OCI repositories

Charts in Helm OCI repositories use the module type helm. Do not use HelmOCI, helmoci, or docker. Helm OCI charts are stored using an OCI layout (manifest.json and sha256__* layer files), but the build-info module type remains helm.

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:

  1. The artifact already exists in Artifactory.
  2. The artifact checksums in build-info (sha1, md5, and ideally sha256) match the stored file.
  3. The artifact has build.name and build.number item properties set to the same values as the build-info name and number fields.

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-name and --build-number on JFrog CLI upload or package-manager commands, then publish with jf 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 18

See 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

Query Params
string

Limits the response to builds contained in the specified project.

Body Params

Build info JSON file

Build info JSON structure

string

Build Info schema version

string

Build name

string

Build number

string
enum

Build type

Allowed:
buildAgent
object
agent
object
date-time

Build start time in the format of yyyy-MM-dd'T'HH:mm:ss.SSSZ

string
int64

Build duration in milliseconds

string

Artifactory principal (the Artifactory user used for deployment)

string

CI server URL

vcs
array of objects
vcs
licenseControl
object
buildRetention
object
modules
array of objects
modules
issues
object
properties
object

Environment variables and properties collected from the CI server

Responses
200

Build uploaded successfully

400

Bad Request - The request body is malformed or a required parameter is missing.

401

Bad Credentials - Authentication failed. A valid token is required.

403

Permission Denied - The user does not have deploy permission for the build, and delete permission for overriding existing build info artifact.

Language
Credentials
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here!