Skip to main content

Default Recommendation

Use hosted /verify or the SDK unless you explicitly need low-level signing control.

Why This Exists

The signature proves the wallet actually approves the verification request. That is what lets NEUS issue a reusable proof receipt instead of trusting a client-side claim.

Low-Level API Path

1

Get the exact signing string from NEUS

Call POST /api/v1/verification/standardize
2

Sign that exact string with the user's wallet

Sign the returned signerString
3

Submit the verification request

Submit the same normalized request body to POST /api/v1/verification
This is an implementation detail for low-level clients. If you want the simplest product path, use hosted verify and avoid exposing this flow directly in your UX.

Canonical Message Format

The server returns a deterministic six-line string from POST /api/v1/verification/standardize. Sign that exact string:
NEUS Verification Request
Wallet: <address>
Chain: <chainId or CAIP-2 chain>
Verifiers: <comma-separated-ids>
Data: <standardized-json>
Timestamp: <unix-ms>
Do not hand-author or edit this message. Always sign the exact server-returned string.

SDK Path

Use standardizeVerificationRequest(...) from @neus/sdk when you need the low-level flow without managing normalization yourself.

Supported Wallets

TypeStandardDescription
EOAEIP-191Standard personal_sign (MetaMask, Coinbase, Rainbow)
Smart ContractEIP-1271Contract wallets (Safe, Argent, Sequence)
CounterfactualEIP-6492Pre-deployed smart accounts not yet on-chain