Exchange credentials.
Get a verified token.
Get a verified token in one guided workflow. Choose a provider, enter the fields required by its OAuth flow, and complete authorization, token exchange, and verification, all in one place.
Example workflow
Pick a provider and run a simulated handshake
- Enter app detailsShop domainClient IDClient secretGrant typeStep 1
- Exchange credentials
POST {shop}.myshopify.com/admin/oauth/access_tokenStep 2 - Verify the token
GET {shop}.myshopify.com/admin/api/{version}/shop.jsonStep 3
- Enter app detailsShort-lived tokenApp secretStep 1
- Exchange credentials
GET graph.instagram.com/access_tokenStep 2 - Verify the token
GET graph.facebook.com/v23.0/meStep 3
- Enter app detailsClient IDClient secretRedirect URIAuthorization codeStep 1
- Exchange credentials
POST api.hubapi.com/oauth/v3/tokenStep 2 - Verify the token
GET api.hubapi.com/oauth/v3/access-tokens/{token}Step 3
- Enter app detailsClient IDClient secretRedirect URIAuthorization coderealmIdStep 1
- Exchange credentials
POST oauth.platform.intuit.com/oauth2/v1/tokens/bearerStep 2 - Verify the token
GET accounts.platform.intuit.com/v1/openid_connect/userinfoStep 3
- Enter app detailsClient IDClient secretRedirect URIAuthorization codeStep 1
- Exchange credentials
POST slack.com/api/oauth.v2.accessStep 2 - Verify the token
POST slack.com/api/auth.testStep 3
Simulated preview. Nothing is sent and no credentials are needed.
Built out of frustration.
OAuth Hub makes the OAuth handshake simple, repeatable, and painless.
Different providers call the same thing different names. Redirect URLs have to match character-for-character. Authorization codes expire. Some APIs return errors with a 200 OK. Refresh tokens rotate. PKCE shows up when you least expect it.
client_id ≠ app_key ≠ RuNameSame thing. Different names.
Providers love their own terminology. We use it too, so you always know exactly what goes where and what gets sent.
redirect_uri_mismatchOne character can break the whole flow.
See the registered redirect value while you configure each provider, then catch the callback without digging through logs.
invalid_grantCodes shouldn’t expire while you’re copying them.
The callback captures the authorization code and state for you, then clears them from the URL automatically.
200 OK {"ok": false}A 200 OK doesn’t always mean success.
We inspect the response body for provider-specific errors instead of trusting the HTTP status alone.
refresh_token rotatedRefresh tokens don’t follow one set of rules.
Get the provider’s refresh requirements up front, check token age, and see exactly when a token is due to expire.
code_verifier requiredPKCE: required sometimes, essential when it is.
OAuth Hub knows which providers require PKCE and surfaces the fields you actually need, nothing more, nothing less.
Three steps.
One verified token.
- 01
Prepare
Pick a provider and enter your app’s details.
- 02
Exchange
Authorize and swap the code for tokens.
- 03
Verify
Test the token against the provider.
Who it's for
For the people who
wire things together.
OAuth Hub is for anyone who needs to get through an OAuth flow, get a real token, and keep moving.
Web agencies
Get a client authorized and verified while you’re on the call, not three email threads later.
Freelance developers
Need a token for a one-off integration? Run the flow, get the token, and move on. No throwaway OAuth code required.
Software engineers
Inspect the token you actually received: verify it, check its scopes, and see exactly what the provider returns.
Use the form.
Or call the endpoint.
Or build your own flow.
The page runs on the same server routes you can call from your own tooling. Provider not listed? Describe any OAuth 2.0 provider, run the flow, and export it as code.
const res = await fetch('/api/shopify/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
shopDomain: 'your-store.myshopify.com',
clientId,
clientSecret,
}),
});
const { token } = await res.json();
// verify the token in the next request