Skip to main content
Skip to content

REST API endpoints for issue artifacts

Use the REST API to manage issue artifacts.

List issue artifacts

Lists artifacts attached to an issue. Results are ordered by artifact number.

The type parameter filters the response to artifacts of one type.

Fine-grained access tokens for "List issue artifacts"

This endpoint works with the following fine-grained token types:

The fine-grained token must have at least one of the following permission sets:

  • "Issues" repository permissions (read)
  • "Pull requests" repository permissions (read)

This endpoint can be used without authentication or the aforementioned permissions if only public resources are requested.

Parameters for "List issue artifacts"

Headers
Name, Type, Description
accept string

Setting to application/vnd.github+json is recommended.

Path parameters
Name, Type, Description
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.

issue_number integer Required

The number that identifies the issue.

Query parameters
Name, Type, Description
type string

The artifact type to return.

Can be one of: generic, link, plan, embedded_html

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

HTTP response status codes for "List issue artifacts"

Status codeDescription
200

A list of artifacts attached to the issue.

404

Resource not found

410

Gone

503

Service unavailable

Code samples for "List issue artifacts"

If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.

Request example

get/repos/{owner}/{repo}/issues/{issue_number}/artifacts
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2026-03-10" \ https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/artifacts

A list of artifacts attached to the issue.

Status: 200
[ { "id": 42, "number": 1, "type": "plan", "name": "Implementation plan", "body": "## Plan\n\nBuild the feature in two phases.", "body_html": "<h2>Plan</h2>\n<p>Build the feature in two phases.</p>", "description": "Build the feature in two phases.", "creator": { "login": "octocat", "id": 1 }, "updated_by_actor": { "login": "monalisa", "id": 2 }, "created_at": "2026-09-21T15:00:00Z", "updated_at": "2026-09-21T15:30:00Z" }, { "id": 43, "number": 2, "type": "link", "name": "Design discussion", "body": "https://github.com/octo-org/example/discussions/1", "body_html": "<p>https://github.com/octo-org/example/discussions/1</p>", "description": "", "creator": { "login": "octocat", "id": 1 }, "updated_by_actor": { "login": "octocat", "id": 1 }, "created_at": "2026-09-21T16:00:00Z", "updated_at": "2026-09-21T16:00:00Z" } ]

Create an issue artifact

Creates an artifact attached to an issue.

The artifact type defaults to generic when omitted. Creating an artifact requires permission to update the issue.

To create an HTML artifact, set type to embedded_html and provide the HTML source in body. Open the returned html_url to inspect the source, then select Preview to view the rendered artifact. Select Show source to return to the HTML source.

Fine-grained access tokens for "Create an issue artifact"

This endpoint works with the following fine-grained token types:

The fine-grained token must have the following permission set:

  • "Issues" repository permissions (write)

Parameters for "Create an issue artifact"

Headers
Name, Type, Description
accept string

Setting to application/vnd.github+json is recommended.

Path parameters
Name, Type, Description
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.

issue_number integer Required

The number that identifies the issue.

Body parameters
Name, Type, Description
type string

The artifact type.

Default: generic

Can be one of: generic, link, plan, embedded_html

name string Required

The human-readable name of the artifact.

body string Required

The artifact content. For embedded_html artifacts, provide the HTML source.

HTTP response status codes for "Create an issue artifact"

Status codeDescription
201

The created artifact.

404

Resource not found

410

Gone

422

Validation failed, or the endpoint has been spammed.

429

Artifact writes are temporarily throttled. Retry after the indicated delay.

500

Internal Error

503

Service unavailable

Code samples for "Create an issue artifact"

If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.

Request example

post/repos/{owner}/{repo}/issues/{issue_number}/artifacts
curl -L \ -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2026-03-10" \ https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/artifacts \ -d '{"type":"generic","name":"Research notes","body":"## Findings\n\nThe API supports issue artifacts."}'

The created artifact.

Status: 201
{ "id": 42, "number": 1, "type": "generic", "name": "Research notes", "body": "## Findings\n\nThe API supports issue artifacts.", "body_html": "<h2>Findings</h2>\n<p>The API supports issue artifacts.</p>", "creator": { "login": "octocat", "id": 1 }, "updated_by_actor": { "login": "octocat", "id": 1 }, "created_at": "2026-09-21T15:00:00Z", "updated_at": "2026-09-21T15:00:00Z" }

Get an issue artifact

Returns an artifact attached to an issue by its per-issue artifact number, along with its version history ordered from newest to oldest.

Fine-grained access tokens for "Get an issue artifact"

This endpoint works with the following fine-grained token types:

The fine-grained token must have at least one of the following permission sets:

  • "Issues" repository permissions (read)
  • "Pull requests" repository permissions (read)

This endpoint can be used without authentication or the aforementioned permissions if only public resources are requested.

Parameters for "Get an issue artifact"

Headers
Name, Type, Description
accept string

Setting to application/vnd.github+json is recommended.

Path parameters
Name, Type, Description
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.

issue_number integer Required

The number that identifies the issue.

artifact_number integer Required

The artifact number within the issue.

HTTP response status codes for "Get an issue artifact"

Status codeDescription
200

The requested artifact.

301

Moved permanently

404

Resource not found

410

Gone

503

Service unavailable

Code samples for "Get an issue artifact"

If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.

Request example

get/repos/{owner}/{repo}/issues/{issue_number}/artifacts/{artifact_number}
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2026-03-10" \ https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/artifacts/ARTIFACT_NUMBER

The requested artifact.

Status: 200
{ "artifact": { "id": 42, "number": 1, "type": "plan", "name": "Updated implementation plan", "body": "## Updated plan\n\nBuild the feature in three phases.", "body_html": "<h2>Updated plan</h2>\n<p>Build the feature in three phases.</p>", "description": "Build the feature in three phases.", "creator": { "login": "octocat", "id": 1 }, "updated_by_actor": { "login": "monalisa", "id": 2 }, "created_at": "2026-09-21T15:00:00Z", "updated_at": "2026-09-21T15:30:00Z" }, "versions": [ { "version": 2, "name": "Updated implementation plan", "body": "## Updated plan\n\nBuild the feature in three phases.", "body_html": "<h2>Updated plan</h2>\n<p>Build the feature in three phases.</p>", "created_at": "2026-09-21T15:30:00Z", "actor": { "login": "monalisa", "id": 2 } }, { "version": 1, "name": "Implementation plan", "body": "## Plan\n\nBuild the feature in two phases.", "body_html": "<h2>Plan</h2>\n<p>Build the feature in two phases.</p>", "created_at": "2026-09-21T15:00:00Z", "actor": { "login": "octocat", "id": 1 } } ] }

Update an issue artifact

Updates the name, body, or both for an artifact attached to an issue.

Updating an artifact requires permission to update the issue.

Fine-grained access tokens for "Update an issue artifact"

This endpoint works with the following fine-grained token types:

The fine-grained token must have the following permission set:

  • "Issues" repository permissions (write)

Parameters for "Update an issue artifact"

Headers
Name, Type, Description
accept string

Setting to application/vnd.github+json is recommended.

Path parameters
Name, Type, Description
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.

issue_number integer Required

The number that identifies the issue.

artifact_number integer Required

The artifact number within the issue.

Body parameters
Name, Type, Description
name string

The new human-readable name of the artifact.

body string

The new artifact content.

HTTP response status codes for "Update an issue artifact"

Status codeDescription
200

The updated artifact.

404

Resource not found

410

Gone

422

Validation failed, or the endpoint has been spammed.

429

Artifact writes are temporarily throttled. Retry after the indicated delay.

503

Service unavailable

Code samples for "Update an issue artifact"

If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.

Request example

patch/repos/{owner}/{repo}/issues/{issue_number}/artifacts/{artifact_number}
curl -L \ -X PATCH \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2026-03-10" \ https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/artifacts/ARTIFACT_NUMBER \ -d '{"name":"Revised implementation plan","body":"## Plan\n\nBuild and validate the feature."}'

The updated artifact.

Status: 200
{ "id": 42, "number": 1, "type": "plan", "name": "Revised implementation plan", "body": "## Plan\n\nBuild and validate the feature.", "body_html": "<h2>Plan</h2>\n<p>Build and validate the feature.</p>", "creator": { "login": "octocat", "id": 1 }, "updated_by_actor": { "login": "monalisa", "id": 2 }, "created_at": "2026-09-21T15:00:00Z", "updated_at": "2026-09-21T16:00:00Z" }

Delete an issue artifact

Permanently deletes an artifact attached to an issue.

Deleting an artifact requires permission to update the issue.

Fine-grained access tokens for "Delete an issue artifact"

This endpoint works with the following fine-grained token types:

The fine-grained token must have the following permission set:

  • "Issues" repository permissions (write)

Parameters for "Delete an issue artifact"

Headers
Name, Type, Description
accept string

Setting to application/vnd.github+json is recommended.

Path parameters
Name, Type, Description
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.

issue_number integer Required

The number that identifies the issue.

artifact_number integer Required

The artifact number within the issue.

HTTP response status codes for "Delete an issue artifact"

Status codeDescription
204

The artifact was deleted successfully. No content is returned.

404

Resource not found

410

Gone

429

Artifact writes are temporarily throttled. Retry after the indicated delay.

503

Service unavailable

Code samples for "Delete an issue artifact"

If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.

Request example

delete/repos/{owner}/{repo}/issues/{issue_number}/artifacts/{artifact_number}
curl -L \ -X DELETE \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2026-03-10" \ https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/artifacts/ARTIFACT_NUMBER

The artifact was deleted successfully. No content is returned.

Status: 204