KQBOARDKQ Book

Developers beta

The same data behind every KQ Book page, as JSON your own code can read. Build a sales bot, a floor tracker, a mint checker, a spreadsheet that fills itself.

Start in three steps

  1. Sign in on the Account page.
  2. Create a key under API keys. It is shown once, so copy it.
  3. Call an endpoint with the key in an X-API-Key header.
curl -H "X-API-Key: YOUR_KEY" \
  "https://kqboard.com/api/archive/sales/KASGOTHS?limit=3&pretty=1"

Add pretty=1 while exploring and the answer comes back indented and readable. Your code does not need it.

Try it live

Signed in, you can call the API right here with no key.

{
  "ticker": "KASGOTHS",
  "tier": "reader",
  "count": 1,
  "rows": [
    {
      "kind": "nft",
      "token_id": "559",
      "price_kas": 699,
      "rank": 655,
      "buyer": "kaspa:qp30ah…9jjqlf",
      "seller": "kaspa:qqy0a5…qcwpdv",
      "time": "2026-09-19T21:25:29Z"
    }
  ]
}

Above is an example answer. Press Run to see a real one.

Endpoints

GET/archive/sales/TICKERReader+

Every recorded sale: price, buyer, seller, time. NFT sales carry a token id and rank; token (KRC-20) trades carry the amount and price per token.

GET/archive/mints/TICKERReader+

Every mint: who paid, who received, when, the fee, the txid, and who holds it now.

GET/archive/lifecycles/TICKERBook+

Every listing KQ Book has seen: price, seller, when it appeared, when it closed, and how.

GET/archive/price-events/TICKERBook+

Every price change on this collection’s listings, with the time it was seen.

GET/archive/floor/TICKERReader+

The floor over time, with the listed count and 24h volume at each reading. Add daily=1 for one point a day.

GET/archive/wallet/ADDRESSReader+

Everything one wallet did that KQ Book recorded: buys, sells, listings and mints, newest first, with the other side of each trade.

Options

limitHow many rows, newest first. Default 100, up to 5,000.
dailyOn floor: 1 for one reading per day.
kindOn sales: nft or token. Some tickers are both, NACHO is one.
pretty1 to indent the JSON for reading.

Limits

PlanCalls/dayHistory
Reader50024 hours
Book25,000365 days
Desk250,000Everything

Your key follows your plan automatically. Counts reset at midnight UTC and every answer carries X-RateLimit-Remaining. Max 240 requests a minute per IP.

Examples

JavaScript

const r = await fetch("https://kqboard.com/api/archive/sales/KASGOTHS?limit=50", {
  headers: { "X-API-Key": process.env.KQ_KEY },
});
const { rows } = await r.json();
for (const s of rows) console.log(`#${s.token_id} sold for ${s.price_kas} KAS`);

Python

import os, requests
r = requests.get("https://kqboard.com/api/archive/sales/KASGOTHS",
                 params={"limit": 50},
                 headers={"X-API-Key": os.environ["KQ_KEY"]})
for s in r.json()["rows"]:
    print(f"#{s['token_id']} sold for {s['price_kas']} KAS")

Questions

What is this actually for?

Anything you would otherwise do by refreshing KQ Book by hand. A bot that posts every sale in your collection's Telegram. A sheet that tracks what really filled, not what is listed. A check before a mint: who minted, and with whose KAS. Your code asks, KQ Book answers in JSON.

Why does it look like a wall of text in my terminal?

That is JSON: built for programs, not eyes. Add pretty=1 to read it, or use the Try it box above. In code you never read it raw; you loop over rows.

Why are buyer and seller empty on some token trades?

Some venues do not publish who traded KRC-20 lots, only the amount and price. NFT sales always name both wallets.

Is it free?

Yes, on Reader: 500 calls a day, sales and mints, last 24 hours. Book and Desk open the full archive and more calls. See plans.

I need an endpoint that is not here.

Tell us what you are building. More are on the way.