Эндпоинты
Отчёт по токену
Рыночные данные, безопасность, Holder Score, метрики холдеров, кластеры, история дева и торговая активность токена.
GET
/api/v1/tokens/{chain}/{address}Возвращает последний отчёт XCA по токену. Чтение отчёта никогда не запускает скан: если статус NONE, токен ещё не сканировали — сначала вызови POST /scans.
Параметры#
chainpathобязательноИдентификатор сети. Пока только solana."solana"
addresspathобязательноАдрес токена (mint).string
Запрос#
curl -s "https://app.xca.fun/api/v1/tokens/solana/DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263" \
-H "Authorization: Bearer $XCA_API_KEY"Попробовать
Вставь свой API-ключ, чтобы отправить настоящий запрос.
Ответ#
chainИдентификатор сети.string
addressАдрес токена (mint).string
statusСостояние отчёта. NONE значит, что токен ещё не сканировали."NONE" | "QUEUED" | "RUNNING" | "DONE" | "ERROR"
depthLIGHT для автоматических сканов новых пар, FULL для полного анализа."LIGHT" | "FULL" | null
upgradingLIGHT-отчёт дополняется до FULL.boolean
stepТекущий шаг, пока идёт скан.string | null
progressПрогресс скана от 0 до 100.number
errorMessageПричина неудачи последнего скана, когда статус ERROR.string | null
symbolТикер токена.string | null
nameНазвание токена.string | null
imageUrlАдрес логотипа токена.string | null
marketОсновная торговая пара из DexScreener.object | null
marketОсновная торговая пара из DexScreener.object | null
pairAddressАдрес самой ликвидной пары.string | null
dexIdDEX этой пары.string | null
urlСтраница пары на DexScreener.string | null
nameНазвание токена из пары.string | null
symbolТикер токена из пары.string | null
quoteSymbolКотируемый актив пары, например SOL.string | null
imageUrlЛоготип токена из DexScreener.string | null
priceUsdЦена в USD.number | null
liquidityUsdЛиквидность всех пулов, USD.number | null
fdvUsdПолностью разводнённая оценка (FDV), USD.number | null
marketCapUsdКапитализация, USD.number | null
volume24hUsdОбъём торгов за 24 часа, USD.number | null
txns24hТранзакции покупки и продажи за 24 часа.{ buys, sells } | null
changeИзменение цены в процентах за 5 минут, 1, 6 и 24 часа.{ m5, h1, h6, h24 }
pairCreatedAtКогда создана пара.string | null
poolAddressesАдреса всех известных пулов токена.string[]
websitesСайты проекта.{ url, label }[]
socialsСоцсети проекта.{ type, url }[]
fetchedAtКогда получены рыночные данные.string
securityОнчейн-факты о mint.object | null
securityОнчейн-факты о mint.object | null
mintAuthorityКто может выпускать новые токены; null, если право отозвано.string | null
freezeAuthorityКто может замораживать счета холдеров; null, если право отозвано.string | null
programПрограмма токена, которой создан mint."spl-token" | "spl-token-2022" | "unknown"
supplyОбщее предложение в целых токенах.number
decimalsКоличество знаков после запятой.number
creatorКошелёк, создавший токен, если известен.string | null
createdAtКогда создан mint.string | null
computedAtКогда рассчитан отчёт.string | null
staleОтчёт старше времени жизни кеша.boolean
holderScoreHolder Score от 0 (опасно) до 100 (чисто).number | null
riskLevelУровень риска, выведенный из оценки."low" | "medium" | "high" | null
metricsМетрики распределения; набор ключей зависит от тарифа.object | null
metricsМетрики распределения; набор ключей зависит от тарифа.object | null
limitedДанные о холдерах неполные (ограничения поставщика).boolean
holdersTotalОбщее количество холдеров.number
holdersAnalyzedХолдеров, включённых в анализ.number
profiledХолдеров с полным профилем кошелька.number
top10PctДоля 10 крупнейших реальных холдеров (без пулов, сожжённых токенов и бирж).number
devPctДоля создателя.number
devBundlePctДоля кошельков из бандла создателя.number
sniperCountКоличество кошельков-снайперов.number
sniperPctДоля снайперов.number
freshCountКоличество свежих кошельков.number
freshPctДоля свежих кошельков.number
clusterPctДоля кластеров кошельков с общим источником финансирования.number
smartCountКоличество холдеров-smart money.number
smartPctДоля smart money.number
poolPctДоля пулов ликвидности.number
burnPctДоля, отправленная на адреса сжигания.number
avgPnlUsdСредний PnL профилированных холдеров за 30 дней, USD.number | null
launchAtКогда начались торги.string | null
launchSlotСлот Solana первой сделки.number | null
breakdownКаждый фактор Holder Score с баллами и измеренным значением.{ key, points, value }[]
mainReasonФактор, отнявший больше всего баллов.{ key, points, value } | null
clustersГруппы холдеров, профинансированные одним кошельком.object[] | null
clustersГруппы холдеров, профинансированные одним кошельком.object[] | null
idИдентификатор кластера, на него ссылается clusterId холдеров.string
funderКошелёк, профинансировавший участников.string
funderLabelИзвестная метка источника, например биржа.string | null
membersКошельки-участники.string[]
sharePctДоля кластера.number
clustersCountКоличество кластеров — даже когда список кластеров закрыт.number
devHistoryПредыдущие запуски создателя.object | null
devHistoryПредыдущие запуски создателя.object | null
creatorКошелёк создателя.string | null
launchesТокены, запущенные создателем.number
rugsЗапуски, потерявшие ликвидность.number
avgLifespanSecСреднее время жизни токенов создателя, если известно.number | null
tokensЗапуски, от самых новых.{ address, symbol, name, createdAt, liquidityUsd, fdvUsd, rugged }[]
approximateОпределено по самым первым покупкам создателя, поэтому это оценка.true
devTeaserКоличество запусков и рагов — даже когда история дева закрыта.{ launches, rugs } | null
activityПоследняя торговля в основной паре.object | null
activityПоследняя торговля в основной паре.object | null
recentПоследние свопы; time — Unix-время в миллисекундах.{ signature, time, wallet, side, amount, valueUsd }[]
topTradersСамые прибыльные трейдеры токена.{ wallet, boughtUsd, soldUsd, pnlUsd, trades }[]
lockedФункции, которых нет в твоём тарифе; их поля равны null или отсутствуют.string[]
Пример ответа#
{
"chain": "solana",
"address": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
"status": "DONE",
"depth": "FULL",
"upgrading": false,
"step": "done",
"progress": 100,
"errorMessage": null,
"symbol": "Bonk",
"name": "Bonk",
"imageUrl": "https://arweave.net/hQiPZOsRZXGXBJd_82PhVdlM_hACsT_q6wqwf5cSY7I",
"market": {
"pairAddress": "6oFWm7KPLfxnwMb3z5xwBoXNSPP3JJyirAPqPSiVcnsp",
"dexId": "raydium",
"url": "https://dexscreener.com/solana/6ofwm7kplfxnwmb3z5xwboxnspp3jjyirapqpsivcnsp",
"name": "Bonk",
"symbol": "Bonk",
"quoteSymbol": "SOL",
"imageUrl": "https://arweave.net/hQiPZOsRZXGXBJd_82PhVdlM_hACsT_q6wqwf5cSY7I",
"priceUsd": 0.00002134,
"liquidityUsd": 2864210.4,
"fdvUsd": 1897000000,
"marketCapUsd": 1652000000,
"volume24hUsd": 18450000,
"txns24h": {
"buys": 18210,
"sells": 16930
},
"change": {
"m5": 0.4,
"h1": -1.2,
"h6": 3.8,
"h24": 5.1
},
"pairCreatedAt": "2022-12-25T11:04:12.000Z",
"poolAddresses": [
"6oFWm7KPLfxnwMb3z5xwBoXNSPP3JJyirAPqPSiVcnsp"
],
"websites": [
{
"url": "https://bonkcoin.com",
"label": "Website"
}
],
"socials": [
{
"type": "twitter",
"url": "https://x.com/bonk_inu"
}
],
"fetchedAt": "2026-10-02T09:12:40.000Z"
},
"security": {
"mintAuthority": null,
"freezeAuthority": null,
"program": "spl-token",
"supply": 88870000000000,
"decimals": 5,
"creator": "9AhKqLR67hwapvG8SA2JFXaCshXc9nALJjpKaHZrsbkw",
"createdAt": "2022-12-25T10:52:01.000Z"
},
"computedAt": "2026-10-02T09:12:44.000Z",
"stale": false,
"holderScore": 78,
"riskLevel": "low",
"metrics": {
"limited": false,
"holdersTotal": 912345,
"holdersAnalyzed": 4000,
"profiled": 100,
"top10Pct": 21.4,
"devPct": 0,
"devBundlePct": 0.3,
"sniperCount": 2,
"sniperPct": 0.6,
"freshCount": 41,
"freshPct": 3.9,
"clusterPct": 4.2,
"smartCount": 7,
"smartPct": 2.1,
"poolPct": 3.4,
"burnPct": 0,
"avgPnlUsd": 1840.5,
"launchAt": "2022-12-25T11:04:12.000Z",
"launchSlot": 168410720,
"breakdown": [
{
"key": "top10",
"points": -0.7,
"value": 21.4
},
{
"key": "devBundle",
"points": -0.5,
"value": 0.3
},
{
"key": "snipers",
"points": -0.5,
"value": 0.6
},
{
"key": "clusters",
"points": -2.5,
"value": 4.2
},
{
"key": "fresh",
"points": -1.3,
"value": 3.9
},
{
"key": "authorities",
"points": 0,
"value": 0
},
{
"key": "devRugs",
"points": 0,
"value": 0
},
{
"key": "smartMoneyBonus",
"points": 10,
"value": 7
}
],
"mainReason": {
"key": "clusters",
"points": -2.5,
"value": 4.2
}
},
"clusters": [
{
"id": "c1",
"funder": "5tzFkiKscXHK5ZXCGbXZxdw7gTjjD1mBwuoFbhUvuAi9",
"funderLabel": null,
"members": [
"3Kv1…",
"8Zq4…",
"Fh2T…"
],
"sharePct": 1.8
}
],
"clustersCount": 3,
"devHistory": {
"creator": "9AhKqLR67hwapvG8SA2JFXaCshXc9nALJjpKaHZrsbkw",
"launches": 1,
"rugs": 0,
"avgLifespanSec": null,
"tokens": [],
"approximate": true
},
"devTeaser": {
"launches": 1,
"rugs": 0
},
"activity": {
"recent": [
{
"signature": "4Vt2…",
"time": 1790932360000,
"wallet": "7xKX…",
"side": "buy",
"amount": 152000000,
"valueUsd": 3244.1
}
],
"topTraders": [
{
"wallet": "2bQm…",
"boughtUsd": 41200,
"soldUsd": 78900,
"pnlUsd": 37700,
"trades": 18
}
]
},
"locked": []
}Коды статусов#
200Успех
400validation — Некорректный параметр или тело запроса; смотри
error.issues.401unauthorized — API-ключ отсутствует, некорректен или отозван.
402
planRequired — Тариф не включает доступ к API или эту функцию.429
rateLimited — Слишком много запросов в минуту или исчерпана месячная квота.Статус отчёта#
NONE | Ещё не сканировали. Запусти скан через POST /scans. |
QUEUED | Ждёт свободный воркер. |
RUNNING | Анализируется; смотри step и progress. |
DONE | Готово, отчёт полный. |
ERROR | Последний скан не удался; смотри errorMessage и попробуй ещё раз. |
Стоит знать#
- Поля функций, которых нет в твоём тарифе, равны null или отсутствуют, а их ключи перечислены в locked.
- stale равен true, когда отчёт старше времени жизни кеша; новый
POST /scansобновит его. LIGHT-отчёты — это автоматические сканы новых пар, в них нет PnL кошельков, пока кто-то не откроет токен; пока идёт дополнение, upgrading = true.- Доли считаются от всего предложения, включая токены в пулах.