OAuth Authorizations API
- List your authorizations
- Get a single authorization
- Create a new authorization
- Get-or-create an authorization for a specific app
- Get-or-create an authorization for a specific app and fingerprint
- Update an existing authorization
- Delete an authorization
- Check an authorization
- Reset an authorization
- Revoke all authorizations for an application
- Revoke an authorization for an application
- More Information
You can use this API to manage your OAuth applications. You can only access this API via Basic Authentication using your username and password, not tokens.
Make sure you understand how to work with two-factor authentication if you or your users have two-factor authentication enabled.
Deprecation Notice
The token
attribute is deprecated in all
of the following OAuth Authorizations API responses:
- List your authorizations
- Get a single authorization
-
Get-or-create an authorization for a specific app -
token
is still returned for "create" -
Get-or-create an authorization for a specific app and fingerprint -
token
is still returned for "create" - Update an existing authorization
We're currently offering a migration period allowing applications to opt in to the new Authorization API behavior. This functionality will apply to all API consumers beginning April 20, 2015. Please see the blog post for full details.
In order to reduce the impact of removing the token
attribute,
the OAuth Authorizations API has added a new request attribute
(fingerprint
), added three new response attributes
(token_last_eight
, hashed_token
, and
fingerprint
), and added
one new API.
To access the new API functionality during the migration period, you must
provide a custom media type in the
Accept
header:
application/vnd.github.mirage-preview+json
List your authorizations
GET /authorizations
Response
Status: 200 OK
Link: <https://api.github.com/resource?page=2>; rel="next",
<https://api.github.com/resource?page=5>; rel="last"
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
[
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "",
"token_last_eight": "12345678",
"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",
"fingerprint": "jklmnop12345678"
}
]
Get a single authorization
GET /authorizations/:id
Response
Status: 200 OK
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "",
"token_last_eight": "12345678",
"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",
"fingerprint": "jklmnop12345678"
}
Create a new authorization
If you need a small number of tokens, implementing the web flow
can be cumbersome. Instead, tokens can be created using the OAuth Authorizations API using
Basic Authentication. To create tokens for a particular OAuth application, you
must provide its client ID and secret, found on the OAuth application settings
page, linked from your OAuth applications listing on GitHub. If your OAuth application intends to create multiple tokens for one user you should use fingerprint
to differentiate between them. OAuth tokens
can also be created through the web UI via the Application settings page.
Read more about these tokens on the GitHub Help page.
POST /authorizations
Parameters
Name | Type | Description |
---|---|---|
scopes |
array |
A list of scopes that this authorization is in. |
note |
string |
Required. A note to remind you what the OAuth token is for. |
note_url |
string |
A URL to remind you what app the OAuth token is for. |
client_id |
string |
The 20 character OAuth app client key for which to create the token. |
client_secret |
string |
The 40 character OAuth app client secret for which to create the token. |
fingerprint |
string |
This attribute is only available when using the mirage-preview media type. A unique string to distinguish an authorization from others created for the same client ID and user. |
{
"scopes": [
"public_repo"
],
"note": "admin script"
}
Response
Status: 201 Created
Location: https://api.github.com/authorizations/1
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "abcdefgh12345678",
"token_last_eight": "12345678",
"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",
"fingerprint": ""
}
Get-or-create an authorization for a specific app
This method will create 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.
PUT /authorizations/clients/:client_id
Parameters
Name | Type | Description |
---|---|---|
client_secret |
string |
Required. The 40 character OAuth app client secret associated with the client ID specified in the URL. |
scopes |
array |
A list of scopes that this authorization is in. |
note |
string |
A note to remind you what the OAuth token is for. |
note_url |
string |
A URL to remind you what app the OAuth token is for. |
fingerprint |
string |
This attribute is only available when using the mirage-preview media type. A unique string to distinguish an authorization from others created for the same client and user. If provided, this API is functionally equivalent to Get-or-create an authorization for a specific app and fingerprint. |
{
"client_secret": "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd",
"scopes": [
"public_repo"
],
"note": "admin script"
}
Response if returning a new token
Status: 201 Created
Location: https://api.github.com/authorizations/1
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "abcdefgh12345678",
"token_last_eight": "12345678",
"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",
"fingerprint": ""
}
Response if returning an existing token
Status: 200 OK
Location: https://api.github.com/authorizations/1
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "",
"token_last_eight": "12345678",
"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",
"fingerprint": ""
}
Get-or-create an authorization for a specific app and fingerprint
This API method is only available when using the
mirage-preview media type.
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.
PUT /authorizations/clients/:client_id/:fingerprint
Parameters
Name | Type | Description |
---|---|---|
client_secret |
string |
Required. The 40 character OAuth app client secret associated with the client ID specified in the URL. |
scopes |
array |
A list of scopes that this authorization is in. |
note |
string |
A note to remind you what the OAuth token is for. |
note_url |
string |
A URL to remind you what app the OAuth token is for. |
{
"client_secret": "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd",
"scopes": [
"public_repo"
],
"note": "admin script"
}
Response if returning a new token
Status: 201 Created
Location: https://api.github.com/authorizations/1
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "abcdefgh12345678",
"token_last_eight": "12345678",
"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",
"fingerprint": "jklmnop12345678"
}
Response if returning an existing token
Status: 200 OK
Location: https://api.github.com/authorizations/1
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "",
"token_last_eight": "12345678",
"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",
"fingerprint": "jklmnop12345678"
}
Update an existing authorization
PATCH /authorizations/:id
Parameters
Name | Type | Description |
---|---|---|
scopes |
array |
Replaces the authorization scopes with these. |
add_scopes |
array |
A list of scopes to add to this authorization. |
remove_scopes |
array |
A list of scopes to remove from this authorization. |
note |
string |
A note to remind you what the OAuth token is for. |
note_url |
string |
A URL to remind you what app the OAuth token is for. |
fingerprint |
string |
This attribute is only available when using the mirage-preview media type. A unique string to distinguish an authorization from others created for the same client ID and user. |
You can only send one of these scope keys at a time.
{
"add_scopes": [
"repo"
],
"note": "admin script"
}
Response
Status: 200 OK
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "",
"token_last_eight": "12345678",
"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",
"fingerprint": "jklmnop12345678"
}
Delete an authorization
DELETE /authorizations/:id
Response
Status: 204 No Content
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
Check an authorization
OAuth applications can use a special API method for checking OAuth token
validity without running afoul of normal rate limits for failed login attempts.
Authentication works differently with this particular endpoint. You must use
Basic Authentication when accessing it, where the username is the OAuth
application client_id
and the password is its client_secret
. Invalid tokens
will return 404 NOT FOUND
.
GET /applications/:client_id/tokens/:access_token
Response
Status: 200 OK
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "abcdefgh12345678",
"token_last_eight": "12345678",
"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",
"fingerprint": "jklmnop12345678",
"user": {
"login": "octocat",
"id": 1,
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": false
}
}
Reset an authorization
OAuth applications can use this API method to reset a valid OAuth token without
end user involvement. Applications must save the “token” property in the
response, because changes take effect immediately. You must use
Basic Authentication when accessing it, where
the username is the OAuth application client_id
and the password is its
client_secret
. Invalid tokens will return 404 NOT FOUND
.
POST /applications/:client_id/tokens/:access_token
Response
Status: 200 OK
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "abcdefgh12345678",
"token_last_eight": "12345678",
"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",
"fingerprint": "jklmnop12345678",
"user": {
"login": "octocat",
"id": 1,
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": false
}
}
Revoke all authorizations for an application
OAuth application owners can revoke every token for an OAuth application. You
must use Basic Authentication when calling
this method. The username is the OAuth application client_id
and the password
is its client_secret
. Tokens are revoked via a background job, and it might
take a few minutes for the process to complete.
DELETE /applications/:client_id/tokens
Response
Status: 204 No Content
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
Revoke an authorization for an application
OAuth application owners can also revoke a single token for an OAuth
application. You must use Basic Authentication
for this method, where the username is the OAuth application client_id
and
the password is its client_secret
.
DELETE /applications/:client_id/tokens/:access_token
Response
Status: 204 No Content
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
More Information
It can be a little tricky to get started with OAuth. Here are a few links that might be of help: