Skip to main content

OAuth Authorizations

The Migrations API is only available to authenticated organization owners.

You can use this API to manage the access OAuth applications have to your account. You can only access this API via Basic Authentication using your username and password, not tokens.

If you or your users have two-factor authentication enabled, make sure you understand how to work with two-factor authentication.

List your grants

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

You can use this API to list the set of OAuth applications that have been granted access to your account. Unlike the list your authorizations API, this API does not manage individual tokens. This API will return one entry for each OAuth application that has been granted access to your account, regardless of the number of tokens an application has generated for your user. The list of OAuth applications returned matches what is shown on the application authorizations settings screen within GitHub. The scopes returned are the union of scopes authorized for the application. For example, if an application has one token with repo scope and another token with user scope, the grant will return ["repo", "user"].

get /applications/grants

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

per_pageintegerquery

Results per page (max 100)

Default: 30

pageintegerquery

Page number of the results to fetch.

Default: 1

client_idstringquery

The client ID of your GitHub app.

Code samples

Example

Shell
curl \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/applications/grants
JavaScript @octokit/core.js
await octokit.request('GET /applications/grants', {})
GitHub CLI gh api
gh api \ -H "Accept: application/vnd.github.v3+json" \ /applications/grants

Response

Status: 200
[ { "id": 1, "url": "https://api.github.com/applications/grants/1", "app": { "url": "http://my-github-app.com", "name": "my github app", "client_id": "abcde12345fghij67890" }, "created_at": "2011-09-06T17:26:27Z", "updated_at": "2011-09-06T20:39:23Z", "scopes": [ "public_repo" ] } ]

Status codes

HTTP Status CodeDescription
200

OK

304

Not modified

401

Requires authentication

403

Forbidden

404

Resource not found

Get a single grant

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

get /applications/grants/{grant_id}

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

grant_idintegerpath

grant_id parameter

Code samples

Example

Shell
curl \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/applications/grants/GRANT_ID
JavaScript @octokit/core.js
await octokit.request('GET /applications/grants/{grant_id}', { grant_id: 'GRANT_ID' })
GitHub CLI gh api
gh api \ -H "Accept: application/vnd.github.v3+json" \ /applications/grants/GRANT_ID

Response

Status: 200
{ "id": 1, "url": "https://api.github.com/applications/grants/1", "app": { "url": "http://my-github-app.com", "name": "my github app", "client_id": "abcde12345fghij67890" }, "created_at": "2011-09-06T17:26:27Z", "updated_at": "2011-09-06T20:39:23Z", "scopes": [ "public_repo" ] }

Status codes

HTTP Status CodeDescription
200

OK

304

Not modified

401

Requires authentication

403

Forbidden

Delete a grant

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

Deleting an OAuth application's grant will also delete all OAuth tokens associated with the application for your user. Once deleted, the application has no access to your account and is no longer listed on the application authorizations settings screen within GitHub.

delete /applications/grants/{grant_id}

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

grant_idintegerpath

grant_id parameter

Code samples

Example

Shell
curl \ -X DELETE \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/applications/grants/GRANT_ID
JavaScript @octokit/core.js
await octokit.request('DELETE /applications/grants/{grant_id}', { grant_id: 'GRANT_ID' })
GitHub CLI gh api
gh api \ --method DELETE \ -H "Accept: application/vnd.github.v3+json" \ /applications/grants/GRANT_ID

Response

Status: 204

Status codes

HTTP Status CodeDescription
204

No Content

304

Not modified

401

Requires authentication

403

Forbidden

List your authorizations

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

get /authorizations

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

per_pageintegerquery

Results per page (max 100)

Default: 30

pageintegerquery

Page number of the results to fetch.

Default: 1

client_idstringquery

The client ID of your GitHub app.

Code samples

Example

Shell
curl \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/authorizations
JavaScript @octokit/core.js
await octokit.request('GET /authorizations', {})
GitHub CLI gh api
gh api \ -H "Accept: application/vnd.github.v3+json" \ /authorizations

Response

Status: 200
[ { "id": 1, "url": "https://api.github.com/authorizations/1", "scopes": [ "public_repo" ], "token": "ghu_16C7e42F292c6912E7710c838347Ae178B4a", "token_last_eight": "Ae178B4a", "hashed_token": "25f94a2a5c7fbaf499c665bc73d67c1c87e496da8985131633ee0a95819db2e8", "app": { "url": "http://my-github-app.com", "name": "my github app", "client_id": "abcde12345fghij67890" }, "note": "optional note", "note_url": "http://optional/note/url", "updated_at": "2011-09-06T20:39:23Z", "created_at": "2011-09-06T17:26:27Z", "expires_at": "2011-09-08T17:26:27Z", "fingerprint": "jklmnop12345678" } ]

Status codes

HTTP Status CodeDescription
200

OK

304

Not modified

401

Requires authentication

403

Forbidden

404

Resource not found

Create a new authorization

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

Warning: Apps must use the web application flow to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the blog post.

Creates OAuth tokens using Basic Authentication. If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "Working with two-factor authentication."

To create tokens for a particular OAuth application using this endpoint, you must authenticate as the user you want to create an authorization for and provide the app's client ID and secret, found on your OAuth application's settings page. If your OAuth application intends to create multiple tokens for one user, use fingerprint to differentiate between them.

You can also create tokens on GitHub from the personal access tokens settings page. Read more about these tokens in the GitHub Help documentation.

Organizations that enforce SAML SSO require personal access tokens to be allowed. Read more about allowing tokens in the GitHub Help documentation.

post /authorizations

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

scopesarray of strings or nullbody

A list of scopes that this authorization is in.

notestringbody

A note to remind you what the OAuth token is for.

note_urlstringbody

A URL to remind you what app the OAuth token is for.

client_idstringbody

The OAuth app client key for which to create the token.

client_secretstringbody

The OAuth app client secret for which to create the token.

fingerprintstringbody

A unique string to distinguish an authorization from others created for the same client ID and user.

Code samples

Example

Shell
curl \ -X POST \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/authorizations
JavaScript @octokit/core.js
await octokit.request('POST /authorizations', {})
GitHub CLI gh api
gh api \ --method POST \ -H "Accept: application/vnd.github.v3+json" \ /authorizations

Response

Status: 201
{ "id": 1, "url": "https://api.github.com/authorizations/1", "scopes": [ "public_repo" ], "token": "ghu_16C7e42F292c6912E7710c838347Ae178B4a", "token_last_eight": "Ae178B4a", "hashed_token": "25f94a2a5c7fbaf499c665bc73d67c1c87e496da8985131633ee0a95819db2e8", "app": { "url": "http://my-github-app.com", "name": "my github app", "client_id": "abcde12345fghij67890" }, "note": "optional note", "note_url": "http://optional/note/url", "updated_at": "2011-09-06T20:39:23Z", "created_at": "2011-09-06T17:26:27Z", "expires_at": "2011-10-06T17:26:27Z", "fingerprint": "" }

Status codes

HTTP Status CodeDescription
201

Created

304

Not modified

401

Requires authentication

403

Forbidden

410

Gone

422

Validation failed

Get-or-create an authorization for a specific app

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

Warning: Apps must use the web application flow to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the blog post.

Creates a new authorization for the specified OAuth application, only if an authorization for that application doesn't already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one.

If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "Working with two-factor authentication."

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

put /authorizations/clients/{client_id}

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

client_idstringpath

The client ID of your GitHub app.

client_secretstringbody

Required. The OAuth app client secret for which to create the token.

scopesarray of strings or nullbody

A list of scopes that this authorization is in.

notestringbody

A note to remind you what the OAuth token is for.

note_urlstringbody

A URL to remind you what app the OAuth token is for.

fingerprintstringbody

A unique string to distinguish an authorization from others created for the same client ID and user.

Code samples

Example

Shell
curl \ -X PUT \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/authorizations/clients/Iv1.8a61f9b3a7aba766
JavaScript @octokit/core.js
await octokit.request('PUT /authorizations/clients/{client_id}', { client_id: 'Iv1.8a61f9b3a7aba766' })
GitHub CLI gh api
gh api \ --method PUT \ -H "Accept: application/vnd.github.v3+json" \ /authorizations/clients/Iv1.8a61f9b3a7aba766

if returning an existing token

Status: 200
{ "id": 1, "url": "https://api.github.com/authorizations/1", "scopes": [ "public_repo" ], "token": "ghu_16C7e42F292c6912E7710c838347Ae178B4a", "token_last_eight": "Ae178B4a", "hashed_token": "25f94a2a5c7fbaf499c665bc73d67c1c87e496da8985131633ee0a95819db2e8", "app": { "url": "http://my-github-app.com", "name": "my github app", "client_id": "abcde12345fghij67890" }, "note": "optional note", "note_url": "http://optional/note/url", "updated_at": "2011-09-06T20:39:23Z", "created_at": "2011-09-06T17:26:27Z", "expires_at": "2011-10-06T17:26:27Z", "fingerprint": "" }

Example

Shell
curl \ -X PUT \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/authorizations/clients/Iv1.8a61f9b3a7aba766
JavaScript @octokit/core.js
await octokit.request('PUT /authorizations/clients/{client_id}', { client_id: 'Iv1.8a61f9b3a7aba766' })
GitHub CLI gh api
gh api \ --method PUT \ -H "Accept: application/vnd.github.v3+json" \ /authorizations/clients/Iv1.8a61f9b3a7aba766

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

Status: 201
{ "id": 1, "url": "https://api.github.com/authorizations/1", "scopes": [ "public_repo" ], "token": "ghu_16C7e42F292c6912E7710c838347Ae178B4a", "token_last_eight": "Ae178B4a", "hashed_token": "25f94a2a5c7fbaf499c665bc73d67c1c87e496da8985131633ee0a95819db2e8", "app": { "url": "http://my-github-app.com", "name": "my github app", "client_id": "abcde12345fghij67890" }, "note": "optional note", "note_url": "http://optional/note/url", "updated_at": "2011-09-06T20:39:23Z", "created_at": "2011-09-06T17:26:27Z", "expires_at": "2011-10-06T17:26:27Z", "fingerprint": "" }

Status codes

HTTP Status CodeDescription
200

if returning an existing token

201

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

304

Not modified

401

Requires authentication

403

Forbidden

422

Validation failed

Get-or-create an authorization for a specific app and fingerprint

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

Warning: Apps must use the web application flow to obtain OAuth tokens that work with GitHub SAML organizations. OAuth tokens created using the Authorizations API will be unable to access GitHub SAML organizations. For more information, see the blog post.

This method will create a new authorization for the specified OAuth application, only if an authorization for that application and fingerprint do not already exist for the user. The URL includes the 20 character client ID for the OAuth app that is requesting the token. fingerprint is a unique string to distinguish an authorization from others created for the same client ID and user. It returns the user's existing authorization for the application if one is present. Otherwise, it creates and returns a new one.

If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "Working with two-factor authentication."

put /authorizations/clients/{client_id}/{fingerprint}

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

client_idstringpath

The client ID of your GitHub app.

fingerprintstringpath
client_secretstringbody

Required. The OAuth app client secret for which to create the token.

scopesarray of strings or nullbody

A list of scopes that this authorization is in.

notestringbody

A note to remind you what the OAuth token is for.

note_urlstringbody

A URL to remind you what app the OAuth token is for.

Code samples

Example

Shell
curl \ -X PUT \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/authorizations/clients/Iv1.8a61f9b3a7aba766/FINGERPRINT
JavaScript @octokit/core.js
await octokit.request('PUT /authorizations/clients/{client_id}/{fingerprint}', { client_id: 'Iv1.8a61f9b3a7aba766', fingerprint: 'FINGERPRINT' })
GitHub CLI gh api
gh api \ --method PUT \ -H "Accept: application/vnd.github.v3+json" \ /authorizations/clients/Iv1.8a61f9b3a7aba766/FINGERPRINT

if returning an existing token

Status: 200
{ "id": 1, "url": "https://api.github.com/authorizations/1", "scopes": [ "public_repo" ], "token": "ghu_16C7e42F292c6912E7710c838347Ae178B4a", "token_last_eight": "Ae178B4a", "hashed_token": "25f94a2a5c7fbaf499c665bc73d67c1c87e496da8985131633ee0a95819db2e8", "app": { "url": "http://my-github-app.com", "name": "my github app", "client_id": "abcde12345fghij67890" }, "note": "optional note", "note_url": "http://optional/note/url", "updated_at": "2011-09-06T20:39:23Z", "created_at": "2011-09-06T17:26:27Z", "expires_at": "2011-10-06T17:26:27Z", "fingerprint": "jklmnop12345678" }

Example

Shell
curl \ -X PUT \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/authorizations/clients/Iv1.8a61f9b3a7aba766/FINGERPRINT
JavaScript @octokit/core.js
await octokit.request('PUT /authorizations/clients/{client_id}/{fingerprint}', { client_id: 'Iv1.8a61f9b3a7aba766', fingerprint: 'FINGERPRINT' })
GitHub CLI gh api
gh api \ --method PUT \ -H "Accept: application/vnd.github.v3+json" \ /authorizations/clients/Iv1.8a61f9b3a7aba766/FINGERPRINT

Response if returning a new token

Status: 201
{ "id": 1, "url": "https://api.github.com/authorizations/1", "scopes": [ "public_repo" ], "token": "ghu_16C7e42F292c6912E7710c838347Ae178B4a", "token_last_eight": "Ae178B4a", "hashed_token": "25f94a2a5c7fbaf499c665bc73d67c1c87e496da8985131633ee0a95819db2e8", "app": { "url": "http://my-github-app.com", "name": "my github app", "client_id": "abcde12345fghij67890" }, "note": "optional note", "note_url": "http://optional/note/url", "updated_at": "2011-09-06T20:39:23Z", "created_at": "2011-09-06T17:26:27Z", "expires_at": "2012-10-06T17:26:27Z", "fingerprint": "jklmnop12345678" }

Status codes

HTTP Status CodeDescription
200

if returning an existing token

201

Response if returning a new token

422

Validation failed

Get a single authorization

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

get /authorizations/{authorization_id}

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

authorization_idintegerpath

authorization_id parameter

Code samples

Example

Shell
curl \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/authorizations/AUTHORIZATION_ID
JavaScript @octokit/core.js
await octokit.request('GET /authorizations/{authorization_id}', { authorization_id: 'AUTHORIZATION_ID' })
GitHub CLI gh api
gh api \ -H "Accept: application/vnd.github.v3+json" \ /authorizations/AUTHORIZATION_ID

Response

Status: 200
{ "id": 1, "url": "https://api.github.com/authorizations/1", "scopes": [ "public_repo" ], "token": "ghu_16C7e42F292c6912E7710c838347Ae178B4a", "token_last_eight": "Ae178B4a", "hashed_token": "25f94a2a5c7fbaf499c665bc73d67c1c87e496da8985131633ee0a95819db2e8", "app": { "url": "http://my-github-app.com", "name": "my github app", "client_id": "abcde12345fghij67890" }, "note": "optional note", "note_url": "http://optional/note/url", "updated_at": "2011-09-06T20:39:23Z", "created_at": "2011-09-06T17:26:27Z", "expires_at": "2011-10-06T17:26:27Z", "fingerprint": "jklmnop12345678" }

Status codes

HTTP Status CodeDescription
200

OK

304

Not modified

401

Requires authentication

403

Forbidden

Update an existing authorization

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

If you have two-factor authentication setup, Basic Authentication for this endpoint requires that you use a one-time password (OTP) and your username and password instead of tokens. For more information, see "Working with two-factor authentication."

You can only send one of these scope keys at a time.

patch /authorizations/{authorization_id}

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

authorization_idintegerpath

authorization_id parameter

scopesarray of strings or nullbody

A list of scopes that this authorization is in.

add_scopesarray of stringsbody

A list of scopes to add to this authorization.

remove_scopesarray of stringsbody

A list of scopes to remove from this authorization.

notestringbody

A note to remind you what the OAuth token is for.

note_urlstringbody

A URL to remind you what app the OAuth token is for.

fingerprintstringbody

A unique string to distinguish an authorization from others created for the same client ID and user.

Code samples

Example

Shell
curl \ -X PATCH \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/authorizations/AUTHORIZATION_ID
JavaScript @octokit/core.js
await octokit.request('PATCH /authorizations/{authorization_id}', { authorization_id: 'AUTHORIZATION_ID' })
GitHub CLI gh api
gh api \ --method PATCH \ -H "Accept: application/vnd.github.v3+json" \ /authorizations/AUTHORIZATION_ID

Response

Status: 200
{ "id": 1, "url": "https://api.github.com/authorizations/1", "scopes": [ "public_repo" ], "token": "ghu_16C7e42F292c6912E7710c838347Ae178B4a", "token_last_eight": "Ae178B4a", "hashed_token": "25f94a2a5c7fbaf499c665bc73d67c1c87e496da8985131633ee0a95819db2e8", "app": { "url": "http://my-github-app.com", "name": "my github app", "client_id": "abcde12345fghij67890" }, "note": "optional note", "note_url": "http://optional/note/url", "updated_at": "2011-09-06T20:39:23Z", "created_at": "2011-09-06T17:26:27Z", "expires_at": "2011-10-06T17:26:27Z", "fingerprint": "jklmnop12345678" }

Status codes

HTTP Status CodeDescription
200

OK

422

Validation failed

Delete an authorization

Deprecation Notice: GitHub will discontinue the OAuth Authorizations API, which is used by integrations to create personal access tokens and OAuth tokens, and you must now create these tokens using our web application flow. The OAuth Authorizations API will be removed on November, 13, 2020. For more information, including scheduled brownouts, see the blog post.

delete /authorizations/{authorization_id}

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

authorization_idintegerpath

authorization_id parameter

Code samples

Example

Shell
curl \ -X DELETE \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/authorizations/AUTHORIZATION_ID
JavaScript @octokit/core.js
await octokit.request('DELETE /authorizations/{authorization_id}', { authorization_id: 'AUTHORIZATION_ID' })
GitHub CLI gh api
gh api \ --method DELETE \ -H "Accept: application/vnd.github.v3+json" \ /authorizations/AUTHORIZATION_ID

Response

Status: 204

Status codes

HTTP Status CodeDescription
204

No Content

304

Not modified

401

Requires authentication

403

Forbidden