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 exact request; NEUS returns a qHash and the complete portableProof envelope to the creator. The signature authenticates the request, not the later verifier outcome.

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.
  • Do not remove nonces or timestamps from data when recomputing qHash; every data field is bound.

Shape

UTF-8, LF newlines.

SDK helpers

Wallets

How it works

Flow.

API auth

HTTP.

Verifiers

Ids.

CAIP-380

Envelope.
Last modified on July 24, 2026