Data for agents
The human answer is free. So is most of the data. A bulk feed saves a machine many requests. A paid tier over x402 is written but not live, so the feeds are free now. 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, alphabetical by ticker. 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, in registry order, 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. An address that is a token listing but not in the contract registry returns the listing (stock, issuer, chain) with no code record. 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 and market value this feed leaves out. |
/api/agent/history.json | The daily series of every stock that has one, 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, one for each stock with rows. The payload's coverage block states how many that is. Those carry the same rows AND the price 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; 1006 stocks have a daily series as of 20 Sept 2026.
Neither feed carries a price or a market value, and no 24h volume is published anywhere yet. Prices are our own read of a pool since 17 September 2026, so the old reason for leaving them out is gone; what a paid feed carries is a pricing decision, and this one has not been made. Prices stay free. 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 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
Currently free. The paid tier is not live, and no date is set. If it goes live, the feeds would be priced as in the table below, settled in USDC on base over x402, from the wallet of the agent, never the wallet of a reader.
- 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, from the wallet of the agent. 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.