Authentication
Signing endpoints split into two groups based on how they authenticate:| Group | Auth method | Use case |
|---|---|---|
| App endpoints | clientId + clientSecret in body | Server-to-server, creating requests on behalf of users |
| Session endpoints | Authorization: Bearer AVE_SESSION_TOKEN | Authenticated Ave user managing their own keys and requests |
App endpoints
POST /api/signing/request
Creates a signature request for a specific identity. Call this from your server — never from the browser.
Request body:
Your app’s client ID.
Your app’s client secret.
UUID of the Ave identity that will sign the request. This is the
sub claim from the user’s id_token. The identity must have a signing key set up.The string the user will see and sign. Keep it human-readable. Maximum 10,000 characters.
Arbitrary JSON metadata attached to the request. Not shown to the user in the signing UI but persisted with the record.
How long the request stays active before expiring. Minimum
60, maximum 3600.UUID for this signing request. Use it to present the signing UI and poll for status.
ISO 8601 timestamp when the request expires.
Ed25519 public key for this identity in base64. Store it if you want to verify signatures locally.
| Status | Error | Cause |
|---|---|---|
400 | invalid_request | Missing required field |
401 | invalid_client | clientId or clientSecret mismatch |
404 | identity_not_found | identityId does not exist |
422 | no_signing_key | Identity has not set up a signing key |
GET /api/signing/request/:requestId/status
Returns the current status of a signing request.
Query parameters:
Your app’s client ID. Only requests belonging to this app are accessible.
Current state:
pending, signed, denied, or expired.If the request has passed its expiresAt timestamp and is still pending, the server automatically transitions it to expired when this endpoint is queried.The Ed25519 signature in base64. Present only when
status is signed.ISO 8601 timestamp when the request was resolved. Present when
status is signed or denied.| Status | Cause |
|---|---|
403 | Request does not belong to the provided clientId |
404 | Request not found |
GET /api/signing/public-key/:handle
Returns the Ed25519 public key for an identity by its handle (username). Use this to verify signatures independently without calling the verify endpoint.
Path parameters:
The identity’s handle (username, without
@).The identity handle.
Ed25519 public key in base64.
When the signing key was created.
| Status | Cause |
|---|---|
404 | Identity not found |
404 | Identity has no signing key |
POST /api/signing/verify
Verifies a message/signature/publicKey tuple. Use this as a server-side verification step before executing any side effect triggered by a signature.
Request body:
The signed payload string, exactly as it appeared in the signing request.
The Ed25519 signature in base64, from the signed request status response.
The Ed25519 public key in base64, from the create request response or public key endpoint.
true if the signature is cryptographically valid for the message and key. false otherwise.Present when
valid is false. Describes why verification failed.Session-authenticated endpoints
These endpoints require an Ave session token in theAuthorization header. They are used by authenticated Ave users to manage their own signing keys and view/act on signing requests.
Key management
GET /api/signing/keys
GET /api/signing/keys
Returns all signing keys for the authenticated user’s identities.
GET /api/signing/keys/:identityId
GET /api/signing/keys/:identityId
Returns the signing key for a specific identity owned by the authenticated user. Returns
404 if the identity has no signing key or does not belong to the user.POST /api/signing/keys/:identityId
POST /api/signing/keys/:identityId
Creates a signing key for the specified identity. The identity must belong to the authenticated user and must not already have a signing key.
PUT /api/signing/keys/:identityId
PUT /api/signing/keys/:identityId
Rotates (replaces) the signing key for the specified identity.
Request interaction
GET /api/signing/requests
GET /api/signing/requests
Returns pending signing requests for the authenticated user’s identities.
GET /api/signing/requests/:requestId
GET /api/signing/requests/:requestId
Returns details of a specific signing request targeted at the authenticated user.
POST /api/signing/requests/:requestId/sign
POST /api/signing/requests/:requestId/sign
Signs the request. Identity ownership is enforced. Request must be in
pending state. The server validates the cryptographic signature format before accepting.POST /api/signing/requests/:requestId/deny
POST /api/signing/requests/:requestId/deny
Denies the request. Request must be in
pending state.Demo endpoint
POST /api/signing/demo/request creates a signing request without app credentials. It is reserved for the Ave playground and demo tooling. Do not use in production integrations.