Get a sign-in challenge

Ask for a one-off random string to sign, which proves that whoever answers holds the key right now rather than replaying an old signature. Fetch it immediately before you need it: it can be used once and expires after 60 seconds. Sign it with the crypto wallet's `personal_sign` method, then send the challenge and signature to `POST /wallets/connect/eoa`. Passkey registration and sign-in use the challenges returned by their own `/wallets/connect/passkey/*/options` endpoints instead. No sign-in needed.

GET
/auth/challenge

Response Body

application/json

application/json

application/json

curl -X GET "https://api.dual.network/auth/challenge"
{
  "challenge": "s5f2X8kQvLbA1mZ0pYtR7cJdEwNhGuIoP3qS6rT9vXk",
  "expires_at": "2026-03-06T11:43:00Z"
}
{
  "code": 8,
  "message": "too many requests"
}
{
  "code": 13,
  "message": "internal error"
}