curl --request POST \
--url https://relay.mainnet.kuru.io/auth/challenge \
--header 'Content-Type: application/json' \
--data '{"wallet":"0x1111111111111111111111111111111111111111"}'
{
"challengeId": "8c4a11c6eb574d16972fac2a8c85a6dc",
"message": "relay.mainnet.kuru.io wants you to sign in with your Ethereum account:\n0x1111111111111111111111111111111111111111\n...",
"expiresAt": "2026-08-27T10:05:00Z"
}
{
"code": "AUTHENTICATION_FAILED",
"message": "authentication failed",
"retryable": false
}
Public authentication
Create authentication challenge
Create a one-time message for a secondary trading EOA to sign.
POST
/
auth
/
challenge
curl --request POST \
--url https://relay.mainnet.kuru.io/auth/challenge \
--header 'Content-Type: application/json' \
--data '{"wallet":"0x1111111111111111111111111111111111111111"}'
{
"challengeId": "8c4a11c6eb574d16972fac2a8c85a6dc",
"message": "relay.mainnet.kuru.io wants you to sign in with your Ethereum account:\n0x1111111111111111111111111111111111111111\n...",
"expiresAt": "2026-08-27T10:05:00Z"
}
{
"code": "AUTHENTICATION_FAILED",
"message": "authentication failed",
"retryable": false
}
Public endpoint. No JWT or
Authorization header is required. It creates a five-minute challenge for the requested wallet; sign the returned message exactly as received with Ethereum personal_sign.
string
required
Nonzero 20-byte address of the secondary trading EOA. Example:
0x1111111111111111111111111111111111111111.curl --request POST \
--url https://relay.mainnet.kuru.io/auth/challenge \
--header 'Content-Type: application/json' \
--data '{"wallet":"0x1111111111111111111111111111111111111111"}'
string
required
Lowercase 128-bit challenge identifier without a
0x prefix.string
required
Exact UTF-8 SIWE-style message to sign with ERC-191
personal_sign.string
required
Challenge expiration as an ISO 8601 timestamp.
{
"challengeId": "8c4a11c6eb574d16972fac2a8c85a6dc",
"message": "relay.mainnet.kuru.io wants you to sign in with your Ethereum account:\n0x1111111111111111111111111111111111111111\n...",
"expiresAt": "2026-08-27T10:05:00Z"
}
{
"code": "AUTHENTICATION_FAILED",
"message": "authentication failed",
"retryable": false
}
Body
application/json
Trading wallet address
Response
200
Short-lived challenge