GitHub
github.com ↗No approval gate. Register in about 10 minutes and any GitHub user can connect right away. The real decision is OAuth app vs GitHub App.
01Pick your path
repo are acceptable.02Time & effort
- DEVRegister the app5–15 minutessourced[gh-create]
- DEVWire up the OAuth flow + token refresh1–3 hoursinferredOur estimate for a developer using an OAuth library.
- PRODOrg owners approve your app (only if the org restricts OAuth apps)wait 0–3 daysinferred[gh-orgrestrict]No GitHub review. The wait is the customer's org owner, if they enabled restrictions.
03Steps
Get a working connection
GitHub's own docs nudge you toward a GitHub App: fine-grained permissions, user-selected repositories, short-lived tokens. Pick an OAuth app only if you need the simplest act-as-user flow.
Settings → Developer settings → OAuth apps → New OAuth App. Fill in name, homepage URL and authorization callback URL (up to 10 callback URLs). Use only public information; the form warns against internal URLs.
↗ github.com/settings/applications/newGitHub Apps accept URL parameters on the registration page, so an agent can prepare the whole form and you review and click Create. Replace the callback URL with yours.
◆ prepared by agent · Pre-filled GitHub App registration linkhttps://github.com/settings/apps/new?name=my-agent&description=AI agent integration&url=https://example.com&callback_urls[]=https://example.com/oauth/callback&request_oauth_on_install=true&public=true&contents=read&issues=write&webhook_active=false
- Generate a client secret and store it in your secret manageryouinferred
Only you can see it in the app settings. Never commit it. Composio or your backend reads it from env.
'Expire user access tokens' is ON by default for new OAuth apps. Your integration must store and use refresh tokens, or uncheck the box until it does.
For OAuth apps,
read:useranduser:emailcover identity.repogrants full control of private repos, so request it only if the agent writes code.
Make it production-ready
If a customer's org enabled OAuth app access restrictions, members can't authorize your app for org resources until an org owner approves it. Put a 'request approval' note in your onboarding.
04Requirements, scopes & nuances
You'll need
- ▸A GitHub personal account, or admin on the organization that will own the app. sourced[gh-create]
- ▸A user or organization can own up to 100 OAuth apps. sourced[gh-create]
- ▸No privacy policy, domain verification or security review required to go live. inferred[gh-create]
Gotchas
- !OAuth app tokens can reach every repo the user can. Enterprise buyers often require a GitHub App instead. sourced[gh-diff]
- !Org OAuth app access restrictions silently hide org repos from your token until an owner approves the app. sourced[gh-orgrestrict]
- !Expiring tokens are the default. Code that stores only the access token breaks once it expires. sourced[gh-authz]
| Scope / permission | Tier | Note | Evidence |
|---|---|---|---|
| read:user | basic | Read profile data. | sourced[gh-scopes] |
| user:email | basic | Read the user's email addresses. | sourced[gh-scopes] |
| repo | basic | Full control of private repos. No review, but org owners and security teams will push back. | sourced[gh-scopes] |
05If you get blocked
→ The org has OAuth app restrictions. Ask the user to request approval (Settings → Applications) or have an org owner approve it, or switch to a GitHub App installed on the org.
→ The redirect URI must match one of the registered callback URLs exactly (scheme, host, path).
06Evidence: what was tested, sourced, and still uncertain
Sources read
- [gh-create] GitHub Docs — Creating an OAuth app official
- [gh-diff] GitHub Docs — Differences between GitHub Apps and OAuth apps official
- [gh-authz] GitHub Docs — Authorizing OAuth apps official
- [gh-scopes] GitHub Docs — Scopes for OAuth apps official
- [gh-url] GitHub Docs — Registering a GitHub App using URL parameters official
- [gh-orgrestrict] GitHub Docs — About OAuth app access restrictions official
- [composio] Composio — Managed OAuth apps directory official
- [probe] Live HTTP probes run by the agent (dummy client_id, no credentials) probe
Still uncertain
- ? We did not register a real app (that needs a signed-in GitHub account). Step order follows the docs, not a recorded attempt.
- ? The implementation-time estimate is ours, not GitHub's.
- ? GitHub Marketplace listing (optional, for paid apps) has its own review that this guide does not cover.