Skip to the board
LiveSecurities
Tally

Plain JSON over GET.
No key, no SDK.

Every number is read from the contracts on Robinhood Chain through Multicall3 and cached for a few seconds. Every record carries the block it was written in, so anything here can be checked against the chain.

Chain
id 4663
Securities
194
Items
79
Rate limit
cache, then ask

GET /api/v1/record

The board

Every official Stock Token with its live multiplier, supply, share-equivalent, Chainlink price and what holders have recorded against it. The same read the board page is built on.

{
  "chainId": 4663,
  "block": "67440067",
  "count": 194,
  "securities": [
    {
      "symbol": "NVDA",
      "contract": "0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",
      "uiMultiplier": "1000775159164630595",
      "rawSupply": "91795578276200000000000",
      "shareEquivalentSupply": "91866734459973361585779",
      "priceUsd": 222.45,
      "recordedIntentShareEq": 0
    }
  ]
}

GET /api/v1/record/:symbol

One security

Contract facts, the corporate-action ledger read from UIMultiplierUpdated events, every proxy item with its live count, and the redemption queue.

{
  "symbol": "AMC",
  "uiMultiplier": "1000000000000000000",
  "corporateActions": [],
  "items": [
    { "id": "AMC-2026-09-24-1", "closesAt": 1758412800, "open": true,
      "counted": { "total": 0, "settled": false } }
  ],
  "queue": { "requests": 0, "shareEquivalent": 0 }
}

GET /api/v1/positions/:wallet

A wallet

Every Stock Token a wallet holds: raw balance, the issuer's multiplier, the share-equivalent they resolve to, the contract's own balanceOfUI for comparison, and the Chainlink value where a feed exists. Add ?symbol=NVDA for one row.

{
  "wallet": "0x...",
  "block": "67440067",
  "positions": [
    { "symbol": "NVDA", "rawBalance": "32161215030000000000000",
      "uiMultiplier": "1000775159164630595",
      "shareEquivalent": "32186147423120170538143",
      "checks": true, "valueUsd": 6922921.57 }
  ]
}

GET /api/v1/intents/:id

One item's count

The item as the filing describes it, the weight per choice the contract holds, and every wallet behind it with the block its record landed in. Enough to recompute the tally yourself.

{
  "id": "AMC-2026-09-24-1",
  "itemKey": "0x...",
  "open": true,
  "count": { "weightsByChoice": [0,0,0,0], "holders": 0, "settled": false },
  "records": []
}

GET /api/v1/queue

Redemption demand

Depth per security, or one security's numbered places with ?symbol=. Carries the terms text and its sha256, which is the hash stored with every request.

{
  "windowOpen": false,
  "queues": [
    { "symbol": "NVDA", "requests": 0, "shareEquivalent": 0,
      "circulatingShareEq": 91866.73 }
  ]
}

GET /api/v1/feed

Change feed

A JSON Feed of multiplier events, new proxy items and records, newest first. Narrow it with ?type=actions|items|records and ?since=<unix seconds>.

{
  "version": "https://jsonfeed.org/version/1.1",
  "items": [
    { "id": "action:0x...:12", "title": "SPY multiplier +0.172%",
      "_tally": { "type": "action", "symbol": "SPY" } }
  ]
}

GET /api/v1/badge/:wallet

Wallet badge

An SVG for a README or a profile: the wallet's number in the book, how many securities it has recorded on, and the weight counted. Add ?theme=light for light backgrounds.

<img src="https://tally.vote/api/v1/badge/0xYOURWALLET" alt="Tally record" />

GET /api/v1/token

$TALLY

The token's facts, read from its contract once it exists. Before the launch it returns status "not_launched" and a null address, so nothing can quote a placeholder as official.

{ "status": "not_launched", "address": null, "symbol": "TALLY" }

GET /api/v1/pulse

The tape

Chain head, what the market holds and what the book has counted, in one small object. This is what the strip at the top of every page polls.

{ "block": "67440067", "shareEq": 2920000, "intents": 0, "requests": 0 }

Three calls, and a tracker shows share-equivalents

  1. 1

    Positions

    One call per wallet returns every held token with its raw balance, multiplier, share-equivalent and whether the contract agrees.

    /api/v1/positions/{wallet}

  2. 2

    Prices

    Each row carries priceUsd and valueUsd where a Chainlink feed exists. The answer is already multiplier-aware, so never scale it again.

    valueUsd = rawBalance x priceUsd

  3. 3

    Changes

    Poll the feed with since= to pick up multiplier events and new proxy items, and refresh a wallet when a symbol it holds appears.

    /api/v1/feed?type=actions&since={unix}

Label the unit sh-eq and keep the token count beside it for reconciliation/cache reads for 30 seconds; the public RPC behind them is rate limited and Tally already batches it

Embed a security

A live card for one ticker: share-equivalents on file, the multiplier, the value, recorded intent and queue depth, with the intent line printed on the card. It works anywhere an iframe does.

<iframe src="https://tally.vote/embed/NVDA" width="360" height="240"
        style="border:0" loading="lazy" title="NVDA on Tally"></iframe>