Endpoints
Reporte de token
Datos de mercado, seguridad, Holder Score, métricas de holders, clústeres, historial del dev y actividad de trading de un token.
GET
/api/v1/tokens/{chain}/{address}Devuelve el último reporte que XCA tiene de un token. Leer un reporte nunca inicia un escaneo: si el estado es NONE, el token aún no se ha escaneado, así que primero llama a POST /scans.
Parámetros#
chainpathobligatorioIdentificador de la red. Por ahora, solo solana."solana"
addresspathobligatorioDirección del token (mint).string
Solicitud#
curl -s "https://app.xca.fun/api/v1/tokens/solana/DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263" \
-H "Authorization: Bearer $XCA_API_KEY"Pruébalo
Pega tu clave de API para enviar una solicitud real.
Respuesta#
chainIdentificador de la red.string
addressDirección del token (mint).string
statusEstado del reporte. NONE significa que el token nunca se escaneó."NONE" | "QUEUED" | "RUNNING" | "DONE" | "ERROR"
depthLIGHT para los escaneos automáticos de nuevos pares, FULL para el análisis completo."LIGHT" | "FULL" | null
upgradingUn reporte LIGHT se está actualizando a FULL.boolean
stepPaso actual del escaneo mientras se ejecuta.string | null
progressProgreso del escaneo, de 0 a 100.number
errorMessageMotivo por el que falló el último escaneo, cuando el estado es ERROR.string | null
symbolTicker del token.string | null
nameNombre del token.string | null
imageUrlURL del logo del token.string | null
marketPar de trading principal según DexScreener.object | null
marketPar de trading principal según DexScreener.object | null
pairAddressDirección del par con mayor liquidez.string | null
dexIdDEX de ese par.string | null
urlPágina del par en DexScreener.string | null
nameNombre del token según el par.string | null
symbolTicker del token según el par.string | null
quoteSymbolActivo de cotización del par, por ejemplo, SOL.string | null
imageUrlLogo del token según DexScreener.string | null
priceUsdPrecio en USD.number | null
liquidityUsdLiquidez de todos los pools, en USD.number | null
fdvUsdValoración totalmente diluida (FDV), en USD.number | null
marketCapUsdCapitalización de mercado, en USD.number | null
volume24hUsdVolumen de trading en 24 horas, en USD.number | null
txns24hTransacciones de compra y venta en 24 horas.{ buys, sells } | null
changeVariación del precio, en porcentaje, en 5 minutos y en 1, 6 y 24 horas.{ m5, h1, h6, h24 }
pairCreatedAtCuándo se creó el par.string | null
poolAddressesDirecciones de todos los pools conocidos del token.string[]
websitesSitios web del proyecto.{ url, label }[]
socialsRedes sociales del proyecto.{ type, url }[]
fetchedAtCuándo se obtuvieron los datos de mercado.string
securityDatos on-chain sobre el mint.object | null
securityDatos on-chain sobre el mint.object | null
mintAuthorityQuién puede acuñar nuevos tokens; null si la autoridad fue revocada.string | null
freezeAuthorityQuién puede congelar las cuentas de los holders; null si la autoridad fue revocada.string | null
programPrograma de tokens al que pertenece el mint."spl-token" | "spl-token-2022" | "unknown"
supplySuministro total en tokens enteros.number
decimalsNúmero de decimales del token.number
creatorBilletera que creó el token, si se conoce.string | null
createdAtCuándo se creó el mint.string | null
computedAtCuándo se calculó el reporte.string | null
staleEl reporte supera su tiempo de vida en caché.boolean
holderScoreHolder Score de 0 (peligroso) a 100 (limpio).number | null
riskLevelNivel de riesgo derivado de la puntuación."low" | "medium" | "high" | null
metricsMétricas de distribución; las claves dependen de tu plan.object | null
metricsMétricas de distribución; las claves dependen de tu plan.object | null
limitedLos datos de holders fueron parciales (por límites del proveedor).boolean
holdersTotalNúmero total de holders.number
holdersAnalyzedHolders incluidos en el análisis.number
profiledHolders con un perfil de billetera completo.number
top10PctPorcentaje en manos de los 10 mayores holders reales (sin contar pools, quemas ni exchanges).number
topHolderPctPorcentaje en manos del mayor holder real.number
floatPctSuministro circulante: el porcentaje fuera de pools y direcciones de quema.number
devPctPorcentaje en manos del creador.number
devBundlePctPorcentaje en manos de las billeteras del bundle del creador.number
sniperCountNúmero de billeteras sniper.number
sniperPctPorcentaje en manos de snipers.number
freshCountNúmero de billeteras nuevas.number
freshPctPorcentaje en manos de billeteras nuevas.number
clusterPctPorcentaje en manos de clústeres de billeteras con un mismo financiador.number
smartCountNúmero de holders de smart money.number
smartPctPorcentaje en manos de smart money.number
poolPctPorcentaje en manos de pools de liquidez.number
burnPctPorcentaje enviado a direcciones de quema.number
avgPnlUsdPnL promedio a 30 días de los holders perfilados, en USD.number | null
launchAtCuándo empezó el trading.string | null
launchSlotSlot de Solana de la primera operación.number | null
scoreVersionVersión del modelo de Holder Score con la que se puntuó el reporte.number
breakdownCada factor del Holder Score con sus puntos y el valor medido.{ key, points, value, total?, cap? }[]
mainReasonEl factor que más puntos restó.{ key, points, value, total?, cap? } | null
clustersGrupos de holders financiados por la misma billetera.object[] | null
clustersGrupos de holders financiados por la misma billetera.object[] | null
idIdentificador del clúster, al que hace referencia el clusterId de los holders.string
funderBilletera que financió a los miembros.string
funderLabelEtiqueta conocida del financiador, por ejemplo, un exchange.string | null
membersBilleteras miembro.string[]
sharePctPorcentaje en manos del clúster.number
clustersCountNúmero de clústeres, incluso cuando la lista de clústeres está bloqueada.number
devHistoryLanzamientos anteriores del creador.object | null
devHistoryLanzamientos anteriores del creador.object | null
creatorBilletera del creador.string | null
launchesTokens lanzados por el creador.number
rugsLanzamientos que perdieron su liquidez.number
avgLifespanSecTiempo de vida promedio de los tokens del creador, si se conoce.number | null
tokensLos lanzamientos, del más nuevo al más antiguo.{ address, symbol, name, createdAt, liquidityUsd, fdvUsd, rugged }[]
approximateSe infirió a partir de las primeras compras del creador, así que tómalo como una estimación.true
devTeaserCantidad de lanzamientos y de rugs, incluso cuando el historial del dev está bloqueado.{ launches, rugs } | null
activityActividad de trading reciente en el par principal.object | null
activityActividad de trading reciente en el par principal.object | null
recentÚltimos swaps; time es una marca de tiempo Unix en milisegundos.{ signature, time, wallet, side, amount, valueUsd }[]
topTradersLos traders más rentables del token.{ wallet, boughtUsd, soldUsd, pnlUsd, trades }[]
lockedFunciones que tu plan no incluye; sus campos son null o se omiten.string[]
Respuesta de ejemplo#
{
"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": 84,
"riskLevel": "low",
"metrics": {
"limited": false,
"holdersTotal": 912345,
"holdersAnalyzed": 4000,
"profiled": 100,
"top10Pct": 64.2,
"topHolderPct": 31.7,
"floatPct": 96.6,
"devPct": 0,
"devBundlePct": 0.3,
"sniperCount": 2,
"sniperPct": 6.6,
"freshCount": 41,
"freshPct": 17.6,
"clusterPct": 8.8,
"smartCount": 7,
"smartPct": 2.1,
"poolPct": 3.4,
"burnPct": 0,
"avgPnlUsd": 1840.5,
"launchAt": "2022-12-25T11:04:12.000Z",
"launchSlot": 168410720,
"scoreVersion": 2,
"breakdown": [
{
"key": "top10",
"points": -17.2,
"value": 66.5
},
{
"key": "topHolder",
"points": -5.9,
"value": 32.8
},
{
"key": "devBundle",
"points": 0,
"value": 0.3
},
{
"key": "snipers",
"points": -0.6,
"value": 6.8
},
{
"key": "clusters",
"points": -1.8,
"value": 9.1
},
{
"key": "fresh",
"points": -0.6,
"value": 18.2
},
{
"key": "holders",
"points": 0,
"value": 912345
},
{
"key": "authorities",
"points": 0,
"value": 0
},
{
"key": "devRugs",
"points": 0,
"value": 0,
"total": 1
},
{
"key": "liquidity",
"points": 0,
"value": 2864210.4
},
{
"key": "smartMoneyBonus",
"points": 10,
"value": 7
}
],
"mainReason": {
"key": "top10",
"points": -17.2,
"value": 66.5
}
},
"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": []
}Códigos de estado#
200Éxito
400validation — Un parámetro o el cuerpo de la solicitud no es válido; consulta
error.issues.401unauthorized — La clave de API falta, está mal formada o fue revocada.
402
planRequired — Tu plan no incluye acceso a la API o a esta función.429
rateLimited — Demasiadas solicitudes por minuto o se agotó la cuota mensual.Estado del reporte#
NONE | Nunca se escaneó. Inicia un escaneo con POST /scans. |
QUEUED | Esperando un worker disponible. |
RUNNING | Se está analizando; consulta step y progress. |
DONE | Terminado; el reporte está completo. |
ERROR | El último escaneo falló; consulta errorMessage e inténtalo de nuevo. |
Ten en cuenta#
- Los campos de las funciones que tu plan no incluye son null o se omiten, y sus claves aparecen en locked.
- stale es true cuando el reporte supera su tiempo de vida en caché; un nuevo
POST /scanslo actualiza. - Los reportes
LIGHTprovienen de los escaneos automáticos de nuevos pares y no incluyen el PnL de las billeteras hasta que alguien los abre; mientras se completan, upgrading es true. - Las participaciones son porcentajes del suministro total, incluidos los tokens en manos de los pools.