Which API host?
Prefer the SDK on your server. The
neus.network paths are the same contract, proxied for same-origin browser calls.
Lifecycle
- Snapshot — load the public gate: requirements, price, schedule, and reward presence (not the secret reward value). Use
client.getGate(gateId)orGET /api/v1/profile/gates/{gateId}onapi.neus.network. - Eligibility —
GET /api/v1/proofs/check?gateId=...&address=...&includePrivate=true&includeQHashes=trueevaluates the visitor’s existing proofs against every requirement. - Verify — if checks are missing, the visitor completes them (hosted verify link, VerifyGate, or
POST /api/v1/verificationfor signature-based verifiers). PassgateIdand reuse satisfied checks viaoptions.reusedVerifierProofs. - Pay — for paid gates, payment happens after verification by default (
executionOrder: "verifyThenCharge"). Gates with a connected payout account settle through one Stripe checkout session — the visitor picks card or crypto there. Gates with a custom wallet settle by direct USDC on Base. - Fulfill — deliver the reward with the verified
qHash(plus payment evidence for paid gates) viaclient.fulfillGate(...)orPOST /api/v1/gates/{gateId}/fulfill.
Reading the gate check
WhengateId is passed, the response carries a per-requirement data.gate block. gate.allRequiredSatisfied === true is the only signal that checkout is ready. Top-level eligible and matchedCount exist for criteria-only checks and must not be used as gate readiness on their own.
satisfiedVerifierIds/missingVerifierIds— which requirements existing receipts cover.reusedVerifierProofs— verifierId → qHash map (requiresincludeQHashes=true). Pass it asoptions.reusedVerifierProofsonPOST /api/v1/verificationso satisfied checks are not re-run.- Re-run the gate check after every interactive step (OAuth grant, personhood session) before treating checkout as complete. Interactive completions only count once the protocol confirms them here.
Request-time vs receipt-based rules
Each requirement carriesmatch rows ({ path, op, value }). They are enforced at two different moments:
Receipt-based rows mean an existing receipt may not satisfy a stricter gate. For example, a personhood receipt created for a basic gate will not satisfy another gate that also requires
claims.age_min ≥ 21. The visitor must complete the additional check.
For wallet-risk gates, any receipt-based row also requires policyVerified to be true. A failed risk check never satisfies a gate.
Verification links
In the gate builder, choose Verification link. The visitor pastes their own HTTPS URL; NEUS reads JSON from that URL or its conventional.json form and checks whether verified is true.
Builders do not configure fetch targets, callbacks, or provider-specific connectors. The saved gate contains the portable match rows reference.type = url and resolved.verified = true. API clients can use other resolved.* output matches when a source exposes a different public JSON contract. Resolved-link receipts default to five-minute freshness so checkout does not silently reuse old source status.
See Content ownership for the wire shape and resolver safeguards.
Paid gates
The snapshot’smonetization.charge describes pricing:
amountUsd,label,methods(usdc,stripe),cardPayoutReadyexecutionOrder—verifyThenCharge(default): verification completes first, then payment, then fulfill.
stripe— hosted Stripe checkout. One session covers card and crypto; the visitor chooses at checkout. Available when the gate has a connected payout account.usdc— direct on-chain USDC transfer on Base. The only method for custom-wallet payout gates.
- Stripe (card or crypto) —
paymentCheckoutSessionIdfrom the checkout return. - USDC —
paymentTxHashof the on-chain transfer.
gateId + qHash pair and cannot be reused for another checkout (409 PAYMENT_ALREADY_USED).
Fulfillment result
fulfillment.delivery is one of access_granted, redirect, download, or reveal. The secret value appears only here — after verification (and payment) succeeded for the caller’s wallet.
Campaign windows
Gates may carry aschedule (startsAt / endsAt). Outside the window, gate checks report the closed state and verification/fulfillment are refused server-side (GATE_NOT_STARTED, GATE_ENDED). Treat the window as enforced — it is not a UI-only hint.
Next
VerifyGate widget
Drop-in checkout for published gates
Pricing
Plans and credits
Billing
How verification and checkout charges work
API overview
Full HTTP API surface
Verifier catalog
Every check a gate can require
