Tokens
Token metadata, listings with market data, ACE lists, and price history.
Likely Spam Classification
The indexer marks a fungible token as spamLikely when holder activity is high relative to weak market support. This is a protective filtering signal, not a deletion or blocklist. Direct token info lookups still return the token and include the spamLikely flag so apps can label it.
A token is eligible for the spam check only when all of these are true:
| Signal | Requirement |
|---|---|
| Token type | Fungible token types 0 or 1 |
| ACE status | Not ACE-authorized |
| Holder count | At least 25 holders |
Once eligible, it is considered likely spam if any of these conditions match:
| Condition | Threshold |
|---|---|
| No market support | >= 250 holders, no market/liquidity support, and no RATE price |
| Thin liquidity versus market cap | >= 250 holders, market cap at least $100,000, and market cap at least 100x indexed liquidity |
| Low support, moderate spread | >= 50 holders, market support under $10,000, and at least 10 holders / $1,000 of support |
| Low support, broad spread | >= 250 holders, market support under $50,000, and at least 5 holders / $1,000 of support |
Market support is calculated as the greater of market cap or combined Kalvora DEX liquidity plus fresh bridge liquidity. The thin-liquidity check compares market cap against the same combined indexed liquidity. NFTs, SBTs, and ACE-authorized tokens are not classified as likely spam by this filter.
Likely spam tokens are hidden by default from token list, wallet balance, and search endpoints. Use includeSpam=true or hideSpam=false to include them in API responses.
Token List
/v1/tokens?request=listPaginated list of all indexed tokens with optional market statistics.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| request | string | Optional | list | Must be `list` (default) |
| limit | int | Optional | 50 | Number of results (1–100) |
| offset | int | Optional | 0 | Pagination offset |
| symbol | string | Optional | — | Filter by mint ID (exact, case-insensitive) |
| type | string | Optional | — | Filter: token, nft, or sbt |
| sort | string | Optional | market_cap | Sort: market_cap, name, volume, change, holders, transactions, created, symbol |
| order | string | Optional | desc | Sort direction: asc or desc |
| include | string | Optional | — | Sections to include: supply, market, fees, governance, icons, project, all |
| includeSpam | boolean | Optional | false | Set to true to include tokens classified as likely spam |
| hideSpam | boolean | Optional | true | Set to false to include tokens classified as likely spam |
Usage & Credits
Notes
- Likely spam tokens are hidden by default on list/search/wallet endpoints. Use `includeSpam=true` or `hideSpam=false` to include them.
- Returned volume metrics may include other tracked sources, such as cross-chain DEX markets when known bridge mappings are available. They are not limited to Kalvora Native DEX activity, may not include every source, and data may be delayed.
Response
{
"found": "integer",
"tokens": [
{
"symbol": "string",
"name": "string",
"type": "string",
"icon": "string *",
"spamLikely": "boolean"
}
]
}Token Info
/v1/tokens?request=infoDetailed metadata for a specific token. Supports bridge mint resolution.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| request | string | Required | — | Must be `info` |
| symbol | string | Required | — | Mint ID (e.g. KAL111112 for the native coin) |
| include | string | Optional | — | Sections: supply, market, fees, governance, icons, project, all |
Usage & Credits
Notes
- Returned volume metrics may include other tracked sources, such as cross-chain DEX markets when known bridge mappings are available. They are not limited to Kalvora Native DEX activity, may not include every source, and data may be delayed.
- `governance.preGovernance` is present only when the contract declares a council review stage, and each of its fields is omitted rather than zeroed when unset. See the Governance section for the full pre-governance contract.
Response
{
"symbol": "string",
"name": "string",
"type": "string",
"icon": "string *",
"spamLikely": "boolean",
"supply *": {
"totalSupply": "float",
"maxSupply": "float *",
"circulatingSupply": "float",
"burnedSupply": "float *",
"mintedSupply": "float *",
"partsPerToken": "float"
},
"market *": {
"marketCap": "float",
"volume24hr": "float",
"change24hr": "float",
"rate": "float *",
"holders": "integer",
"transactions": "integer",
"isAceAuthorized": "boolean"
},
"fees *": {
"feeType": "string",
"totalFee": "string",
"burnPercent": "integer",
"validatorPercent": "integer",
"otherPercent": "integer",
"feeAddress": "string *",
"acceptedFeeContracts": "array *"
},
"governance *": {
"type": "string",
"activeProposals": "integer",
"totalProposals": "integer",
"threshold": "integer",
"quorum": "integer",
"preGovernance *": {
"votingInstrument": "string *",
"days": "integer *",
"threshold": "integer *",
"regularQuorum": "integer *"
},
"durationDays": "integer *",
"durationMonths": "integer *",
"startCycleUnix": "integer *",
"endCycleUnix": "integer *",
"numberStages": "integer *",
"currentStageNumber": "integer *",
"stages *": [
{
"stageNumber": "integer",
"isBreak": "boolean",
"period": "string",
"length": "integer",
"maxAllowed": "integer *",
"startsAt": "integer *",
"endsAt": "integer *"
}
]
},
"icons *": {
"lowRes": "string *",
"highRes": "string *"
},
"project *": {
"projectUrl": "string *",
"exchangeInfo": "string *",
"generalInfo": "string *"
},
"bridge *": {
"mints": [
{
"network": "string",
"mintId": "string"
}
]
}
}Errors
| Status | Condition |
|---|---|
| 400 | Missing symbol parameter |
| 404 | Token not found |
Verified Tokens
/v1/tokens?request=verifiedTokens in the curated Kalvora network verified list. Verification is separate from ACE authorization and automated spam classification.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| request | string | Required | — | Must be `verified` |
| address | string | Optional | — | Filter to verified tokens the wallet holds |
| limit | integer | Optional | 100 | Page size (1–100) |
| offset | integer | Optional | 0 | Results to skip (0–10,000) |
| type | string | Optional | — | Filter: token, nft, sbt |
| include | string | Optional | — | Sections to include |
| includeSpam | boolean | Optional | false | Set to true to include tokens classified as likely spam |
| hideSpam | boolean | Optional | true | Set to false to include tokens classified as likely spam |
Usage & Credits
Response
{
"found": "integer",
"tokens": [
{
"symbol": "string",
"name": "string",
"type": "string",
"verified": true,
"spamLikely": "boolean"
}
]
}Price History
/v1/tokens?request=priceHistoryTime-bucketed historical price data for charting.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| request | string | Required | — | Must be `priceHistory` |
| symbol | string | Required | — | Mint ID |
| interval | string | Optional | 1h | Bucket: 5m, 15m, 1h, 4h, 1d |
| startTime | int | Optional | — | Positive Unix timestamp lower bound |
| endTime | int | Optional | — | Positive Unix timestamp upper bound |
| limit | int | Optional | 500 | Max data points (1–2000) |
Usage & Credits
Notes
- startTime and endTime must be positive, startTime cannot exceed endTime, and an explicit range cannot span more than interval × limit. If one boundary is omitted, the server derives it from the other; if both are omitted, it uses the most recent bounded window. The newest matching buckets are selected first, then returned in chronological order. found is the number of returned points.
Response
{
"found": "integer",
"symbol": "string",
"interval": "string",
"prices": [
{
"time": "integer",
"price": "float"
}
]
}