OAuth + OIDC
Token grants, userinfo, discovery, and delegation management endpoints.
Signing
Signature request lifecycle, verification, and key management.
Security
Hardening checklist for token handling, claims validation, and key safety.
Base URL
Use
api.aveid.net for all API calls. Use aveid.net for user-facing auth pages (sign-in, Connector consent). Never mix the two.Request conventions
Request bodies use JSON except multipart image uploads. The token endpoint accepts both OAuth-standardsnake_case fields and legacy camelCase fields.
Authentication by endpoint family
Public OAuth/OIDC endpoints — no auth required
Public OAuth/OIDC endpoints — no auth required
These endpoints are public and require no credentials:
GET /.well-known/openid-configuration— OIDC discovery metadataGET /.well-known/jwks.json— JWT verification keysGET /.well-known/webfinger— issuer discoveryGET /api/oauth/app/:clientId— app public metadataGET /api/oauth/resource/:resourceKey— Connector resource metadataPOST /api/oauth/token— token grants (credentials validated in request body)
GET /api/oauth/userinfo— requiresAuthorization: Bearer <access_token>
Session-authenticated OAuth management endpoints
Session-authenticated OAuth management endpoints
These require an authenticated Ave session (bearer session token or Ave session cookie):
POST /api/oauth/authorize— grant authorization and produce a redirect URLGET /api/oauth/authorizations— list active authorizationsGET /api/oauth/authorization/:clientId— get authorization for a specific appGET /api/oauth/delegations— list active Connector grantsDELETE /api/oauth/delegations/:delegationId— revoke a Connector grant
Signing endpoints — app credentials in body
Signing endpoints — app credentials in body
App-facing signing endpoints authenticate with
clientId + clientSecret in the request body:POST /api/signing/request— create a signing requestGET /api/signing/request/:requestId/status— poll request statusGET /api/signing/public-key/:handle— look up an identity’s public keyPOST /api/signing/verify— verify a signature
GET /api/signing/keys— list the user’s signing keysPOST /api/signing/keys/:identityId— create a signing keyPUT /api/signing/keys/:identityId— rotate a signing keyPOST /api/signing/requests/:requestId/sign— approve a requestPOST /api/signing/requests/:requestId/deny— deny a request
Identity encryption keys
Identity encryption keys
Encryption keys and Ed25519 signing keys are separate key pairs. Encryption endpoints manage each identity’s encrypted private-key envelope:
GET /api/encryption/public-key/:handle— public encryption-key lookupGET /api/encryption/keys/:identityId— read the authenticated identity’s key envelopePOST /api/encryption/keys/:identityId— create an encryption keyPUT /api/encryption/keys/:identityId— replace its key envelope
PUT /api/signing/keys/:identityId and requires a signature from the existing signing key. Initial signing-key enrollment requires an authenticated session.Browser login sessions
Ave’s browser login sets an HttpOnly session cookie. Login responses contain identities and device details; they do not return asessionToken field.
Device approval starts with POST /api/login/request-approval. Keep both its requestId and requestToken in the requesting browser. Poll POST /api/login/request-status with those two fields. An approved response sets the cookie and delivers the encrypted key transfer once; use that response directly instead of fetching it again. Requests expire after five minutes and remain bound to the original identity if its handle changes.
Notifications carry request metadata or a status change. They never include the requester secret or the encrypted key transfer.
