REST API endpoints for GPG keys

Use the REST API to manage GPG keys of authenticated users.

About user GPG key administration

The data returned in the public_key response field is not a GPG formatted key. When a user uploads a GPG key, it is parsed and the cryptographic public key is extracted and stored. This cryptographic key is what the endpoints in this category will return. This key is not suitable for direct use in programs such as GPG.

If a request URL does not include a {username} parameter then the response will be for the signed-in user (and you must pass authentication information with your request). Additional private information, such as whether a user has two-factor authentication enabled, is included when authenticated through OAuth with the user scope.

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 GPG keys for the authenticated user

GET /user/gpg_keys

Lists the current user's GPG keys.
OAuth app tokens and personal access tokens (classic) need the read:gpg_key scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

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

Response schema (Status: 200):

Array of GPG Key:

Create a GPG key for the authenticated user

POST /user/gpg_keys

Adds a GPG key to the authenticated user's GitHub account.
OAuth app tokens and personal access tokens (classic) need the write:gpg_key scope to use this endpoint.

Parameters

Headers

Body parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X POST \
  https://api.github.com/user/gpg_keys \
  -d '{
  "name": "Octocat'\''s GPG Key",
  "armored_public_key": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nVersion: GnuPG v1\n\nmQINBFnZ2ZIBEADQ2Z7Z7\n-----END PGP PUBLIC KEY BLOCK-----"
}'

Response schema (Status: 201):

Get a GPG key for the authenticated user

GET /user/gpg_keys/{gpg_key_id}

View extended details for a single GPG key.
OAuth app tokens and personal access tokens (classic) need the read:gpg_key scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/user/gpg_keys/GPG_KEY_ID

Response schema (Status: 200):

Same response schema as Create a GPG key for the authenticated user.

Delete a GPG key for the authenticated user

DELETE /user/gpg_keys/{gpg_key_id}

Removes a GPG key from the authenticated user's GitHub account.
OAuth app tokens and personal access tokens (classic) need the admin:gpg_key scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X DELETE \
  https://api.github.com/user/gpg_keys/GPG_KEY_ID

Response schema (Status: 204):

List GPG keys for a user

GET /users/{username}/gpg_keys

Lists the GPG keys for a user. This information is accessible by anyone.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

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

Response schema (Status: 200):

Same response schema as List GPG keys for the authenticated user.