Skip to main content
Minimize exposed data. Interactive flows → hosted verify. Private proofs → owner auth only.

Authentication Model

OperationAuthentication
Verification submission (POST /api/v1/verification)Signature over NEUS Standard Signing String
Proof record by receipt id (GET /api/v1/proofs/{qHash})Public for public proofs; minimal payload for private unless owner-authenticated
Owner-only reads of private proofsAdditional owner signature
Owner-only reads need extra signed headers. Use SDK methods for private proofs.

Do Not

  • Do not treat proof signatures as bearer tokens (they are request-bound)
  • Do not embed secrets in browser bundles
  • Do not log or persist:
    • proof signatures
    • API keys
    • third-party auth credentials or provider tokens

Privacy defaults

client.verify() defaults to private with storeOriginalContent: true. VerifyGate create mode defaults to unlisted public (public + publicDisplay: false) for reuse-first gating. See Security and trust. For raw SDK flows that must power gateCheck without an owner session, set unlisted public explicitly:
{
  privacyLevel: 'public',
  publicDisplay: false,
}
Set storeOriginalContent: false only when your product must not persist original bytes (hash/metadata only).
ControlPurpose
privacyLevelVaulted (private) vs policy-checkable without session (public)
publicDisplayDiscovery vs unlisted
storeOriginalContentRetain original content (default true) vs hash-only
Unlisted public proofs are still public to anyone with the proof id.