GET /api/oauth/app/:clientId
Returns app public metadata and active connector resources.
Errors:
404app not found
GET /api/oauth/resource/:resourceKey
Returns active connector resource metadata plus owner app info.
Errors:
404resource not found
POST /api/oauth/authorize (session-authenticated)
Used by authenticated Ave session context to grant app authorization and produce redirect URL with code.
Body fields include:
OAuth client identifier.
Must exactly match one of the app’s registered redirect URIs.
Identity selected by the authenticated user.
Space-separated scopes; validated against app allowlist.
PKCE challenge for public-client authorization.
Required for first E2EE authorization when the app supports E2EE.
Connector resource key when
connector=true.Connector scope set requested by source app.
- Scope validation against app allowlist
- E2EE key required for E2EE app first authorization
- Connector grant create/update with merged scopes
POST /api/oauth/token
Supported grant_type values:
authorization_coderefresh_tokenurn:ietf:params:oauth:grant-type:token-exchange
- refresh_token
- token_exchange
Authorization code grant
Validates code, expiry, redirect URI, and either:- PKCE verifier (if code challenge present), or
- client secret
Opaque bearer token accepted by Ave APIs.
Signed JWT for Ave API authorization. Its audience is Ave’s resource audience.
Returned when
openid scope is granted.Returned when
offline_access scope is granted.Refresh token grant
Validates token hash record, client ownership, and revoked/reuse/expiry state, then rotates refresh token and returns new access+refresh. Reuse detection is scoped to the rotated token lineage that was reused, not unrelated refresh tokens held by the same app on other devices.Token exchange grant (Connector)
Exchanges source app token for delegated target token after grant and scope checks.FedCM endpoints
Ave also exposes an additive FedCM flow for supported browsers.GET /api/oauth/fedcm/config
Returns the Ave FedCM provider configuration.
GET /api/oauth/fedcm/accounts
Returns the currently signed-in Ave identities for the browser session.
POST /api/oauth/fedcm/assertion
Returns either:
- a short-lived Ave FedCM assertion token, or
- a
continue_onURL when consent or E2EE setup must finish in a dialog
POST /api/oauth/fedcm/finalize
Used by Ave’s continuation UI to turn a completed consent step into a short-lived FedCM assertion.
POST /api/oauth/fedcm/exchange
Exchanges a FedCM assertion for the normal token payload. For E2EE apps, the signed FedCM assertion can also carry app_key after Ave’s continuation dialog completes the existing key-unlock flow.
GET /api/oauth/userinfo
Authorization: Bearer <access_token_or_access_token_jwt>
Returns claims based on granted scopes:
- always
sub profile:name,preferred_username,pictureemail:emailuser_id: only when app allowsuser_idscopeorganization: present when the token was issued with Ave Business organization context
Why userinfo may omit fields
Why userinfo may omit fields
Claims are scope-gated. Missing
email or profile fields usually means those scopes were not granted.Accepted token formats
Accepted token formats
The endpoint accepts both opaque
access_token and JWT access_token_jwt when valid and unexpired.401 unauthorizedmissing bearer token401 invalid_tokeninvalid/expired/unresolvable token
GET /api/oauth/organizations
Authorization: Bearer <access_token_or_access_token_jwt>
Lists the active Ave Business organizations for the token identity. Apps use this after a normal sign-in to build a workspace picker, then pass the selected organization id as organizationId in the next authorization request.
Optional query:
When present, Ave verifies that the bearer token belongs to that client.
401 unauthorizedmissing bearer token401 invalid_tokeninvalid/expired/unresolvable token403 invalid_clienttoken does not belong to the requestedclient_id
POST /api/oauth/workspaces
Authorization: Bearer <access_token>
Creates a new Ave Business workspace for the token identity. Apps should call this only after the user confirms that the app will create an Ave-managed workspace.
Body:
Display name for the new Ave workspace.
Verifies that the bearer token belongs to your app.
Must be
true. Set it only after your UI tells the user that this creates an Ave Business workspace.organization.id is the organizationId to use in the next authorization request.
Errors:
400 invalid_requestmismatchedclientIdandclient_id400 workspace_creation_failedthe identity could not create the workspace401 unauthorizedmissing bearer token401 invalid_tokeninvalid/expired/unresolvable token403 invalid_clienttoken is not for a registered Ave app or does not matchclient_id
GET /.well-known/openid-configuration
Returns issuer metadata, endpoints, supported scopes, response types, grant types, and signing algs.
GET /.well-known/jwks.json
Returns signing key set for JWT verification.
GET /.well-known/webfinger?resource=...
Returns issuer discovery link for requested resource.
GET /api/oauth/delegations (session-authenticated)
Lists user connector grants with source app and target resource context.
DELETE /api/oauth/delegations/:delegationId (session-authenticated)
Revokes active delegation grant and records audit log.
After revocation, token-exchange attempts for that grant fail until the user re-authorizes connector access.
