OAuth Setup Guides

← All guides

GitHub

1/5
self serve

Self-serve and fast for a personal or org-owned OAuth app: the docs we read describe no app review, verification or fee, so registration is a form you can fill in today; the real friction is organization-level OAuth app access restrictions, which are on by default for new orgs and need an owner to approve. c3c5c6c37c38c39c40c51c52c53c54

Can start today
Yes
Hands-on time
10–30 minutes (estimate)
Approval wait
0 minutes (+ unpublished for some routes)
Confidence
high
Composio managed app
unknown
How this score was computed

Score comes from fixed rules applied to the factors below, for the route to public production use.

review required: nonebusiness verification: nosecurity assessment: nopaid plan or fee required: nopartner or sales gated: nodomain or policy pages required: nouser cap before approval: n/a

Routes

OAuth app under a personal account 1/5 · self serve

A developer building an agent or tool for their own users, where the app is owned by an individual account and does not need organization-owned resources.

Hands-on 10–20 minutes · Wait 0 minutes

  • A GitHub account to own the app. c3
  • An application name, a full homepage URL and an authorization callback URL (description optional). c6
  • Only public-safe information in the app registration; avoid internal URLs and sensitive data. c8

Limits

  • Up to 100 OAuth apps per user or organization.
  • Up to 10 callback URLs per app.
  • OAuth tokens use the user's rate limit of 5,000 requests per hour, and OAuth app rate limits are lower than GitHub Apps' and do not scale.
  • Ten tokens per user/application/scope combination, with ten token creations per hour.
c3c4c5c6c7c8c17c18c20c51c52c53c54
OAuth app owned by an organization, or used against org resources with access restrictions 1/5 · self serve

Hardest route a public product may need

A developer whose app is owned by an organization, or whose users need access to organization-owned private resources where the org has OAuth app access restrictions or an application policy in place.

Hands-on 15–45 minutes · Wait unknown

  • Administrative access to the organization the app is registered under. c3
  • An application name, a full homepage URL and an authorization callback URL (description optional). c6
  • Organization owner approval when OAuth app access restrictions are enabled, or when an organization application policy is active. c37c39c40

Limits

  • Up to 100 OAuth apps per user or organization.
  • Up to 10 callback URLs per app.
  • With access restrictions enabled, members and outside collaborators cannot authorize OAuth app access to org resources until an owner approves.
  • When restrictions are first enabled, existing OAuth apps immediately lose org access; org-owned apps are automatically granted access.
  • If an org removes access from a previously approved app, that app's pre-existing webhooks are disabled and no longer dispatched.
  • OAuth tokens use the user's rate limit of 5,000 requests per hour, and OAuth app rate limits are lower than GitHub Apps' and do not scale.
c3c4c6c7c17c18c37c38c39c40c41c42c43c44c51c52c53c54

Steps — who does what

  1. Sign in to GitHub and open Developer settings You

    Needs you because: login or mfa

    • Sign in to the GitHub account that will own the app (personal account, or an org you administer).
    • Go to profile picture > Settings > Developer settings > OAuth apps.

    https://github.com/settings/developers

    Expected: You see the OAuth apps list with a New OAuth App button (Register a new application on first use).

    ~2 min · Agent has not attempted this step c5c59

  2. Decide app type and owner You

    Needs you because: developer decision

    • GitHub's docs recommend a GitHub App over an OAuth app for fine-grained permissions and short-lived tokens; pick OAuth app only if you need it (for example enterprise-level resources).
    • Choose the owning account: personal account, or an organization you administer. Each owner can hold up to 100 OAuth apps.

    Expected: You know which account will own the app and why you chose OAuth app.

    ~5 min · Agent has not attempted this step c1c3c4c50

  3. Fill in the registration form Agent
    • Provide an application name, a full homepage URL and an authorization callback URL. Description is optional.
    • Keep everything public-safe: no internal URLs or sensitive data.
    • Add up to 10 callback URLs if you need more than one.
    • Check Enable Device Flow if your agent uses the device flow.

    Authorization callback URLhttps://YOUR-APP.example/oauth/callback

    Expected: Form is complete and ready to submit.

    ~10 min · Agent has not attempted this step c6c7c8c9

  4. Submit registration and copy credentials You

    Needs you because: legal acceptance

    • Click Register application.
    • Copy the client ID and generate a client secret; store them outside the repo.

    Expected: App appears in the OAuth apps list with a client ID and secret.

    ~3 min · Agent has not attempted this step c5c6

  5. Choose token expiry setting You

    Needs you because: developer decision

    • Expire user access tokens is on by default. Leave it on if your client supports refresh tokens (8-hour access token, refresh token valid 6 months unused).
    • Uncheck it only if your auth code cannot handle short-lived tokens yet.

    Expected: Token expiry setting matches what your client can handle.

    ~5 min · Agent has not attempted this step c10c11c12

  6. Get organization approval for the app You

    Only for: OAuth app owned by an organization, or used against org resources with access restrictions

    Needs you because: third party action

    • If the org has OAuth app access restrictions, members and outside collaborators cannot authorize the app against org resources; a member requests owner approval and owners are notified.
    • If an organization application policy is active, only an org owner can authorize the installation; a member can request it and an owner approves or denies.
    • Note restrictions are on by default for newly created organizations.

    Expected: An org owner has approved the app, or the org has no restrictions in place.

    Agent has not attempted this step c37c38c39c40

  7. Have a user authorize the app You

    Needs you because: login or mfa

    • A user must interactively authorize the app to get a user access token; requested scopes are shown on the authorization form.
    • Users can grant fewer scopes than requested.

    Expected: User access token issued with the granted scopes.

    ~3 min · Agent has not attempted this step c28c30c45c46

If you get stuck

Org members can authorize the app but it cannot see the organization's private repositories.

Likely cause: The organization has OAuth app access restrictions enabled (default for new orgs), so members and outside collaborators cannot authorize access to org resources.

Fix: Have a member request owner approval; owners are notified of pending requests. Only an org owner can authorize when an application policy is active.

Escalate: Organization owner

c37c38c40

App worked against org resources, then suddenly lost access.

Likely cause: OAuth app access restrictions were enabled for the organization; apps immediately lose access, except org-owned apps which are auto-granted.

Fix: Request owner approval again, or have the org own the app.

Escalate: Organization owner

c42

Webhooks created by the app stop firing after the org removed app access.

Likely cause: Removing access disables (does not delete) pre-existing webhooks created by the app.

Fix: Re-approve the app or recreate the webhooks; webhooks are not cleaned up automatically when a token is deleted.

c44c49

Browser shows a re-authorization prompt instead of the app getting a new token.

Likely cause: Hit the limit of ten tokens per user/app/scope combination or the ten-tokens-per-hour creation rate.

Fix: Reuse stored tokens instead of requesting new ones; complete the re-authorization prompt.

c20c21

Device flow returns slow_down or the user code stops working.

Likely cause: Polling faster than the interval, or the device_code/user_code expired (900 seconds by default).

Fix: Respect the interval (slow_down adds 5 seconds) and restart the device flow when codes expire.

c22c24

Requests start failing with rate-limit errors under load.

Likely cause: OAuth tokens use the user's 5,000 requests/hour limit; OAuth app limits are lower than GitHub Apps' and do not scale.

Fix: Request a rate limit increase for the OAuth app (applies to every token it issues) or reduce request volume.

Escalate: GitHub support

c17c18c19

Developer settings URL redirects to the login page.

Likely cause: You are signed out; the developer console is behind a sign-in wall.

Fix: Sign in to GitHub first.

c59

Gotchas

OAuth configuration

Authorization URL
https://github.com/login/oauth/authorize
Token URL
https://github.com/login/oauth/access_token
Grant types
authorization_code, urn:ietf:params:oauth:grant-type:device_code
PKCE
limited evidence
Redirect URIs
  • Authorization callback URL is required at registration
  • Up to 10 callback URLs per app
  • redirect_uri is strongly recommended on the authorization request
Token lifetimes
Access: 8 hours when expiring tokens are enabled; long-lived by default otherwise; refresh: 6 months without use. Using a refresh token invalidates the old refresh token and access token; refresh cannot change scopes.
App types
  • OAuth App (GitHub recommends GitHub App instead for fine-grained permissions)
ScopePurposeSensitivityTriggers review
repoFull read/write access to public and private repos plus org-owned resourcessensitiveunknown
public_repoRead/write access limited to public repositoriesbasicunknown
offline_accessReturns an expiring access token plus a refresh tokenbasicunknown

What we tested, and what we couldn't

Depth reached: endpoint probes

Live generation reads public documentation and sends unauthenticated requests only. It does not sign in, create an app, or submit anything.

Not attempted

Agent action log (25 actions)
#ActionOutcomeObserved
a1Searched: site:github.com OAuth 2.0 authentication create applicationsuccess6 results
a2Searched: site:github.com developers API OAuth scopessuccess6 results
a3Searched: site:github.com app review marketplace listing certification requirementssuccess6 results
a4Searched: site:github.com API pricing access tiers rate limitssuccess6 results
a5Searched: GitHub github.com OAuth app review approval verification requirementssuccess6 results
a6Searched: GitHub github.com API OAuth scopes redirect URI token expirationsuccess6 results
a7Read https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-appssuccessHTTP 200, 7954 chars
a8Read https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-appsuccessHTTP 200, 2144 chars
a9Read https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-appssuccessHTTP 200, 25570 chars, kept the 11995 most relevant
a10Read https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/differences-between-github-apps-and-oauth-appssuccessHTTP 200, 12067 chars, kept the 11019 most relevant
a11Read https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/troubleshooting-oauth-app-access-token-request-errorsfailedHTTP 404
a12Read https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/troubleshooting-authorization-request-errorsfailedHTTP 404
a13Read https://docs.github.com/en/organizations/managing-oauth-access-to-your-organizations-data/about-oauth-app-access-restrictionssuccessHTTP 200, 3970 chars
a14Read https://www.xnxx.com/search/family+brazzersfailedConnectError:
a15Read https://es.pornhub.com/video/search?search=brazzers+familyfailedConnectError:
a16Read https://github.com/resources/articles/what-is-an-apisuccessHTTP 200, 29414 chars, kept the 10126 most relevant
a17Read https://www.pornpics.com/?q=brazzers+familyfailednot about GitHub
a18Read https://docs.github.com/en/apps/oauth-apps/building-oauth-appssuccessHTTP 200, 1478 chars
a19Read https://docs.github.com/en/apps/using-github-apps/authorizing-github-appssuccessHTTP 200, 4788 chars
a20Read https://docs.github.com/en/apps/oauth-appssuccessHTTP 200, 1108 chars
a21GET /.well-known/oauth-authorization-serversuccessHTTP 404
a22GET /.well-known/openid-configurationsuccessHTTP 404
a23Authorization endpoint with an unregistered client_idsuccessHTTP 302, redirecting to github.com/login
a24Token endpoint with fake credentialssuccessHTTP 404, error code 'Not Found'
a25Developer console without signing insuccessHTTP 302, redirecting to github.com/login

Open questions

Evidence

59 claims behind this guide.

Last verified 2026-10-28; recheck after 2027-01-26. Generated by deepseek-chat / pipeline v0.1 · raw JSON