This is the full version of the wizard in the dashboard. It takes about five minutes, and costs nothing. You'll copy a client ID and a client secret from GitHub into JSONPad, and one URL from JSONPad into GitHub.
If you haven't read it yet, signing in with Google, GitHub and others explains how the whole flow works.
An OAuth app is enough for signing in. GitHub Apps are a different thing, for acting on repositories, and aren't supported here.
A GitHub OAuth app has one authorization callback URL, so through JSONPad is the default for GitHub:
https://api.jsonpad.io/identities/oauth/callback
JSONPad passes each sign-in on to whichever of your identity group's redirect URLs started it, so one GitHub app covers production, staging and localhost, and you never come back here to add an environment.
You can use straight back to your app mode instead, but GitHub then only accepts return pages on the same host as the callback URL, at that path or below it, so you'd need a separate OAuth app for each environment.
JSONPad asks for the read:user and user:email scopes, and uses the account's primary email address, but only when GitHub says it's verified. People who keep their address private still get an identity, just without an email address, so don't rely on having one.
There's nothing to publish or have reviewed: anyone with a GitHub account can sign in as soon as the OAuth app exists. Two things are worth doing:
The redirect_uri MUST match the registered callback URL for this applicationThe callback URL in GitHub doesn't match the one JSONPad used. In "through JSONPad" mode it must be exactly https://api.jsonpad.io/identities/oauth/callback.incorrect_client_credentialsGitHub rejected the client ID and secret together. Generate a new secret and save it in JSONPad; make sure both come from the same OAuth app.Not FoundGitHub doesn't know this client ID at all. Check it was copied from Client ID (not the app's name or its ID in the URL), and that the app hasn't been deleted.bad_verification_codeThe sign-in code expired or was already used. Codes last about ten minutes; start signing in again.access_deniedThe person clicked Cancel on GitHub's authorization screen.No email addressTheir primary address is unverified or hidden. Ask for one in your app and set it on the identity.