Implements OpenID Connect.

For usage, see OAuth 2.0 provider.

import { Intuit } from "arctic";

const intuit = new Intuit(clientId, clientSecret, redirectURI);
const url: URL = await intuit.createAuthorizationURL(state, {
	// optional
	scopes // "openid" always included
const tokens: IntuitTokens = await intuit.validateAuthorizationCode(code);
const refreshedTokens: IntuitTokens = await intuit.refreshAccessToken(refreshToken);

Get user profile

Add the profile scope. Optionally add the email scope to get user email, the phone scope to get user phone, or the address scope to get the user address.

const url = await intuit.createAuthorizationURL(state, codeVerifier, {
	scopes: ["profile", "email", "phone", "address"]

Parse the ID token or use the userinfo endpoint. See ID token claims.

const tokens = await intuit.validateAuthorizationCode(code, codeVerifier);
const response = await fetch("", {
	headers: {
		Authorization: `Bearer ${tokens.accessToken}`
const user = await response.json();