API Reference
Complete reference for the Kevo REST API. Base URL: https://api.kevo.ws
Authorization header. The token is the accessToken from a KevoSession. Public auth endpoints use a project identifier or publishable key instead.Authentication
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Health
/healthReturns server health status. No auth required.
{ "status": "ok", "ts": 1743588000000 }Email Auth
/v1/auth/meBearerReturns the current authenticated user, profile metadata, auth methods, and linked email.
{
"user": {
"id": "uuid",
"did": "did:kevo:...",
"email": "[email protected]",
"profile": {
"name": "Jane Doe",
"username": "jane",
"avatarUrl": "https://..."
},
"authMethods": [{ "type": "google", "identifier": "..." }],
"createdAt": "2026-04-02T12:00:00.000Z"
}
}/v1/auth/send-otpSends a 6-digit OTP to the given email address.
POST /v1/auth/send-otp
Content-Type: application/json
{
"email": "[email protected]",
"projectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"publishableKey": "pk_live_..."
}
# Response: 204 No Content/v1/auth/verify-otpVerifies the OTP and issues a session.
POST /v1/auth/verify-otp
Content-Type: application/json
{
"email": "[email protected]",
"code": "123456",
"projectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"publishableKey": "pk_live_..."
}
# Response:
{
"accessToken": "eyJ...",
"expiresIn": 900
}
# Set-Cookie: kevo_refresh_token=...; HttpOnly; Secure; SameSite=Strict/v1/auth/link-email/requestBearerSends an OTP to link an email to the already authenticated user.
/v1/auth/link-email/confirmBearerVerifies the OTP and links the email to the current user account.
POST /v1/auth/link-email/request
Authorization: Bearer <token>
Content-Type: application/json
{ "email": "[email protected]" }
---
POST /v1/auth/link-email/confirm
Authorization: Bearer <token>
Content-Type: application/json
{ "email": "[email protected]", "code": "123456" }
# Response:
{ "ok": true }OAuth (Social)
/v1/auth/googleRedirects to Google OAuth consent screen.
/v1/auth/google/callbackGoogle OAuth callback.
/v1/auth/xRedirects to X OAuth.
/v1/auth/x/callbackX OAuth callback.
/v1/auth/appleRedirects to Apple Sign In.
/v1/auth/apple/callbackApple Sign In callback.
OAuth flows are normally initiated by the SDK popup. You typically do not call these endpoints directly.
Google profile data can include email, name, and picture. X profile data can include name, username, and profile image, but not email. Apple can include email and name, usually during the first consent. Use the link-email endpoints when an authenticated user needs an email for export OTP.
Wallet Auth
/v1/auth/wallet/nonceReturns a sign-in challenge message for an EVM address.
/v1/auth/wallet/verifyVerifies an EVM signature and issues a session.
/v1/auth/sol-wallet/nonceReturns a sign-in challenge message for a Solana address.
/v1/auth/sol-wallet/verifyVerifies a Solana signature and issues a session.
Session
/v1/auth/refreshIssues a new access token using the refresh token cookie.
/v1/auth/logoutCookieInvalidates the refresh token and clears the cookie.
Embedded EVM Wallet
/v1/wallets/meBearerReturns the current user's EVM wallet, or null if none exists.
{
"wallet": {
"id": "uuid",
"address": "0xChecksummedAddress",
"createdAt": "2026-04-02T12:00:00.000Z"
}
}/v1/wallets/me/ensureBearerCreates the current user's EVM wallet if needed, then returns it.
/v1/wallets/me/signBearerSigns an EVM payload such as a message, typed data, transaction, or userOp.
POST /v1/wallets/me/sign
Authorization: Bearer <token>
Content-Type: application/json
{
"kind": "message",
"message": "Hello from Kevo!"
}
# Response:
{ "signature": "0x..." }Embedded Solana Wallet
/v1/wallets/me/solanaBearerReturns the current user's Solana wallet, or null if none exists.
/v1/wallets/me/solana/ensureBearerCreates the current user's Solana wallet if needed, then returns it.
/v1/wallets/me/solana/signBearerSigns a Solana message or transaction payload.
Export
/v1/wallets/me/export/requestBearerSends an OTP to start private key export.
/v1/wallets/me/export/confirmBearerConfirms export of the EVM private key after OTP verification.
/v1/wallets/me/export/solana/confirmBearerConfirms export of the Solana private key after OTP verification.
Delegation
/v1/wallets/me/delegationBearerReturns the active delegation for the current user, or null.
/v1/wallets/me/delegation/grantBearerGrants or replaces a delegation for backend-controlled signing.
/v1/wallets/me/delegation/revokeBearerRevokes the current user's active delegation.
Gas Sponsorship
/v1/wallets/me/sponsor-tx/quoteBearerBuilds and returns the UserOperation quote for an ERC-4337 sponsored send.
/v1/wallets/me/sponsor-tx/submitBearerSubmits the signed sponsored send and returns the outer transaction hash.
Onramp & Transaction Reporting
/v1/wallets/me/onramp/sessionBearerCreates an onramp session for the current user.
/v1/wallets/me/onramp/sessions/:idBearerReturns a single onramp session.
/v1/wallets/me/onramp/sessionsBearerLists onramp sessions for the current user.
/v1/wallets/me/transactionBearerReports a wallet transaction back to Kevo for tracking and webhooks.
Error Model
401 Unauthorized // missing or invalid access token 403 Forbidden // feature disabled or policy violation 404 Not Found // wallet, user, or delegation not found 409 Conflict // duplicate or invalid state transition 422 Unprocessable Entity // malformed request payload 429 Too Many Requests // auth/export/rate limit exceeded 502 / 504 // internal signer or upstream RPC unavailable