Skip to content
BaseHub by wbnns Updated

Tokenized Stocks API

Coinbase runs a small HTTP API that hands back reference data for its tokenized stocks on Base. It is public and read-only, and it needs no API key. One request gets you what would otherwise take several onchain reads per token: the contract address, supply, current multiplier, pause state, and the latest Chainlink reference value.

https://api.coinbase.com/v1/tokenized-stocks
MethodPathReturns
GET/Every tokenized-stock record the API currently exposes.
GET/chainsThe tokenized-stocks protocol contracts, per supported chain.
GET/total-supply/{contract_address}One token’s total supply, normalized by its decimals.

The full schema lives upstream in openapi/tokenized-equities.json.

Terminal window
curl https://api.coinbase.com/v1/tokenized-stocks

The response is a tokens array. Each entry is a v1TokenizedEquityToken:

FieldTypeMeaning
contract_addressstringThe ERC-20 (B20) token contract on Base.
symbolstringTicker symbol of the token.
namestringName of the underlying equity.
decimalsintegerToken decimals.
icon_urlstringIcon for the underlying equity.
total_supplydoubleSupply in token units, already divided by decimals.
isinstringISIN of the underlying equity.
multiplierdoubleCurrent token-to-share scaling factor. 1.0 means no adjustment.
paused_featuresinteger[]Feature flags currently paused on the token contract.
nav_pricedoubleLatest Chainlink NAV/reference value, adjusted for the feed’s decimals.
nav_price_updated_atdate-timeWhen nav_price last changed onchain (the feed’s updatedAt).
Terminal window
curl https://api.coinbase.com/v1/tokenized-stocks/chains

Returns a chains array of v1ChainContractAddresses entries, each with chain_id, chain, policy_registry_address, token_supply_manager_address, and token_factory_address. On 2026-09-25 it listed one chain, Base (8453):

FieldValue
policy_registry_address0x8453000000000000000000000000000000000002
token_supply_manager_address0xD1Ca4dAcdf3231011D175351f1f02D15C7c5664C
token_factory_address0x4bA3E29E254F25E94E61C4c9d67b37027331534D

The policy registry is the B20 PolicyRegistry precompile, not a separate deployment. Treat the live response as authoritative over this table.

Terminal window
curl https://api.coinbase.com/v1/tokenized-stocks/total-supply/0xb200000000000000000000C2e324d24d7eEcd1fb

Returns a single total_supply field with the same meaning as in the list response.

The field names look familiar from the onchain interface, but several of them carry different units here. Most integration mistakes with this API come from mixing the two.

  • total_supply counts tokens, not shares. To get the share count, multiply it by multiplier.
  • multiplier is already scaled down. Onchain the multiplier is WAD-scaled (18 decimals). The API divides that out, so a token with no adjustment reports 1, not 1e18. Do not apply the WAD division a second time.
  • multiplier moves. Dividends and splits change it, so read the current value each time you convert units to shares. Never cache it as a constant.
  • nav_price is a reference value, not a quote. It is the total-return figure from the token’s Chainlink feed. It is not a bid, an ask, or a fill price.
  • nav_price goes stale without warning. Chainlink publishes a new round only on a price deviation or a heartbeat, and the feeds stop outside market hours. So nav_price_updated_at can trail the clock by minutes or by many hours. Apply the same staleness bound you would apply to updatedAt from latestRoundData().

Two response details surfaced when this page was checked against the live API on 2026-09-25:

  • paused_features is left out entirely when nothing is paused, rather than sent as an empty array. Treat a missing key as “no pauses”.
  • The list held exactly the ten launched tokens (AAPLc through TSLAc). COINc, CRCLc, and INTCc, which are registered onchain but have zero supply, were not in it.