Live · real Kasplex on-chain data

Kaspa Fair-Launch Score API

The same A–F fairness model that powers the radar, the ranked board and the reports — as a free, CORS-open JSON API. Grade one token, pull the whole ranked board, or drop a live grade badge on any page. No key, no signup, no wallet.

Free public tier CORS open (*) 100% read-only on-chain No auth CDN-cached

Single-token grade GET /api/score

Returns the machine-readable fairness grade and full breakdown for one KRC-20 tick, computed live from public on-chain data.

GET https://radar.linkrra.com/api/score?tick=TICK

Query parameters

ParamRequiredNotes
tickyesKRC-20 ticker, 4–6 letters (case-insensitive). E.g. NACHO, KREDO.

Try it live

// response appears here…

Example

# cURL
curl -s 'https://radar.linkrra.com/api/score?tick=NACHO'

// JavaScript (browser or Node)
const r = await fetch('https://radar.linkrra.com/api/score?tick=NACHO')
const t = await r.json()
console.log(t.grade, t.score)  // "A" 100

Response (200)

FieldTypeDescription
tickstringThe ticker (uppercased).
gradestringFairness grade AF.
scorenumber0–100 fairness score behind the grade.
statestringdeployed (open) or finished.
mintingbooltrue while the token is still open to mint.
max / mintedstringRaw supply in on-chain units — apply decimals.
decimalsnumberToken decimals for human-readable supply.
deployedAtMsnumberDeploy time (epoch ms).
breakdownobjectpreMintPct, topHolderPct, top5Pct, devAllocPct, holders, mintedPct — the graded pillars (percent).
reasonsarray[{kind, icon, text}] — transparent "why this grade".
topHoldersarrayTop-10 [{address, pctOfSupply, isDeployer}].
deployerstringDeployer address.

Errors

StatusWhen
400Missing ?tick= or invalid ticker format.
404Ticker not found / never deployed.
502Upstream (Kasplex) temporarily unavailable.
Cache: public, s-maxage=30 · CORS: Access-Control-Allow-Origin: *

Ranked board GET /api/top

The whole ranked A–F leaderboard of the most-active live KRC-20 launches, fairest-first, in one call — the JSON twin of the /top board. Same shared model, so a row here can never disagree with /api/score, /t/{tick} or the badge for the same token.

GET https://radar.linkrra.com/api/top
alias: /top.json · no parameters

Example

curl -s 'https://radar.linkrra.com/api/top' | jq '.items[0]'

Response (200)

FieldTypeDescription
generatedAtstringISO timestamp of this snapshot.
countnumberRows in items.
mintingnumberHow many are still open to mint.
topPickobjectFairest row: {tick, grade, score}.
avgScorenumberMean fairness score across the board.
items[]arrayRanked rows (see below).

Each items[] row

FieldDescription
rank1-based position (fairest first).
tick, grade, scoreTicker, AF grade, 0–100 score.
verdictWord for the grade: excellent / good / fair / weak / poor.
state, mintingLifecycle + whether mint is still open.
max, minted, decimalsRaw supply units + decimals.
pillars{preMintPct, topHolderPct, top5Pct, devAllocPct, holders, mintedPct}.
deployer, topHoldersDeployer address + top-10 holders.
reasonsTransparent "why this grade" list.
links{report, score, mint, explorer} (mint null unless open).
Never 500s. On an upstream hiccup the endpoint returns a well-formed empty board (count:0, items:[]) with an error flag rather than breaking your consumer.
Cache: public, s-maxage=600, stale-while-revalidate=3600 · CORS: *

Typed alerts feed GET /api/alerts

The machine-readable twin of the live /alerts engine: the TYPED on-chain signals a trader acts on — new launch, fair launch, momentum spike, closing mint, concentration risk — over the most-active live KRC-20 mints, in one CORS-open call. Built for Telegram/Discord bots, Zapier/IFTTT automations and trading tools. Same shared model + thresholds as the HTML engine, so a signal here never disagrees with /api/top, /api/score or /t/{tick}.

GET https://radar.linkrra.com/api/alerts

Example

curl -s 'https://radar.linkrra.com/api/alerts' | jq '.alerts[] | select(.type=="fair")'

Each alerts[] item

FieldNotes
typeone of new, fair, momentum, closing, risk
tick · grade · scoretoken + its live A–F fairness grade (0–100)
title · desc · why[]human-readable headline, one-line detail, and the transparent reasons the signal fired
tsepoch-ms of the op/deploy that fired the signal (feed is newest-first)
mintedPct · mphmint progress %, and (momentum only) accepted mints/hour
pillarspre-mint %, top-wallet %, top-5 %, deployer alloc %, holders
linksreport / score / mint (open mints only) / explorer

Top-level: count, counts (per type), thresholds (newWithinHours:48, momentumMintsPerHour:6, closingMintedPct:88), generatedAt.

Never 500s. On an upstream hiccup the endpoint returns a well-formed empty feed (count:0, alerts:[]) with an error flag rather than breaking your consumer.
Content-Type: application/json · signals are time-sensitive → 2-min CDN cache + stale-while-revalidate · CORS: *

Embeddable grade badge GET /badge/{tick}.svg

A shields.io-style live SVG badge showing a token's current A–F grade — for a project README, launch page, or dashboard. It re-scores on every request, so the badge always matches the live grade.

GET https://radar.linkrra.com/badge/NACHO.svg
Fair-Launch grade NACHO Fair-Launch grade KREDO ← live, re-scored on every load

Embed it (Markdown)

[![Fair-Launch grade](https://radar.linkrra.com/badge/NACHO.svg)](https://radar.linkrra.com/t/NACHO)

Embed it (HTML)

<a href="https://radar.linkrra.com/t/NACHO">
  <img src="…/badge/NACHO.svg" alt="Fair-Launch grade">
</a>
Always a valid image. A bad ticker, unknown token or upstream hiccup returns a neutral n/a / not found badge (still 200 image/svg+xml) — an embed never shows a broken image.
Content-Type: image/svg+xml · 2-min CDN cache + stale-while-revalidate · CORS: *

Embed the live board <script> widget.js

Where the badge shows one token's grade, the widget drops the whole live "fairest launches minting now" board onto any page — a Kaspa community site, a wallet, a project hub. One line of HTML, no build step, no key. It renders the same fairest-first board as /top (shared model — never diverges), auto-updates on every load, and each row links straight to the token's report and — for open mints — the 1.75% mint tool.

GET https://radar.linkrra.com/widget.js

Live preview (this is the real widget, rendering now)

Embed it (paste where you want the board)

<script src="https://radar.linkrra.com/widget.js" async></script>

Options (data-* on the script tag)

AttributeDefaultWhat it does
data-limit6Rows to show (1–15).
data-mints-onlytrueOnly tokens minting now (the mintable funnel). Set false to include finished launches.
data-titleFairest launches minting nowHeader text.
Precise placement. The widget renders inline where the <script> sits, or — if present anywhere on the page — into <div id="kaspa-fair-launches"></div>. Example: <script src="…/widget.js" data-limit="5"></script>.
Safe by design. Read-only, no iframe, no cookies, no wallet — it only fetches the public /api/top and injects scoped, self-styled DOM. On any error it renders nothing and never breaks the host page.
Content-Type: application/javascript · CORS: * · every embed is a live, self-updating backlink to the radar

The fairness model

One transparent A–F heuristic, computed live from public on-chain distribution — no black box, no paid placement. The same score.js module backs every surface (radar, /top, /api/score, /api/top, reports, badges), so grades never diverge.

A · excellent B · good C · fair D · weak F · poor

Scored pillars (each returned in breakdown / pillars):

A high grade is not an endorsement and a low grade is not an accusation — it's a transparent read of on-chain data. Heuristics, not guarantees. Always DYOR. Not financial advice.
Commercial & high-volume

Reselling or embedding the fairness data?

The public tier above is free and CORS-open for apps, bots and dashboards. For high-volume pulls, a licensed data feed, white-label grades, sponsored "Verified Fair-Launch" badges, or a co-brand slot on the radar — let's structure it. Fair use of the free tier is welcome; please cache and attribute Linkrra Fair-Launch Radar.

Talk about API resale →