Skip to main content

Entities

Every entity filter in API v3 takes an id, not a name. GET /v3/entities turns what you hold into that id.

btc · $BTC · wbtc · bitcoin · 0x2260fa…c599
│
▼ GET /v3/entities
b23e0b47-deec-4161-b49c-7e2652f07fe6 (Bitcoin)
│
▼ entityIds on events, storylines, arcs, calls, episodes
entityId on positioning

Resolve once and cache the id. If a request later answers Unknown id, resolve again.

It matches exactly. It is not a search. A prefix or a misspelling returns nothing. Telegram channels have no id, and neither has an address nobody has catalogued: find those in trending contracts.

Two Kinds of Identifier​

Entity idX handle
Looks likeb23e0b47-deec-4161-b49c-7e2652f07fe6VitalikButerin, with or without @
NamesA token, equity, project, person or organisationAn X account
Comes from/v3/entities, or an entity, asset or impacts[].entityId in any responseTop accounts, an entity's handle, a call's handle
Goes toentityIds, entityIdhandle on calls and episodes

A person is not an account. Vitalik Buterin is an entity; @VitalikButerin is his X account. Events filter on the person; calls and standing on the account. The entity's handle leads to the account, and q=@VitalikButerin leads back:

{
"id": "adba4f64-5471-4a80-a1e2-8bec7ad0cc45",
"entityType": "person",
"name": "Vitalik Buterin",
"handle": "VitalikButerin"
}

A project and its token are two entities. Over 29 days, the UNI token returned 28 events and the Uniswap project 41, only 2 of them shared. Pass both ids to cover both: each event comes back once.

Asset Families​

One asset in all its forms gets one id: BTC, WBTC and cbBTC are all Bitcoin; NVDA and its tokenised versions are all Nvidia.

  • Every form resolves to the family. q=wbtc returns Bitcoin's id, and matchedOn says which identifier hit.
  • A family id filters every form. Bitcoin's events include WBTC's.
  • Responses name the family, never a form inside it.

Not every form is grouped yet: q=btc also returns Osmosis allBTC with its own id, covering only itself. Check name. A tokenised equity resolves to the equity: q=nvdax returns Nvidia with entityType: equity. People, projects and organisations have no families.

Resolve an Identifier​

GET /v3/entities: entities whose identifier matches q exactly, best match first. Case and surrounding spaces are ignored.

qReturns
sol, $SOL, solanaSolana, first
solaSOLA AI. Not a prefix of Solana
vitalikNothing
vitalik buterin, @VitalikButerinThe person
teslaNothing. The registered name is Tesla, Inc. Common Stock
tsla, BBG000N9MNX3, 0001318605, 1318605Tesla. tsla also returns a token TSLA, second
{
"entities": [
{
"id": "584f4b42-abf9-4bf4-b5d5-193531f4ab43",
"entityType": "token",
"name": "Bio Protocol",
"symbol": "BIO",
"handle": null,
"matchedOn": "symbol",
"score": 0.9,
"externalIds": {
"coingeckoId": "bio-protocol",
"figi": null,
"cik": null
}
},
{
"id": "54cc5269-fa91-4e5a-b8a1-d4a38534c303",
"entityType": "equity",
"name": "Bio-Rad Laboratories, Inc.Class A",
"symbol": "BIO",
"handle": null,
"matchedOn": "symbol",
"score": 0.9,
"externalIds": {
"coingeckoId": null,
"figi": "BBG000DY28W5",
"cik": "0000012208"
}
}
],
"nextCursor": "P5O7xFKK.MC45fDAuMDAwOTA3NDQxMDE2MzMzOTM4M3wxODA3NA",
"hasMore": true
}

GET /v3/entities?q=bio&limit=2, read on 6 October 2026: a token and an equity sharing the ticker BIO. Both score 0.9; the token ranks higher among tokens than Bio-Rad among equities, so it comes first.

FieldMeaning
idThe id to pass on. For a token or equity, its family's
entityTypetoken, equity, project, person or organisation
name, symbolsymbol on tokens and equities only. name can be null
handleIts X account, the most-followed one. Null if none. Store the id: handles change
matchedOn, scoreWhich identifier q hit, and how strongly. Not a confidence
externalIdscoingeckoId, figi, cik, where we hold them

How results rank. By score, then by each asset's market rank within its own class, so a top coin beats an obscure stock sharing its ticker. People, projects and organisations come after ranked assets.

matchedOnscore
contractAddress, handle written with @, externalId for a FIGI or CIK1.0
contractAddress on another chain than the address's home chain0.95
symbol, externalId for a CoinGecko id, handle written without @0.9
cashtag0.85
name0.8
alias0.6
tickerRoot, exchangeSymbol0.5

A CoinGecko id or a bare handle scores as a ticker because short words collide: uni is also a small token's CoinGecko id. An address several tokens share ranks the one on its home chain first (Solana for base58; Ethereum, Base, Arbitrum, BNB Chain, Optimism, Polygon, Avalanche for 0x): wrapped SOL returns Solana at 1.0, then Ethereum and Fogo at 0.95.

A word can be both a small token's ticker and a leading asset's name. A token or equity hit on any lane scoring 0.9 or less, other than an address, scores 0.5 lower when another asset in the results ranks at least 20 times higher in its own class. apple returns Apple Inc. (alias, 0.6) before the APPLE memecoin (symbol, 0.4), and dogwifhat returns WIF (name, 0.8) before DOGWIFHAT.

ParameterValuesDefaultNotes
q1 to 128 characters, requiredA ticker, $cashtag, name, @handle, address, CoinGecko id, FIGI or CIK
entityTypetoken, equity, project, person, organisation, a listallNarrows the match
limit1 to 20010
cursor

No match is a 200 with an empty list. Try the ticker, the full registered name, the @handle or an external id.

Choosing a Match​

A ticker is not unique: q=btc returns ten rows at 0.9, Bitcoin first.

# Wrong: pick by symbol. All ten rows have symbol "BTC"
entities.filter(e => e.symbol === "BTC") // ten rows, no way to choose

# Right: take the first row, then check its name
entities[0] // Bitcoin

# Better, when you know the kind: narrow first
GET /v3/entities?q=btc&entityType=token&limit=1

Then check name: q=uni returns Uniswap, then a token named Uni. To be sure, resolve by something unique: a contract address, FIGI or CIK scores 1.0. A fund company's CIK returns every fund it files for.