Skip to main content

Token Metadata Server

The Token Metadata Server is the read API for token metadata. Wallets, explorers, and dApps query it to turn an on-chain asset ID into a human-readable name, ticker, decimals, and logo. API v2 serves both CIP-26 (the off-chain registry) and CIP-68 (on-chain datum) metadata through one interface, so a caller does not need to know which standard a token uses.

The API is at https://tokens.cardano.org and is subject to the API Terms of Use. Full OpenAPI specifications are at tokens.cardano.org/apidocs.

Network environments​

The Cardano Foundation runs the server for both mainnet and the preprod testnet, so you can resolve metadata while building and testing before going live.

NetworkBase URLOpenAPI docs
Mainnethttps://tokens.cardano.org/apidocs
Preprodhttps://preprod.tokens.cardano.org/apidocs

Both expose the same v2 surface and combine the two standards the same way:

To query preprod, use the requests below with the preprod base URL.

How priority and fallback work​

When a token has metadata under both standards, the server returns one value per field and tells you its source. By default it prefers CIP-68 (on-chain) for its decentralization, and falls back to CIP-26 field by field when CIP-68 is missing a value. Override this with the query_priority parameter.

Fetch one subject​

GET /api/v2/subjects/{subject}

subject is the asset identifier: the hex policyId concatenated with the hex asset name, for example 577f0b1342f8f8f4aed3388b80a8535812950c7a892495c0ecdf0f1e0014df10464c4454.

Query parameters:

  • property (optional, repeatable): limit the response to specific fields, such as name, ticker, decimals. Omit to return all.
  • query_priority (optional, CIP_26 or CIP_68): which standard to prefer. Defaults to CIP-68 with fallback to CIP-26.
  • show_cips_details (optional, default false): include the raw per-standard payloads.
curl https://tokens.cardano.org/api/v2/subjects/577f0b1342f8f8f4aed3388b80a8535812950c7a892495c0ecdf0f1e0014df10464c4454 | jq .
{
"subject": {
"subject": "577f0b1342f8f8f4aed3388b80a8535812950c7a892495c0ecdf0f1e0014df10464c4454",
"metadata": {
"name": { "value": "FLDT", "source": "CIP_68" },
"description": { "value": "The official token of FluidTokens.", "source": "CIP_68" },
"ticker": { "value": "FLDT", "source": "CIP_68" },
"decimals": { "value": 6, "source": "CIP_68" },
"logo": { "value": "https://fluidtokens.com/fldt.png", "source": "CIP_68" },
"url": { "value": "https://fluidtokens.com", "source": "CIP_26" },
"version": { "value": 1, "source": "CIP_68" }
}
},
"queryPriority": ["CIP_68", "CIP_26"]
}

Here CIP-68 has priority, but because it carries no url, that one field is served from CIP-26.

Fetch specific properties​

curl "https://tokens.cardano.org/api/v2/subjects/577f0b1342f8f8f4aed3388b80a8535812950c7a892495c0ecdf0f1e0014df10464c4454?property=name&property=ticker&property=decimals" | jq .

Force a single standard​

curl "https://tokens.cardano.org/api/v2/subjects/577f0b1342f8f8f4aed3388b80a8535812950c7a892495c0ecdf0f1e0014df10464c4454?query_priority=CIP_68" | jq .

Inspect the raw per-standard payloads​

show_cips_details=true returns the original CIP-26 and CIP-68 records side by side, including signatures. Useful when debugging a registration or comparing the two standards' raw formats.

curl "https://tokens.cardano.org/api/v2/subjects/577f0b1342f8f8f4aed3388b80a8535812950c7a892495c0ecdf0f1e0014df10464c4454?show_cips_details=true" | jq .

Fetch many subjects at once​

POST /api/v2/subjects/query returns metadata for multiple subjects in one call. It takes the same query_priority and show_cips_details parameters, plus a subjects array and an optional properties array in the body.

curl -H 'Content-Type: application/json' \
-d '{"subjects": ["577f0b1342f8f8f4aed3388b80a8535812950c7a892495c0ecdf0f1e0014df10464c4454", "a0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235484f534b59"], "properties": ["name", "ticker"]}' \
https://tokens.cardano.org/api/v2/subjects/query | jq .
{
"subjects": [
{
"subject": "577f0b1342f8f8f4aed3388b80a8535812950c7a892495c0ecdf0f1e0014df10464c4454",
"metadata": {
"name": { "value": "FLDT", "source": "CIP_68" },
"ticker": { "value": "FLDT", "source": "CIP_68" }
}
},
{
"subject": "a0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235484f534b59",
"metadata": {
"name": { "value": "HOSKY Token", "source": "CIP_26" },
"ticker": { "value": "HOSKY", "source": "CIP_26" }
}
}
],
"queryPriority": ["CIP_68", "CIP_26"]
}

The second token has no CIP-68 record, so its fields fall back to CIP-26.

Next steps​