Use the REST API to interact with artifacts in GitHub Actions.
You can use the REST API to download, delete, and retrieve information about workflow artifacts in GitHub Actions. Artifacts enable you to share data between jobs in a workflow and store data once that workflow has completed. For more information, see Store and share data with workflow artifacts.
Note
Most endpoints use Authorization: Bearer <YOUR-TOKEN> and Accept: application/vnd.github+json headers, plus X-GitHub-Api-Version: 2026-03-10. Curl examples below omit these standard headers for brevity.
GET /repos/{owner}/{repo}/actions/artifacts
Lists all artifacts for a repository.
Anyone with read access to the repository can use this endpoint.
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint with a private repository.
accept (string)application/vnd.github+json is recommended.owner (string) (required)
The account owner of the repository. The name is not case sensitive.
repo (string) (required)
The name of the repository without the .git extension. The name is not case sensitive.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
name (string)
The name field of an artifact. When specified, only artifacts with this name will be returned.
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/actions/artifacts
Response schema (Status: 200):
total_count: required, integerartifacts: required, array of Artifact:
id: required, integernode_id: required, stringname: required, stringsize_in_bytes: required, integerurl: required, stringarchive_download_url: required, stringexpired: required, booleancreated_at: required, string or null, format: date-timeexpires_at: required, string or null, format: date-timeupdated_at: required, string or null, format: date-timedigest: string or nullworkflow_run: object or null:
id: integerrepository_id: integerhead_repository_id: integerhead_branch: stringhead_sha: stringGET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}
Gets a specific artifact for a workflow run.
Anyone with read access to the repository can use this endpoint.
If the repository is private, OAuth tokens and personal access tokens (classic) need the repo scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.owner (string) (required)
The account owner of the repository. The name is not case sensitive.
repo (string) (required)
The name of the repository without the .git extension. The name is not case sensitive.
artifact_id (integer) (required)
The unique identifier of the artifact.
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/actions/artifacts/ARTIFACT_ID
Response schema (Status: 200):
id: required, integernode_id: required, stringname: required, stringsize_in_bytes: required, integerurl: required, stringarchive_download_url: required, stringexpired: required, booleancreated_at: required, string or null, format: date-timeexpires_at: required, string or null, format: date-timeupdated_at: required, string or null, format: date-timedigest: string or nullworkflow_run: object or null:
id: integerrepository_id: integerhead_repository_id: integerhead_branch: stringhead_sha: stringDELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}
Deletes an artifact for a workflow run.
OAuth tokens and personal access tokens (classic) need the repo scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.owner (string) (required)
The account owner of the repository. The name is not case sensitive.
repo (string) (required)
The name of the repository without the .git extension. The name is not case sensitive.
artifact_id (integer) (required)
The unique identifier of the artifact.
Request:
curl -L \
-X DELETE \
https://api.github.com/repos/OWNER/REPO/actions/artifacts/ARTIFACT_ID
Response schema (Status: 204):
GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}
Gets a redirect URL to download an archive for a repository. This URL expires after 1 minute. Look for Location: in
the response header to find the URL for the download. The :archive_format must be zip.
OAuth tokens and personal access tokens (classic) need the repo scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.owner (string) (required)
The account owner of the repository. The name is not case sensitive.
repo (string) (required)
The name of the repository without the .git extension. The name is not case sensitive.
artifact_id (integer) (required)
The unique identifier of the artifact.
archive_format (string) (required)
302 - Found
410 - Gone
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/actions/artifacts/ARTIFACT_ID/ARCHIVE_FORMAT
Response schema (Status: 302):
GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts
Lists artifacts for a workflow run.
Anyone with read access to the repository can use this endpoint.
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint with a private repository.
accept (string)application/vnd.github+json is recommended.owner (string) (required)
The account owner of the repository. The name is not case sensitive.
repo (string) (required)
The name of the repository without the .git extension. The name is not case sensitive.
run_id (integer) (required)
The unique identifier of the workflow run.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
name (string)
The name field of an artifact. When specified, only artifacts with this name will be returned.
direction (string)
The direction to sort the results by.
Default: desc
Can be one of: asc, desc
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/actions/runs/RUN_ID/artifacts
Response schema (Status: 200):
Same response schema as List artifacts for a repository.