Most products use Quickstart: VerifyGate or Hosted Verify, then gateCheck on the server. Use this guide when your backend creates receipts directly, or when you automate NEUS as your own profile.
When you need this
| Need | Use |
|---|
| User verifies in the browser; you only check later | Quickstart — no access key |
| Backend creates receipts without opening NEUS in the browser | verifyFromApp + per-user approval |
| MCP, CI, or raw HTTP as your NEUS profile | Profile access key (npk_*) |
Backend receipt creation (verifyFromApp)
After a user approves your product once, your server can create receipts on their behalf with verifyFromApp. This is not the same as publishing a gate in Hub, which bills hosted checks to your account.
import { NeusClient } from "@neus/sdk";
const client = new NeusClient({
appId: process.env.NEUS_APP_ID,
apiKey: process.env.NEUS_ACCESS_KEY,
});
const receipt = await client.verifyFromApp({
user: { walletAddress: user.walletAddress },
verifier: "ownership-basic",
content: { claim: "User completed onboarding", source: "your-app" },
});
Requirements:
- Active user approval for your
appId and site origin
- Matching app context on the request (
X-Neus-App and origin)
If approval is missing, send the user through Hosted Verify first.
Profile access keys
Create keys under Profile → Account. Use Authorization: Bearer npk_... on server and MCP calls only. Never ship keys in browser bundles.
Access keys identify your builder profile for automation. They do not replace per-user approval for backend receipt creation.
Billing
Published gates are the default billing source. Hosted checkout and server eligibility checks should pass gateId; NEUS resolves the gate owner, usage billing, sponsor precedence, and x402 fallback from that gate.
appId is public attribution for advanced server/app flows. It does not bill your account, and published gate checkout does not require appId or billingWallet.
See Billing.
Next: API Authentication Last modified on June 5, 2026