truvo

Truvo docs

How to read an Asset Passport, how fresh the data is, and how to use the API.

Concepts

The Asset Passport

One record per contract: identity, every known fact with its source and age, the checks that were run, a history of changes, and what is not known.

Identity

A passport is keyed by chain ID + contract address. It carries the symbol, display name, asset type (stock token, ETF token, stablecoin, wrapped native, other), issuer and decimals.

The registry_match verification records whether the address is listed for that asset in an official source. If it is not, the asset is unverified whatever its name or ticker says.

Claims: one per field

Each fact is a claim with its value, the IDs of the sources behind it, how it was obtained (HTTP fetch, RPC call, manual entry), when it was observed, its freshness window (max_age_seconds) and its own status. For Stock Tokens and tokenized ETFs:

claim_typeMeaning
official_listingOfficial listing. Whether Robinhood's official asset registry lists this exact address, and with what status.
underlying_isinUnderlying ISIN. The international identifier of the share or ETF the token tracks, from the official registry.
issuerIssuer & tokenizer. The legal entity that issues the token (Robinhood Assets (Jersey) Limited for Stock Tokens), from the docs.
instrumentInstrument type. What the token legally is: a tokenised debt security, not a share certificate.
holder_rightsHolder rights. What a holder is entitled to: economic exposure only, no rights in the underlying share or against its issuer.
primary_marketPrimary market access. Who can mint and redeem directly with the issuer (Authorised Participants after KYB).
decimalsDecimals. Read on-chain with decimals() and cross-checked against the official registry.
ui_multiplierShares-per-token multiplier. uiMultiplier() (ERC-8056): how many shares one token represents after splits and dividends. Read on-chain and cross-checked.
pending_multiplierPending multiplier change. A multiplier change announced in the official registry ahead of a corporate action.
price_feedPrice feed reference. Not curated yet, so shown as unknown. Truvo never publishes prices itself.
redemption_termsRedemption terms. Not found in any curated source yet, so shown as unknown.

Cross-checks and conflicts

Fields that both the official registry and the chain report (decimals, the multiplier) are compared. When they agree, the claim cites both sources. When they disagree, the claim becomes conflicting, both candidate values are returned in alternatives, and the item goes to an operator review queue. Truvo never picks a side on its own.

When an operator resolves a conflict, the decision, the reason and the operator are recorded in an append-only audit log and shown as a manual_review verification.

Asset-level status

  1. Address not confirmed by an official source → unverified.
  2. Otherwise any conflicting field → conflicting.
  3. Otherwise any stale field → stale.
  4. Otherwise → verified. Unknown fields lower the field coverage but don’t change this status.

The exact definitions are on the methodology page.

History and known unknowns

Events

Detected changes are kept as events: new listings, name or ISIN changes, multiplier changes (official or on-chain), conflicts, delistings and operator decisions. Each event points to its evidence.

Known unknowns

Gaps that no field can express, for example that no price feed address has been curated yet, are listed explicitly.

Open any asset from the registry to see a live passport, including the raw API response.