---
title: "Request a wallet ownership challenge"
method: POST
path: "/v1/wallet-ownership"
tags: ["Wallet Ownership"]
---

# Request a wallet ownership challenge

`POST /v1/wallet-ownership`

## Request body

- CreateWalletOwnershipChallengeRequest — Creates a wallet ownership challenge. Two modes are supported: - **plain** (default): produces a random nonce. Only `wallet_address` and `chain` are required. `domain`, `uri`, and `statement` must not be provided. - **siwe**: produces an EIP-4361 Sign-In with Ethereum message. Requires `domain`, `uri`, and `statement` in addition to `wallet_address` and `chain`. Only supported for EVM chains.
  - `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`.
  - `domain` string — 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`).
  - `statement` string — 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.
  - `uri` string — 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_address` string, 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.

## Response `200`

Successful response.

- WalletOwnershipChallenge
  - `expires_at` string, date-time, required — When the challenge expires
  - `message` string, required — The challenge message to sign

## Other responses

- `default` — Error response.

---

[API](https://skmtc.dev/coinlist/apis/frontline-api.md) · [All operations](https://skmtc.dev/coinlist/apis/frontline-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/coinlist/frontline-api/revisions/fa411ea1bdfb/schema)
