Add pay-per-call pricing to any API in a few lines, with a test mode so agent builders can try it in minutes.
It focuses on the first ten minutes: a working paid endpoint and a working paying agent with fake funds, then a one-line switch to real settlement.
| Route | Price | Calls | Paid | Unpaid (402) | Earned |
|---|---|---|---|---|---|
| GET /v1/forecast | 0.002 USDC | 184 | 151 | 33 | 0.302 USDC |
| GET /v1/tides/:port | 0.004 USDC | 96 | 83 | 13 | 0.332 USDC |
| POST /v1/route-plan | 0.010 USDC | 47 | 41 | 6 | 0.410 USDC |
| GET /v1/alerts | 0.001 USDC | 85 | 61 | 24 | 0.061 USDC |
| GET /v1/historical | 0.003 USDC | 0 | 0 | 0 | 0.000 USDC |
The parts that do the work.
Built for aPI and data providers who want to monetize to agents, and agent developers who want one client for many paid services.
Middleware snippet for Node and edge runtimes that sets a per-route price and returns 402 with payment details
PlannedClient SDK that detects 402, asks the agent wallet to sign a Solana payment, and retries the call
PlannedTest mode with fake balances and a hosted demo endpoint for trying the full loop
PlannedDashboard of calls, paid versus unpaid requests and earnings per route
PlannedDirect settlement to the provider's wallet with no custody and signed receipts for each call
Planned
Client SDK that detects 402, asks the agent wallet to sign a Solana payment, and retries the call.
The SDK wraps fetch. When it sees a 402 it reads the payment details, asks the agent wallet to sign a Solana transfer, and repeats the request with the proof attached.
PlannedWhat happens on one call
Middleware snippet for Node and edge runtimes that sets a per-route price and returns 402 with payment details.
Drop the middleware into a Node server or an edge runtime and list the routes you want to charge for. Requests without a valid payment get a 402 with the amount, token and your wallet address.
Plannedserver.js
import express from "express";
import { nickel } from "@nickel/node";
const app = express();
app.use(nickel({
payTo: "Fq3mT8vYb2KzR7nXcWd5HsJ9pLgA4eUa6BtNyV1xCkQe",
mode: "test",
routes: {
"GET /v1/forecast": { price: "0.002", token: "USDC" },
"POST /v1/route-plan": { price: "0.010", token: "USDC" }
}
}));
app.get("/v1/forecast", (req, res) => res.json({ port: "Tacoma", windKts: 11 }));
app.listen(3000);Test mode with fake balances and a hosted demo endpoint for trying the full loop.
Test mode gives every new agent key a fake USDC balance and a hosted test endpoint, so you can watch a 402, a payment and a retry before touching a real wallet.
PlannedSend a test call
- 402 received: 0.001 USDC to test walletok
- Fake payment signedok
- Retry returned 200 with receipt r_test_0042ok
Dashboard of calls, paid versus unpaid requests and earnings per route.
Every call is counted as paid or unpaid, so you can spot a route priced too high or an agent that never completes the retry.
PlannedUnpaid (402) calls per day
Unpaid requests are falling since the SDK snippet was added
Direct settlement to the provider's wallet with no custody and signed receipts for each call.
Payments settle directly to the wallet in your config. Nickel never holds funds, and each call returns a signed receipt you can match against Solscan.
PlannedReceipts
| Receipt | Route | Amount | Tx | Status |
|---|---|---|---|---|
| r_0187 | /v1/route-plan | 0.010 USDC | 3kPq...9Wte | settled |
| r_0186 | /v1/forecast | 0.002 USDC | 5Hn2...Xr7c | settled |
| r_0185 | /v1/tides/:port | 0.004 USDC | 2Vd8...Lm4a | settled |
| r_0184 | /v1/forecast | 0.002 USDC | 4Ty6...Qb1k | settled |
| r_0183 | /v1/alerts | 0.001 USDC | 8Zc3...Pf5n | confirming |
It focuses on the first ten minutes: a working paid endpoint and a working paying agent with fake funds, then a one-line switch to real settlement.
3 steps from start to first result.
Open by default.
Every screen reads from the same model. Live parts read public onchain data; nothing ever asks your wallet to sign.
Read the docs{
"product": "Nickel",
"network": "solana",
"features": [
{
"name": "Middleware snippet for Node and edge runtimes th",
"status": "planned"
},
{
"name": "Client SDK that detects 402, asks the agent wall",
"status": "planned"
},
{
"name": "Test mode with fake balances and a hosted demo e",
"status": "planned"
},
{
"name": "Dashboard of calls, paid versus unpaid requests ",
"status": "planned"
}
]
}What works today.
Live features work today. Planned ones are next on the roadmap, in this order.
Questions.
Short answers. The docs have the rest.
What is Nickel?
Add pay-per-call pricing to any API in a few lines, with a test mode so agent builders can try it in minutes. It focuses on the first ten minutes: a working paid endpoint and a working paying agent with fake funds, then a one-line switch to real settlement.
What works today?
Nickel is in development. Every feature is on the status list with what ships next, and the app opens in a sample workspace so you can see how it will work.
Do I need a wallet?
No. You can explore without one. Connecting a Solana wallet only shares your public address so Nickel can read your balances; it never asks you to sign a transaction.
Who is it for?
API and data providers who want to monetize to agents, and agent developers who want one client for many paid services.
Middleware snippet for Node and edge runtimes that sets a per-route price and returns 402 with payment details.
Add pay-per-call pricing to any API in a few lines, with a test mode so agent builders can try it in minutes.