How to give your AI agent a VIN decoder
Validate a 17-character VIN and return make, model, year, plant and body details plus an ISO 3779 breakdown. Your agent can use it in two ways: pay for each call itself with x402, or use an API key that draws from a balance you load up front. Both cost $0.005 per successful call, and failed calls cost nothing.
Made by NHTSA. Sold by TollNode per call, no subscription. Inputs and prices
For agents: the short version
- Endpoint
- POST https://tollnode.com/api/v1/nodes/vin-decode
- Price
- $0.005 USDC per successful call
- Pay with x402
- No header first; answer the 402 with PAYMENT-SIGNATURE (USDC, Base, eip155:8453)
- Or an API key
- Authorization: Bearer tn_live_… (balance from https://tollnode.com/account)
- Example body
- {"vin":"1HGCM82633A004352"}
- Machine docs
- /llms.txt, /openapi.json, /.well-known/x402
Why give your agent a VIN decoder?
- A car-marketplace agent checks a VIN before listing a vehicle.
- A fleet agent verifies vehicle details in bulk.
Way 1
Pay per call with x402 (no sign-up)
x402 is an open standard that puts payment into normal HTTP. The agent asks, the server answers with the price, and the agent's wallet signs a USDC payment and asks again. Best when the agent should pay for itself.
- 1
Give the agent a wallet with a little USDC on Base
In Claude Code, Cursor or Codex, AgentCash sets up the wallet and adds every TollNode node as a tool. Run it once, then send a few dollars of USDC on the Base network to the address it shows.
terminalnpx agentcash add https://tollnode.com - 2
Ask your agent to use a VIN decoder
Say what you want in plain words, for example “make an image of …”. The agent picks the VIN decoder node, sees the price and pays. From a terminal you can call it directly:
terminalnpx agentcash@latest fetch https://tollnode.com/api/v1/nodes/vin-decode -m POST -b '{"vin":"1HGCM82633A004352"}' - 3
Or pay from your own code
Any x402 client works. In JavaScript:
javascript// npm i @x402/fetch @x402/evm viem import { wrapFetchWithPayment, x402Client } from "@x402/fetch"; import { registerExactEvmScheme } from "@x402/evm/exact/client"; import { privateKeyToAccount } from "viem/accounts"; const signer = privateKeyToAccount(process.env.AGENT_WALLET_KEY); // a wallet holding USDC on Base const pay = wrapFetchWithPayment(fetch, registerExactEvmScheme(new x402Client(), { signer })); const res = await pay("https://tollnode.com/api/v1/nodes/vin-decode", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({"vin":"1HGCM82633A004352"}), }); console.log(await res.json()); - 4
What happens on the wire
The first request comes back as HTTP 402 with the exact price. The client signs and retries with a PAYMENT-SIGNATURE header. TollNode checks the signature, runs VIN decoder, and collects the payment only if the result is usable. A failed call is never settled.
see the 402 yourselfcurl -i -X POST https://tollnode.com/api/v1/nodes/vin-decode \ -H 'content-type: application/json' \ -d '{"vin":"1HGCM82633A004352"}'
Way 2
Account balance + API key
Load a balance once and use an ordinary API key. Best for apps, servers and teams, or code that can't sign payments.
- 1
Create a free account
Sign up with your email. There is no monthly fee.
- 2
Add funds
On your account page, pick $5, $10, $25 or $50 and confirm in a browser wallet such as Coinbase Wallet or MetaMask. You pay in USDC on Base, with no gas fee to pay.
- 3
Create an API key
Name it after the agent or app that uses it. The key is shown once, so store it as an environment variable (TOLLNODE_API_KEY). You can revoke it at any time.
- 4
Call the node
curlcurl -X POST https://tollnode.com/api/v1/nodes/vin-decode \ -H "Authorization: Bearer $TOLLNODE_API_KEY" \ -H "content-type: application/json" \ -d '{"vin":"1HGCM82633A004352"}'javascriptconst res = await fetch("https://tollnode.com/api/v1/nodes/vin-decode", { method: "POST", headers: { Authorization: `Bearer ${process.env.TOLLNODE_API_KEY}`, "content-type": "application/json", }, body: JSON.stringify({"vin":"1HGCM82633A004352"}), }); console.log(await res.json());pythonimport os, requests r = requests.post( "https://tollnode.com/api/v1/nodes/vin-decode", headers={"Authorization": f"Bearer {os.environ['TOLLNODE_API_KEY']}"}, json={"vin":"1HGCM82633A004352"}, ) print(r.json())A successful call returns the result plus an x-tollnode-charged-usd header. If the balance is too low you get HTTP 402 with your balance and a top-up link, and nothing is charged. A wrong or revoked key returns 401.
Which way fits?
| x402 | API key | |
|---|---|---|
| Sign-up | None | Email account |
| Who pays | The agent's own wallet | Your prepaid balance |
| Setup | One command (AgentCash) | Top up once, create a key |
| Price per call | $0.005 | $0.005 |
| Failed call | $0, never settled | $0, hold released |
| Good for | Autonomous agents, Claude Code, Cursor | Apps, servers, teams |
FAQ
- Do I need an account to give my agent VIN decoder?
- No. With x402 your agent pays $0.005 per call from its own USDC wallet on Base, with no sign-up and no API key. An account is optional: it lets you prepay a balance and use a normal API key instead.
- Which way should I choose?
- Pick x402 if your agent already has a wallet or runs in Claude Code, Cursor or Codex with AgentCash. Pick an account and API key if you are building an app, want one bill for a team, or your code cannot sign payments.
- What happens if a call fails?
- Nothing is charged, either way. With x402 the payment is only settled after a usable result. With an API key the amount is held and released again if the call fails, times out or comes back empty.
- Are the prices the same both ways?
- Yes. Each successful call costs $0.005, whether it is paid with x402 or from an account balance.
- How do I add funds to an account?
- Open your account page, pick an amount ($5, $10, $25 or $50) and confirm in a browser wallet such as Coinbase Wallet or MetaMask. You pay in USDC on Base and there is no gas fee to pay.