Job Artifacts API

Get job artifacts

The use of CI_JOB_TOKEN in the artifacts download API was introduced in GitLab Premium 9.5.

Get the job’s artifacts zipped archive of a project.

GET /projects/:id/jobs/:job_id/artifacts
AttributeTypeRequiredDescription
idinteger/stringyesID or URL-encoded path of the project owned by the authenticated user.
job_idintegeryesID of a job.
job_token stringnoTo be used with triggers for multi-project pipelines. It should be invoked only in a CI/CD job defined in the .gitlab-ci.yml file. The value is always $CI_JOB_TOKEN. The job associated with the $CI_JOB_TOKEN must be running when this token is used.

Example request using the PRIVATE-TOKEN header:

curl --output artifacts.zip --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts"

To use this in a script definition inside .gitlab-ci.yml , you can use either:

  • The JOB-TOKEN header with the GitLab-provided CI_JOB_TOKEN variable. For example, the following job downloads the artifacts of the job with ID 42. The command is wrapped in single quotes because it contains a colon (:):

    artifact_download:
      stage: test
      script:
        - 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts"'
    
  • Or the job_token attribute with the GitLab-provided CI_JOB_TOKEN variable. For example, the following job downloads the artifacts of the job with ID 42:

    artifact_download:
      stage: test
      script:
        - 'curl --location --output artifacts.zip "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts?job_token=$CI_JOB_TOKEN"'
    

Possible response status codes:

StatusDescription
200Serves the artifacts file.
404Build not found or no artifacts.

Download the artifacts archive

The use of CI_JOB_TOKEN in the artifacts download API was introduced in GitLab Premium 9.5.

Download the artifacts zipped archive from the latest successful pipeline for the given reference name and job, provided the job finished successfully. This is the same as getting the job’s artifacts, but by defining the job’s name instead of its ID.

note
If a pipeline is parent of other child pipelines, artifacts are searched in hierarchical order from parent to child. For example, if both parent and child pipelines have a job with the same name, the artifact from the parent pipeline is returned.
GET /projects/:id/jobs/artifacts/:ref_name/download?job=name

Parameters

AttributeTypeRequiredDescription
idinteger/stringyesID or URL-encoded path of the project owned by the authenticated user.
ref_namestringyesBranch or tag name in repository. HEAD or SHA references are not supported.
jobstringyesThe name of the job.
job_token stringnoTo be used with triggers for multi-project pipelines. It should be invoked only in a CI/CD job defined in the .gitlab-ci.yml file. The value is always $CI_JOB_TOKEN. The job associated with the $CI_JOB_TOKEN must be running when this token is used.

Example request using the PRIVATE-TOKEN header:

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/download?job=test"

To use this in a script definition inside .gitlab-ci.yml , you can use either:

  • The JOB-TOKEN header with the GitLab-provided CI_JOB_TOKEN variable. For example, the following job downloads the artifacts of the test job of the main branch. The command is wrapped in single quotes because it contains a colon (:):

    artifact_download:
      stage: test
      script:
        - 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/main/download?job=test"'
    
  • Or the job_token attribute with the GitLab-provided CI_JOB_TOKEN variable. For example, the following job downloads the artifacts of the test job of the main branch:

    artifact_download:
      stage: test
      script:
        - 'curl --location --output artifacts.zip "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/main/download?job=test&job_token=$CI_JOB_TOKEN"'
    

Possible response status codes:

StatusDescription
200Serves the artifacts file.
404Build not found or no artifacts.

Download a single artifact file by job ID

Version history
  • Introduced in GitLab 10.0.
  • The use of CI_JOB_TOKEN in the artifacts download API was introduced in GitLab Premium 13.10.

Download a single artifact file from a job with a specified ID from inside the job’s artifacts zipped archive. The file is extracted from the archive and streamed to the client.

GET /projects/:id/jobs/:job_id/artifacts/*artifact_path

Parameters

AttributeTypeRequiredDescription
idinteger/stringyesID or URL-encoded path of the project owned by the authenticated user.
job_idintegeryesThe unique job identifier.
artifact_pathstringyesPath to a file inside the artifacts archive.
job_token stringnoTo be used with triggers for multi-project pipelines. It should be invoked only in a CI/CD job defined in the .gitlab-ci.yml file. The value is always $CI_JOB_TOKEN. The job associated with the $CI_JOB_TOKEN must be running when this token is used.

Example request:

curl --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/5/artifacts/some/release/file.pdf"

Possible response status codes:

StatusDescription
200Sends a single artifact file
400Invalid path provided
404Build not found or no file/artifacts

Download a single artifact file from specific tag or branch

Version history

Download a single artifact file for a specific job of the latest successful pipeline for the given reference name from inside the job’s artifacts archive. The file is extracted from the archive and streamed to the client.

The artifact file provides more detail than what is available in the CSV export.

In GitLab 13.5 and later, artifacts for parent and child pipelines are searched in hierarchical order from parent to child. For example, if both parent and child pipelines have a job with the same name, the artifact from the parent pipeline is returned.

GET /projects/:id/jobs/artifacts/:ref_name/raw/*artifact_path?job=name

Parameters:

AttributeTypeRequiredDescription
idinteger/stringyesID or URL-encoded path of the project owned by the authenticated user.
ref_namestringyesBranch or tag name in repository. HEAD or SHA references are not supported.
artifact_pathstringyesPath to a file inside the artifacts archive.
jobstringyesThe name of the job.
job_token stringnoTo be used with triggers for multi-project pipelines. It should be invoked only in a CI/CD job defined in the .gitlab-ci.yml file. The value is always $CI_JOB_TOKEN. The job associated with the $CI_JOB_TOKEN must be running when this token is used.

Example request:

curl --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/raw/some/release/file.pdf?job=pdf"

Possible response status codes:

StatusDescription
200Sends a single artifact file
400Invalid path provided
404Build not found or no file/artifacts

Keep artifacts

Prevents artifacts from being deleted when expiration is set.

POST /projects/:id/jobs/:job_id/artifacts/keep

Parameters

AttributeTypeRequiredDescription
idinteger/stringyesID or URL-encoded path of the project owned by the authenticated user.
job_idintegeryesID of a job.

Example request:

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/1/artifacts/keep"

Example response:

{
  "commit": {
    "author_email": "admin@example.com",
    "author_name": "Administrator",
    "created_at": "2015-12-24T16:51:14.000+01:00",
    "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
    "message": "Test the CI integration.",
    "short_id": "0ff3ae19",
    "title": "Test the CI integration."
  },
  "coverage": null,
  "allow_failure": false,
  "download_url": null,
  "id": 42,
  "name": "rubocop",
  "ref": "main",
  "artifacts": [],
  "runner": null,
  "stage": "test",
  "created_at": "2016-01-11T10:13:33.506Z",
  "started_at": "2016-01-11T10:13:33.506Z",
  "finished_at": "2016-01-11T10:15:10.506Z",
  "duration": 97.0,
  "status": "failed",
  "failure_reason": "script_failure",
  "tag": false,
  "web_url": "https://example.com/foo/bar/-/jobs/42",
  "user": null
}

Delete job artifacts

Introduced in GitLab 11.9.

Delete artifacts of a job.

DELETE /projects/:id/jobs/:job_id/artifacts
AttributeTypeRequiredDescription
idinteger/stringyesID or URL-encoded path of the project
job_idintegeryesID of a job.

Example request:

curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/1/artifacts"
note
At least Maintainer role is required to delete artifacts.

If the artifacts were deleted successfully, a response with status 204 No Content is returned.

Delete project artifacts

Version history

Delete artifacts of a project that can be deleted.

By default, artifacts from the most recent successful pipeline of each ref are kept.

DELETE /projects/:id/artifacts
AttributeTypeRequiredDescription
idinteger/stringyesID or URL-encoded path of the project

Example request:

curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/artifacts"
note
At least Maintainer role is required to delete artifacts.

Schedules a worker to update to the current time the expiry of all artifacts that can be deleted. A response with status 202 Accepted is returned.