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:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
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"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
owner string RequiredThe account owner of the repository. The name is not case sensitive. |
repo string RequiredThe name of the repository without the |
issue_number integer RequiredThe number that identifies the issue. |
| Name, Type, Description |
|---|
type string The artifact type to return. Can be one of: |
per_page integer The number of results per page (max 100). For more information, see "Using pagination in the REST API." Default: |
page integer The page number of the results to fetch. For more information, see "Using pagination in the REST API." Default: |
HTTP response status codes for "List issue artifacts"
| Status code | Description |
|---|---|
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
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/artifactsA 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:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Issues" repository permissions (write)
Parameters for "Create an issue artifact"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
owner string RequiredThe account owner of the repository. The name is not case sensitive. |
repo string RequiredThe name of the repository without the |
issue_number integer RequiredThe number that identifies the issue. |
| Name, Type, Description |
|---|
type string The artifact type. Default: Can be one of: |
name string RequiredThe human-readable name of the artifact. |
body string RequiredThe artifact content. For |
HTTP response status codes for "Create an issue artifact"
| Status code | Description |
|---|---|
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
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:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
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"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
owner string RequiredThe account owner of the repository. The name is not case sensitive. |
repo string RequiredThe name of the repository without the |
issue_number integer RequiredThe number that identifies the issue. |
artifact_number integer RequiredThe artifact number within the issue. |
HTTP response status codes for "Get an issue artifact"
| Status code | Description |
|---|---|
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
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_NUMBERThe 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:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Issues" repository permissions (write)
Parameters for "Update an issue artifact"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
owner string RequiredThe account owner of the repository. The name is not case sensitive. |
repo string RequiredThe name of the repository without the |
issue_number integer RequiredThe number that identifies the issue. |
artifact_number integer RequiredThe artifact number within the issue. |
| 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 code | Description |
|---|---|
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
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:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Issues" repository permissions (write)
Parameters for "Delete an issue artifact"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
owner string RequiredThe account owner of the repository. The name is not case sensitive. |
repo string RequiredThe name of the repository without the |
issue_number integer RequiredThe number that identifies the issue. |
artifact_number integer RequiredThe artifact number within the issue. |
HTTP response status codes for "Delete an issue artifact"
| Status code | Description |
|---|---|
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
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_NUMBERThe artifact was deleted successfully. No content is returned.
Status: 204