auth endpoints
wallet-based authentication via solana signature
POST
/auth/nonce
generate a nonce for wallet signature authentication
request body
{
"walletAddress": "935yewyPF61Zh1sGa7RsBweHmyVQVnWfzXyyozxjcKXA"
}response
{
"nonce": "abc123def456...",
"message": "Sign this message to authenticate with NeuraNET\n\nWallet: 935ye...cKXA\nNonce: abc123...\nTimestamp: 2024-01-15T10:30:00Z",
"expiresAt": 1705312200000
}POST
/auth/verify
verify wallet signature and get access tokens
request body
{
"walletAddress": "935yewyPF61Zh1sGa7RsBweHmyVQVnWfzXyyozxjcKXA",
"signature": "base64_encoded_signature...",
"message": "Sign this message to authenticate..."
}response
{
"user": {
"id": "user_abc123",
"walletAddress": "935yewy...",
"isOperator": false,
"createdAt": "2024-01-15T10:30:00Z"
},
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "eyJhbGciOiJIUzI1NiIs...",
"expiresAt": 1705315800000
}POST
/auth/refresh
refresh access token using refresh token
request body
{
"refreshToken": "eyJhbGciOiJIUzI1NiIs..."
}response
{
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "eyJhbGciOiJIUzI1NiIs...",
"expiresAt": 1705315800000
}GET
/auth/me
get current authenticated user
headers
Authorization: Bearer <access_token>
response
{
"user": {
"id": "user_abc123",
"walletAddress": "935yewy...",
"isOperator": true,
"createdAt": "2024-01-15T10:30:00Z"
}
}error codes
INVALID_WALLET_ADDRESS400
NONCE_EXPIRED400
INVALID_SIGNATURE401
TOKEN_EXPIRED401
INVALID_REFRESH_TOKEN401