Data for agents
The human answer is free. So is most of the data. A machine that wants everything in one call can pay a few cents for it, with its own wallet, in a header. No reader is ever charged.
If you want to point your own assistant at this data rather than build against it, /agents has the settings for Claude, ChatGPT, VS Code, Cursor and Gemini CLI.
Free, keyless
Start here. No key, no rate limit, CORS open. A link back is welcome, not required.
curl https://stocksonchain.io/api/tokens.json curl https://stocksonchain.io/api/tokens/nvda.json curl https://stocksonchain.io/api/events.json curl https://stocksonchain.io/api/tradfi.json curl https://stocksonchain.io/api/history/totals.json curl https://stocksonchain.io/api/history/nvda.json
MCP server (Model Context Protocol)
This site runs a Model Context Protocol server. An agent calls the data as tools instead of fetching JSON and parsing it. There is no API key, no account, no OAuth and no sign-up. The server is read-only. It keeps no session and stores nothing about the caller.
| Endpoint | https://stocksonchain.io/mcp |
| Method | POST only. A GET returns 405, because there is no session and no SSE stream. |
| Transport | Streamable HTTP |
| Protocol versions | 2025-11-25 2025-06-18 2025-03-26 |
| Authentication | None. There is no account here to authenticate against. |
| Server name | stocks-on-chain version 1.0.0 |
| Server card | /.well-known/mcp.json |
| Licence | CC BY 4.0 |
Listed in the official MCP Registry as io.stocksonchain/stocks-on-chain.
Ask it what it can do:
curl -X POST https://stocksonchain.io/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' The tools
search_stocks | Find tokenized stocks by ticker or company name. Returns every match with its issuers and chains. If a ticker is a real stock but has not been tokenized, this reports that too, which is a correct answer rather than an empty result. |
get_stock | Everything known about one stock: every instrument (one per issuer, with the mechanics union describing how it handles corporate actions), every listing under it (chain, contract address, supply, price), and the events recorded against it. Report instruments as the options; listings are addresses. Read mechanics.kind before reaching for any field inside mechanics. |
list_issuers | Every issuer whose tokens are tracked, with the legal wrapper it uses, the chains it issues on, and a link to where that issuer publishes its own rule on who may buy. The rule itself is deliberately not included: it can change without this site noticing, so answer eligibility questions by sending the caller to eligibility.sourceUrl rather than by stating a rule. |
list_chains | Every chain carrying tokenized stocks, with its explorer, and the matrix of which issuer has listed what where. Registry order, which is not a ranking. |
list_events | The corporate-action tape: splits, distributions and multiplier changes read from chain state, each with a transaction hash. Newest first by the time the event took effect, which is chronology and not a ranking. |
get_contract | What this site holds about one address: the name and category our registry records and who told us, plus what the code at that address actually is - its runtime bytecode hash, the implementation behind it if it is a proxy, and how many other addresses we track run byte-identical code. The code half is reproducible: fetch eth_getCode and take its keccak256 and you get the same hash. This never says an address is safe, genuine or correct, and there is no field that could: check it against the issuer before you act on it. |
get_manifest | What this service offers a machine reader: the free keyless endpoints, the bulk dataset and its price if the paid tier is live, and the licence. No human reader is ever charged or asked to connect a wallet. |
Every result carries the time the data was read, the sort key that ordered it, and the same notice the JSON API carries. No tool ranks, rates or scores anything, and no tool takes a sort or an order parameter. An agent cannot ask this server for a leaderboard, because the parameter to ask with does not exist.
The bulk feeds
Two requests that each replace many. They are listed cheapest first - a price order, not a recommendation between them.
| Feed | What it holds | Free equivalent |
|---|---|---|
/api/agent/dataset.json | The current state of everything this site reads for itself, in one request: supply, proven holder counts, corporate-action mechanics, the chains matrix, annualised multiplier growth, the corporate-action tape and the daily aggregate series. Every holder and transfer figure is a proven read; the payload's holderScope block names the chains covered and the method, and an absent field means not proven, never zero. No price, no volume, no market value. | Four free requests: /api/tokens.json, /api/events.json, /api/history/totals.json and /api/registry.json. Those carry the same figures AND the price, volume and market value this feed leaves out. |
/api/agent/history.json | Every tracked stock daily series in one request: one row per UTC day per stock, with the share-equivalent supply, the multiplier and the holder count where recorded. Levels read that day, never deltas; the payload's holderScope block states the holder-count provenance and its date boundary. No price, no volume, no market value. | One free request per stock at /api/history/{slug}.json - 194 of them on 14 Aug 2026, and one more for every stock the registry gains. Those carry the same rows AND the price, volume and market value this feed leaves out. |
curl https://stocksonchain.io/api/agent/dataset.json curl https://stocksonchain.io/api/agent/history.json
Nothing here is sold by withholding it. Every figure in both feeds is also served free, keyless, from the path named beside it. What a payment buys is the request count and the joining, never access to a number you could not otherwise read. Assembling the daily history by hand is one request per stock; there are 1006 stocks as of 12 Sept 2026, and one more with every stock added.
Neither feed carries a price, a 24h volume or a market value. Those come from third-party market data providers rather than from our own chain reads, so we publish them free with their source rather than sell them. Every holder and transfer figure in the feeds is a proven read: reconstructed from chain state, or checked against the token's own totalSupply(). Each payload's holderScope block names the chains covered and the method, and a figure that cannot be proven is absent rather than estimated. Price, volume and market value stay on every page and in every free endpoint, and each stock in the dataset carries a link to the free endpoint that has them.
Paying with x402
Both feeds are free right now while metered access is being switched on. When it goes live they will be priced as in the table below, settled in USDC on base over x402, with the agent wallet, never a reader wallet.
- Request one of the paths above.
- Get back
HTTP 402with anacceptsarray: the price, asset and address. - Pay with your wallet and retry the request with the
X-PAYMENTheader. - The facilitator verifies and settles; the feed returns with an
X-PAYMENT-RESPONSEheader.
| Protocol | x402 |
| Network | base |
| Asset | USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
Price, /api/agent/dataset.json | $0.01 per request |
Price, /api/agent/history.json | $0.05 per request |
| Facilitator | https://x402.org/facilitator |
On 4 August 2026 Cloudflare announced Cloudflare Wallets :
stablecoin wallets that agents pay from, with spending caps set by the account holder. Cloudflare states these
wallets will pay x402-compatible endpoints. This endpoint uses the standard x402 protocol, so an agent with such a
wallet can pay it when the metered tier is live.
Machine-readable terms: /api/agent/manifest.json.
What you accept by paying
Sending a payment accepts the agent tier terms for that request. Reading this site,
calling a free endpoint, or using the MCP server accepts nothing. The 402 response carries the terms URL and the
version, so a caller reads them before it decides to pay.
The data licence does not change when you pay. Everything stays CC BY 4.0,
including the metered feeds. We do not own the figures in them: they are facts read from public blockchains, and
we make no claim over them. The terms cover conduct by a caller who agreed to them, and nothing else.
x402 charges the agent, in an HTTP header, with the agent own wallet. No human reader is ever asked to sign in or
connect a wallet, and that promise is unchanged. The bulk feeds carry the same CC BY 4.0 licence as the free API.