Register an API key
POST /api-keys
Register a new Ed25519 API key for your org. You generate the keypair and submit only the public key — XKOVA never receives or stores private keys. To rotate, register a new key, switch your clients to it, then revoke the old one. Subject to a per-org key quota.
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”object
Hex-encoded 32-byte Ed25519 public key
Example
{ "public_key": "8f2c…a91b", "label": "backend-prod"}Responses
Section titled “ Responses ”Key registered.
object
The request body or parameters failed validation.
Failures return a single human-readable error message; the HTTP status
carries the category (400 validation, 401 auth, 403 refused, 404 missing,
409 conflict, 429 rate limit). When a signing request is refused for a
specific reason, the message names it — for example the amount exceeds a
spend limit, the policy denied the recipient, or the intent signature did
not verify.
object
Stable machine slug (invalid_request, unauthorized, forbidden, not_found, conflict, rate_limited); a refused sign names the reason in the message
Example
{ "error": "amount must be a base-10 integer", "code": "invalid_request"}Missing, malformed, or invalid request signature.
Failures return a single human-readable error message; the HTTP status
carries the category (400 validation, 401 auth, 403 refused, 404 missing,
409 conflict, 429 rate limit). When a signing request is refused for a
specific reason, the message names it — for example the amount exceeds a
spend limit, the policy denied the recipient, or the intent signature did
not verify.
object
Stable machine slug (invalid_request, unauthorized, forbidden, not_found, conflict, rate_limited); a refused sign names the reason in the message
Example
{ "error": "request signature did not verify", "code": "unauthorized"}A quota or rate limit was reached. Retry later.
Failures return a single human-readable error message; the HTTP status
carries the category (400 validation, 401 auth, 403 refused, 404 missing,
409 conflict, 429 rate limit). When a signing request is refused for a
specific reason, the message names it — for example the amount exceeds a
spend limit, the policy denied the recipient, or the intent signature did
not verify.
object
Stable machine slug (invalid_request, unauthorized, forbidden, not_found, conflict, rate_limited); a refused sign names the reason in the message
Example
{ "error": "vault quota reached for this org", "code": "rate_limited"}