Data Query API — 6 public datasets, x402 USDC
by Matchbook Labs · $0.01 / call
Pay-per-call query API over six datasets, same data as the free Data Vault catalog, full rows. HUD Fair Market Rents FY2026 (51,895 ZIP rows + 3,229 county rows), NFL games 1999-2026 with closing odds (7,548), Airbnb listings summary for 6 US cities, Superteam Earn bounty snapshot (28, full text), Solana earning-rail research (25). Tools: list_datasets() for the catalog, sample_dataset(slug) for 22 free rows, query_<dataset>(where, limit, offset) for full filtered queries. Filter examples: state=TX, fmr_2br>1500, season=2025. Direct x402 rail: GET /query/<slug> = $0.01 per call in USDC on Base, settled to a non-custodial wallet; free samples at /sample/<slug>; catalog at /datasets. Read-only, no key needed. Licenses: US gov public domain, CC BY 4.0.
Reported by this server's own tools/list, refreshed automatically.
This listing is paid, so it is not a server your client connects to — the seller's endpoint stays private and the call is settled through the FiatDock gateway. Install FiatDock once, then invoke this listing by id.
1. Paste this into your MCP client config (Claude Desktop, Cursor, Windsurf, Gemini CLI). Click the block to select all, then copy.
{
"mcpServers": {
"fiatdock": {
"command": "npx",
"args": [
"-y",
"fiatdock-mcp"
],
"env": {
"AGENT_PRIVATE_KEY": "0x..."
}
}
}
}
Replace 0x... with the private key of a Base wallet that actually holds USDC — that key is what signs the payment. Leave the placeholder in and nothing crashes, but the call below returns a 402 price quote instead of buying.
2. Then have your agent call:
call_service({ id: "svc_7ef6ef5c-3161-41d7-84cb-56ff083f08d5", args: { … } })
Listing id: svc_7ef6ef5c-3161-41d7-84cb-56ff083f08d5 · networks: base · paid per call via x402 (100% to the seller — FiatDock takes 0% of this listing's calls right now, and the buyer makes a single x402 payment)
Not sure what args to send? get_service({ id: "svc_7ef6ef5c-3161-41d7-84cb-56ff083f08d5", includeSchemas: true }) returns the argument names and types — free, and it is the only way to get them.
No FiatDock package needed: POST https://fiatdock.com/s/svc_7ef6ef5c-3161-41d7-84cb-56ff083f08d5 with the tool's arguments as a JSON body. An unpaid request answers 402 with the exact price; a standard x402 client signs it and resends. Node, with the official x402 packages:
// npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const pay = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:*", client: new ExactEvmScheme(privateKeyToAccount(process.env.AGENT_PRIVATE_KEY)) }],
});
const r = await pay("https://fiatdock.com/s/svc_7ef6ef5c-3161-41d7-84cb-56ff083f08d5", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ /* the tool's arguments */ }),
});
console.log(r.status, await r.text());
Argument names and types: GET https://fiatdock.com/v1/marketplace/services/svc_7ef6ef5c-3161-41d7-84cb-56ff083f08d5?include=schemas (free). The wallet pays USDC on Base; You are charged only if the seller actually answers: settlement happens AFTER delivery, never before. A call that returns no answer costs you nothing — but an answer you merely dislike is still a delivered call, and is paid.
Only buyers who completed a paid call can review — verified purchases only.