scope parameter of your authorization request. They control what information Ave includes in the tokens and what actions your app can perform.
If a scope is not in the list above, or if your app is not configured to request it, the server silently excludes the corresponding claims. Always check the returned
scope string in the token response to know exactly what was granted.Standard scopes
These are available to all OAuth apps without any special configuration.Required for OIDC. Without this scope, no The
id_token is returned — just an access token.Adds to id_token:sub is the Ave identity UUID. The sid is the permanent user UUID (stable across all identities for the same user).You almost always want this. Without openid, you cannot use Convex auth, validate identity server-side, or get an id_token.Adds display name, username handle, and avatar URL.Adds to Adds to
id_token:/userinfo response:Adds the user’s email address.Adds to Adds to
id_token:/userinfo response:Not all Ave identities have a verified email address. If the user has no email on their identity, this claim is absent even if the scope was granted.
Issues a refresh token alongside the access token.Adds to token response:Without this scope, you get no
refresh_token. When the access_token expires, the user must log in again.Use this for long-lived sessions or background sync scenarios. Store the refresh token in an HTTP-only cookie or your server-side session storage — never in localStorage.Extended scopes
These require explicit app configuration in the developer portal.Exposes the permanent user UUID — stable across all identities for the same physical user. Requires Adds to token response:Only request this when your app has a genuine need for cross-identity user linking. It increases the user consent surface and requires portal configuration.
allowUserIdScope: true in your app config.Adds to access_token_jwt:user_id is not in the id_token. It is in access_token_jwt as uid and in the top-level token response as user_id. If you need it in Convex, you will need to pass it separately or use a Convex mutation to look it up from the sub.Scope-to-token mapping
| Scope | id_token claims added | access_token_jwt claims added | token response fields |
|---|---|---|---|
openid | iss, sub, aud, exp, iat, auth_time, azp, sid | iss, sub, aud, exp, iat, scope, cid, sid | (enables id_token) |
profile | name, preferred_username, picture | — | — |
email | email | — | — |
offline_access | — | — | refresh_token |
user_id | — | uid | user_id |
Organization context claims
Organization claims are not enabled by a separate scope. They appear when the authorization request includes a validorganization_id and the selected identity is an active member of that Ave Business organization.
auth_context: "organization" and match org_id against the workspace being accessed. See Business workspaces.
Connector scopes
Connector flows use resource-defined scopes, not OIDC scopes. The target resource defines what scopes it exposes (for exampleresource.read, resource.write). When a user approves the connector, they grant specific scopes from the resource’s available list.
When you perform the token-exchange grant, requestedScope must be a subset of what was granted. Requesting more than granted returns invalid_scope.
See Connector app-to-app for details.
Requesting scopes safely
Start with the minimum
Begin with
openid profile (or just openid if you do not need display names). Add scopes when a specific feature requires them.Check what was actually granted
Read the
scope field in the token response. It contains the actual granted scopes, which may differ from what you requested if some were rejected.Handle missing claims gracefully
Treat any optional claim (
email, name, etc.) as potentially absent. email requires both the email scope and a verified email on the selected identity. Do not throw or break when a claim is missing.Common mistakes
Requesting user_id without app config
Requesting user_id without app config
If your app does not have
allowUserIdScope enabled, requesting user_id in the scope has no effect. The uid claim will not appear and the user_id field will not be in the token response.Assuming email is always present
Assuming email is always present
Email is present only if you requested
email scope and the identity has a verified email address. If the user has not linked and verified an email yet, Ave blocks the authorization flow until they do. Always treat the claim as optional in your app anyway.Re-requesting scopes on refresh
Re-requesting scopes on refresh
Refresh token grants cannot add new scopes. The new tokens will have the same scopes as the original grant. To get additional scopes, run a new authorization code flow with the new scope.
Confusing sub with user_id
Confusing sub with user_id
sub (identity UUID) is not the same as user_id (user UUID). A user can have multiple identities, each with a different sub. If you store sub as a user identifier and a user creates a second identity, they appear as a different user. Decide upfront whether you identify by identity or by user.