v1

latestOpenAPI 3.0.02026-07-22243670.8 KB
Wallet Ownership

Request a wallet ownership challenge

post/v1/wallet-ownership

Request body

chain'ethereum_sepolia' | 'base_sepolia' | 'solana_devnet' | 'ethereum_mainnet' | 'base_mainnet' | 'solana_mainnet' required

The blockchain network the wallet belongs to. EVM chains (e.g. ethereum_sepolia) support both plain and SIWE challenges. Non-EVM chains (e.g. solana_devnet) support plain challenges only.

challenge_type'plain' | 'siwe'

The type of challenge to generate. plain (default) produces a random nonce. siwe produces an EIP-4361 message and requires domain, uri, and statement.

domainstring

Required when challenge_type is siwe; must not be provided for plain challenges. The hostname of the requesting service. Must be a valid hostname (e.g. example.com or app.example.com:3000).

statementstring

Required when challenge_type is siwe; must not be provided for plain challenges. A human-readable message the user is agreeing to. Must not contain newlines. Maximum 256 characters.

uristring

Required when challenge_type is siwe; must not be provided for plain challenges. The URI of the resource being accessed. Must be a valid URI with scheme and host.

wallet_addressstring required

The wallet address to prove ownership of. For EVM chains, must be a valid 40-hex-digit Ethereum address (normalized to lowercase). For non-EVM chains, must not contain whitespace and is limited to 128 characters.

Example request

{
  "chain": "ethereum_sepolia",
  "challenge_type": "plain",
  "domain": "example.com",
  "statement": "Sign in with Ethereum",
  "uri": "https://example.com/login",
  "wallet_address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb1"
}

Response

Successful response.

expires_atstring date-time required

When the challenge expires

messagestring required

The challenge message to sign

Example response

{
  "expires_at": "2025-01-01T00:00:00.000000Z"
}