Tokenized-stock data.
Prices, holdings, and corporate actions for the 194 Robinhood stock tokens — with the share price and the token price kept apart.
Prices, holdings, and corporate actions for the 194 Robinhood stock tokens on Robinhood Chain, sold per call. The catalogue is free so an agent can see what exists before paying; the three data routes are bought through the marketplace.
The number most integrations get wrong
Every stock token carries an ERC-8056 corporate-action multiplier:
token price = underlying share price × multiplier
Robinhood’s REST /prices returns the share price. The on-chain Chainlink feed returns the token price. They are different numbers: 8 of the 194 assets have a multiplier away from 1.0, and CRWD’s is 4.0 — read the wrong one and you are out by 4×.
This service returns both, named share and token, and never mixes them. Money is computed from unrounded inputs and rounded once, at six decimals, because rounding a unit price before multiplying by a quantity pushes the error up with the quantity.
Endpoints
| Endpoint | Paid | |
|---|---|---|
GET /v1/assets | free | The catalogue — what exists, before you pay for anything. |
POST /v1/quote | paid | Share price, token price, multiplier, halt flag. |
POST /v1/holdings | paid | Every tokenized asset a wallet holds, valued. |
POST /v1/corporate-actions | paid | Splits and dividends with their process dates. |
POST /v1/ask | paid | A question in words, answered from the three above. Refuses advice. |
GET /healthz | free | Status and the marketplace signer this service trusts. |
GET /.well-known/agent-card.json | free | The same data as an A2A agent; see below. |
curl -X POST https://market.aeron.sh/s/aeron-rwa-quote \
-H 'content-type: application/json' \
-d '{"symbols":["AAPL","CRWD"]}'That answers 402 first. Pay it with the wallet, or with your own signer.
The paid routes accept calls forwarded by the marketplace and refuse strangers: /healthz names the signer address they trust, which is how a merchant on this rail tells a paid call from an unpaid one.
As an A2A agent
The same skills are published as an A2A 0.3 agent, paid through the A2A x402 extension: x402 v1, scheme exact, USDG on eip155:4663, the same rail as the routes above. The card is at /.well-known/agent-card.json; the JSON-RPC endpoint is POST /a2a with message/send, tasks/get and tasks/cancel. No streaming, no push.
| Skill | Price | |
|---|---|---|
assets | free | The catalogue. |
quote | 0.65 USDG | Share price, token price, multiplier, halt flag. |
holdings | 0.80 USDG | Every tokenized stock a wallet holds, valued. |
corporate-actions | 0.65 USDG | Splits, dividends, mergers with process dates. |
ask | 1.00 USDG | A question in words, every figure returned in sources. |
A paid skill takes two messages. The first stops at input-required with the price under metadata["x402.payment.required"]. The second carries the same taskId and a signed authorization under x402.payment.payload, and is settled in the order the rail settles everything:
verify → run the skill → settle → completed, with x402.payment.receipts
Nothing settles until the skill has answered, so an upstream failure costs the buyer nothing. ask is screened before a price exists: a question asking for advice is rejected and never sees a payment request. A replayed authorization fails as DUPLICATE_NONCE before the facilitator is asked. A price stands for ten minutes; after that the task closes itself and the client asks again.
curl -s https://rwa.aeron.sh/a2a -H 'content-type: application/json' -d '{
"jsonrpc":"2.0","id":1,"method":"message/send",
"params":{"message":{"messageId":"m1","role":"user",
"parts":[{"kind":"data","data":{"symbols":["AAPL","CRWD"]}}]}}}'Skills are picked from metadata.skill, or from the shape of the message: a data part with an address is holdings, one with symbols is quote, plain text is ask. The artifact is the body the REST route returns, and ask adds its prose as a text part beside it.
Updated 20 September 2026. Everything on this page is read from the running services; report a drift at github.com/aeronlabs.