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 checks). PassgateIdand reuse satisfied checks viaoptions.reusedVerifierProofs. - Pay — for paid gates, payment happens after verification by default (
executionOrder: "verifyThenCharge"), by card (Stripe) or USDC on Base. - Fulfill — deliver the reward with the verified receipt (
client.fulfillGate(...)orPOST /api/v1/profile/gates/{gateId}/fulfillonapi.neus.network).
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.
Paid gates
The snapshot’smonetization.charge describes pricing:
amountUsd,label,methods(usdc,stripe),cardPayoutReadyexecutionOrder—verifyThenCharge(default): verification completes first, then payment, then fulfill.
- Card —
paymentCheckoutSessionIdfrom the Stripe 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