Put Nishvault before sendTransaction
This keeps your own walkthroughs out of the external funnel metrics and makes it easier to tell whether a real outside builder is progressing.
Mark this browser as owner trafficThis is the shortest self-serve path to stop a programmatic EVM agent from sending blind. Put Nishvault before sendTransaction, confirm one unpaid 402, then run exactly one paid guard on https://api.nishvault.com. The live path is configured for Base mainnet, $0.01, and real USDC revenue.
Fastest first move
Reduce the first decision to one of two cheap actions: one browser click or one terminal paste. Both should end at the same unpaid 402 Payment Required signal before any wallet funding.
- Focused first-check page: /first-unpaid-402.
- Browser-first: open the canonical first-check page and let
autorun=1trigger one live unpaid challenge. - CLI-first: run the combined discovery plus unpaid check below.
- Only after that do you decide whether one paid buyer command is worth running.
Root host to API host path
If you started on https://nishvault.com, this is the measured handoff: trust surface on the root host, then one bridge redirect, then the live API docs and unpaid challenge on https://api.nishvault.com.
https://nishvault.comis the trust host.https://nishvault.com/go/first-checkis the shortest bridge to a real unpaid proof.https://api.nishvault.com/.well-known/x402is the live discovery surface on the API host.https://api.nishvault.com/first-unpaid-402?autorun=1#live-first-checkis the canonical unpaid runtime check.https://api.nishvault.com/quickstartis the paid buyer flow after the unpaid proof passes.
- Root bridge to first check: https://nishvault.com/go/first-check
- Root bridge to quickstart: https://nishvault.com/go/quickstart
- Root bridge to discovery: https://nishvault.com/go/discovery
- Live discovery metadata: /.well-known/x402
- Live protected route:
POST /simulate/transaction-preflight
Hard stop before wallet connect
Do not connect or fund a buyer wallet until the no-wallet unpaid challenge matches discovery. If anything below is missing or inconsistent, stop before the paid path.
- Expected unpaid status: 402
- Expected body field: error = "payment_required"
- Expected helper links: quickstartUrl or browserDemoUrl
- Stop if the route, network, or price do not match discovery
0. No-wallet browser check
Browser unpaid 402 demo
No wallet needed for the first proof step. Click once to send the example payload from your browser and inspect the live payment_required response. Do not fund a buyer wallet unless this exact unpaid challenge looks correct.
{
"chainId": "0x2105",
"from": "0x1111111111111111111111111111111111111111",
"to": "0x2222222222222222222222222222222222222222",
"data": "0x",
"value": "0x0"
}
Click the button to run one live unpaid challenge against /simulate/transaction-preflight.
0b. One-command CLI smoke test
SELLER_BASE_URL=https://api.nishvault.com bash -lc '
curl -sS "$SELLER_BASE_URL/.well-known/x402" | jq "{title, primaryPersona, route, price, network, payTo, quickstartUrl, browserDemoUrl}" &&
curl -sS -H "content-type: application/json" -X POST "$SELLER_BASE_URL/simulate/transaction-preflight" --data '"'"'{"chainId":"0x2105","from":"0x1111111111111111111111111111111111111111","to":"0x2222222222222222222222222222222222222222","data":"0x","value":"0x0"}'"'"' | jq "{error, product, price, network, quickstartUrl, browserDemoUrl}"
'
This is the fastest copy/paste path from discovery to unpaid 402. If the second response is not payment_required, stop and do not move to the paid buyer command.
What you need
- No wallet for the first unpaid check above
- An x402-capable Base mainnet buyer wallet only if you want the paid path
- A small Base mainnet USDC balance and gas
- One copy/paste buyer CLI path, not a dashboard
1. Confirm discovery
curl -sS https://api.nishvault.com/.well-known/x402 | jq '{title, primaryPersona, route, price, network, payTo, quickstartUrl, browserDemoUrl}'
Expected shape: primaryPersona = "programmatic EVM agent builders", route = "/simulate/transaction-preflight", network = "eip155:8453", price = "$0.01".
2. Confirm the unpaid 402 challenge
curl -sS -H 'content-type: application/json' -X POST https://api.nishvault.com/simulate/transaction-preflight --data '{"chainId":"0x2105","from":"0x1111111111111111111111111111111111111111","to":"0x2222222222222222222222222222222222222222","data":"0x","value":"0x0"}' | jq '{error, product, price, network, quickstartUrl, browserDemoUrl}'
Expected shape: payment_required, quickstartUrl, browserDemoUrl, settlement.railReadiness.
3. Run one paid request
X402_BUYER_PRIVATE_KEY=0xYOUR_BASE_MAINNET_BUYER_KEY npm exec nishvault-preflight-buy -- --seller-url https://api.nishvault.com --rpc-url https://mainnet.base.org --executor 0x044f05a0fcf030c53ea6d50ddc5c0a44527c1b47
Recommended single command after the unpaid 402 check. Expected success: one artifact directory, one HTTP 200, one new settlement tx hash, and one matching wallet-credit check.
npx nishvault-preflight-buy --seller-url https://api.nishvault.com --buyer-key 0xYOUR_BASE_MAINNET_BUYER_KEY --rpc-url https://mainnet.base.org --executor 0x044f05a0fcf030c53ea6d50ddc5c0a44527c1b47
Public npm command for the same paid buyer flow.
4. Put it in front of sendTransaction
X402_BUYER_PRIVATE_KEY=0xYOUR_BASE_MAINNET_BUYER_KEY npm exec nishvault-guard-tx -- --seller-url https://api.nishvault.com --to 0x2222222222222222222222222222222222222222 --data 0x --value 0x0
This is the shortest local CLI when the agent already has one transaction shape and you want a paid preflight before send.
npx --package nishvault-preflight-buy nishvault-guard-tx -- --seller-url https://api.nishvault.com --to 0x2222222222222222222222222222222222222222 --data 0x --value 0x0
Public npm command for the same transaction-flow guard.
What this endpoint is for
- Check whether a transaction is likely to revert before broadcast
- See live gas and fee context before send
- Use one paid preflight instead of shipping blind transaction attempts
Next surfaces
- First unpaid check: /first-unpaid-402
- Integration guides: /integrations
- Use-case recipes: /recipes