REST API endpoints for gists

Use the REST API to list, create, update and delete the public gists on GitHub.

About gists

You can use the REST API to view and modify gists. For more information about gists, see Editing and sharing content with gists.

Authentication

You can read public gists anonymously, but you must be signed into GitHub to create gists. To read or write gists on a user's behalf, you need the gist OAuth scope and a token. For more information, see Scopes for OAuth apps.

Truncation

The API provides up to one megabyte of content for each file in the gist. Each file returned for a gist through the API has a key called truncated. If truncated is true, the file is too large and only a portion of the contents were returned in content.

If you need the full contents of the file, you can make a GET request to the URL specified by raw_url. Be aware that for files larger than ten megabytes, you'll need to clone the gist via the URL provided by git_pull_url.

In addition to a specific file's contents being truncated, the entire files list may be truncated if the total number exceeds 300 files. If the top level truncated key is true, only the first 300 files have been returned in the files list. If you need to fetch all of the gist's files, you'll need to clone the gist via the URL provided by git_pull_url.

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.

List gists for the authenticated user

GET /gists

Lists the authenticated user's gists or if called anonymously, this endpoint returns all public gists:

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/gists

Response schema (Status: 200):

Array of Base Gist:

Create a gist

POST /gists

Allows you to add a new gist with one or more files.
Note

Don't name your files "gistfile" with a numerical suffix. This is the format of the automatic naming scheme that Gist uses internally.

Parameters

Headers

Body parameters

HTTP response status codes

Code examples

Creating a gist

Request:

curl -L \
  -X POST \
  https://api.github.com/gists \
  -d '{
  "description": "Example of a gist",
  "public": false,
  "files": {
    "README.md": {
      "content": "Hello World"
    }
  }
}'

Response schema (Status: 201):

List public gists

GET /gists/public

List public gists sorted by most recently updated to least recently updated.
Note: With pagination, you can fetch up to 3000 gists. For example, you can fetch 100 pages with 30 gists per page or 30 pages with 100 gists per page.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/gists/public

Response schema (Status: 200):

Same response schema as List gists for the authenticated user.

List starred gists

GET /gists/starred

List the authenticated user's starred gists:

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/gists/starred

Response schema (Status: 200):

Same response schema as List gists for the authenticated user.

Get a gist

GET /gists/{gist_id}

Gets a specified gist.
This endpoint supports the following custom media types. For more information, see "Media types."

application/vnd.github.raw+json: Returns the raw markdown. This is the default if you do not pass any specific media type.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/gists/GIST_ID

Response schema (Status: 200):

Same response schema as Create a gist.

Update a gist

PATCH /gists/{gist_id}

Allows you to update a gist's description and to update, delete, or rename gist files. Files
from the previous version of the gist that aren't explicitly changed during an edit
are unchanged.
At least one of description or files is required.
This endpoint supports the following custom media types. For more information, see "Media types."

application/vnd.github.raw+json: Returns the raw markdown. This is the default if you do not pass any specific media type.

Parameters

Headers

Path and query parameters

Body parameters

HTTP response status codes

Code examples

Updating a gist

Request:

curl -L \
  -X PATCH \
  https://api.github.com/gists/GIST_ID \
  -d '{
  "description": "An updated gist description",
  "files": {
    "README.md": {
      "content": "Hello World from GitHub"
    }
  }
}'

Response schema (Status: 200):

Same response schema as Create a gist.

Deleting a gist file

Request:

curl -L \
  -X PATCH \
  https://api.github.com/gists/GIST_ID \
  -d '{
  "files": {
    "hello.py": null
  }
}'

Response schema (Status: 200):

Same response schema as Create a gist.

Renaming a gist file

Request:

curl -L \
  -X PATCH \
  https://api.github.com/gists/GIST_ID \
  -d '{
  "files": {
    "hello.py": {
      "filename": "goodbye.py"
    }
  }
}'

Response schema (Status: 200):

Same response schema as Create a gist.

Delete a gist

DELETE /gists/{gist_id}

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X DELETE \
  https://api.github.com/gists/GIST_ID

Response schema (Status: 204):

List gist commits

GET /gists/{gist_id}/commits

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/gists/GIST_ID/commits

Response schema (Status: 200):

Array of Gist Commit:

List gist forks

GET /gists/{gist_id}/forks

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/gists/GIST_ID/forks

Response schema (Status: 200):

Array of Gist Simple:

Fork a gist

POST /gists/{gist_id}/forks

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X POST \
  https://api.github.com/gists/GIST_ID/forks

Response schema (Status: 201):

Check if a gist is starred

GET /gists/{gist_id}/star

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/gists/GIST_ID/star

Response schema (Status: 204):

Star a gist

PUT /gists/{gist_id}/star

Note that you'll need to set Content-Length to zero when calling out to this endpoint. For more information, see "HTTP method."

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X PUT \
  https://api.github.com/gists/GIST_ID/star

Response schema (Status: 204):

Unstar a gist

DELETE /gists/{gist_id}/star

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X DELETE \
  https://api.github.com/gists/GIST_ID/star

Response schema (Status: 204):

Get a gist revision

GET /gists/{gist_id}/{sha}

Gets a specified gist revision.
This endpoint supports the following custom media types. For more information, see "Media types."

application/vnd.github.raw+json: Returns the raw markdown. This is the default if you do not pass any specific media type.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/gists/GIST_ID/SHA

Response schema (Status: 200):

Same response schema as Create a gist.

List gists for a user

GET /users/{username}/gists

Lists public gists for the specified user:

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/users/USERNAME/gists

Response schema (Status: 200):

Same response schema as List gists for the authenticated user.