Skip to main content
Default: Hosted Verify or SDK client.verify() - you do not need to read this page to ship. Use this reference when you implement raw POST /api/v1/verification or debug SIGNATURE_VERIFICATION_FAILED / invalid signature responses.

Why

The wallet agrees to the request; NEUS returns a proof ID (proofId / qHash).

Raw HTTP only

If you call the API without the SDK:
  1. Build the verification JSON body you will submit.
  2. POST /api/v1/verification/standardize with that body to signerString (exact bytes to sign).
  3. Sign signerString.
  4. POST /api/v1/verification with the same body + signature.
Do not hand-edit the six-line text. Only sign what standardize returns (or SDK standardizeVerificationRequest) for that exact body.

Troubleshooting

  • Re-run /standardize on the same payload and compare signerString to what the wallet signed.
  • walletAddress, verifierIds, data, signedTimestamp, and chain fields must match between standardize and submit.

Shape

UTF-8, LF newlines.
Portable Proof Verification Request
Wallet: <address>
Chain: <chainId or CAIP-2 chain>
Verifiers: <comma-separated-ids>
Data: <json payload>
Timestamp: <unix-ms>

SDK helpers

import { standardizeVerificationRequest, signMessage } from '@neus/sdk';
Prefer client.verify() when possible: JavaScript SDK | Quickstart

Wallets

TypeStandard
EOAEIP-191
ContractEIP-1271
CounterfactualEIP-6492

How it works

Flow.

API auth

HTTP.

Verifiers

Ids.

CAIP-380

Envelope.