MadeOnSolMade on Sol

Data APIs

Solana Data APIRobinhood Chain API

Intelligence

Telegram AlertsKOL TrackerWallet ScannerToken LookupDeployer Hunter
Trading BotsTrading TerminalsWallet TrackingToken Scanners
View all solutions
API DocsWebSocket StreamingMCP & SDKsx402 for AI AgentsAgent Intelligence Gateway
Discover ToolsCompare ToolsSubmit a ToolAdvertiseBlog
Pricing
Get real-time feedsSign in
MadeOnSolMade on Sol

Solana and Robinhood Chain intelligence — KOL wallet tracking, deployer intelligence, all-DEX trade streams, and a developer API. Discover, compare, and build.

Product

  • Solana Data API
  • Solana Wallet Checker
  • Robinhood Chain Wallet Checker
  • Robinhood Chain API
  • Robinhood Chain x402
  • MCP Servers & SDKs
  • x402 for AI Agents
  • Agent Intelligence Gateway
  • Pricing
  • Enterprise / For Businesses

Solutions

  • Trading Bots
  • Wallet Tracking
  • Copy Trading
  • Token Scanners
  • Trading Terminals
  • DEX Data
  • Smart Money
  • Token Risk
  • AI Agents
  • ShredPrism Stream
  • View all solutions

Developers

  • API Docs
  • WebSocket Streaming
  • Changelog
  • API Status
  • Latency Benchmarks
  • Data Integrity
  • Data Dictionary
  • Methodology

Resources

  • All Tools
  • Compare Tools
  • Best Trading Bots
  • Best DEXs
  • Best Wallets
  • Best Analytics
  • Best DeFi
  • Best Snipers
  • Blog
  • Blog Archive
  • Signal Scorecard
  • Tool Uptime
  • Community
  • Submit a Tool
  • Advertise

Company

  • About
  • Contact
  • Security
  • Privacy
  • Terms
  • DPA
  • Disclaimer

© 2026 MadeOnSol

MadeOnSol — eenmanszaak, Hulshout, Belgium · KBO/BTW BE 1039.535.538 (art. 56bis, no VAT charged)

Runs on our own dedicated EU servers — self-hosted data stack, own Robinhood Chain node · security

Powered by:constant·k — Private Solana RPC Services
SolutionsTrading Terminals

For terminal and trading-app builders

Market data for Solana trading terminals

MadeOnSol supplies the market data of a Solana trading terminal: REST for chart history and panels, token:prices and token:candles channels for the chart, and the DEX firehose for the tape; order entry stays in your product.

Try it free

  • Token lookups over REST: price, liquidity and deployer
  • 200 calls a day, no card needed
Get a free API key

Business

€400/month

  • The embed licence: show the data in your terminal, with Powered by MadeOnSol
  • 6 firehose and 15 stream connections
  • 500,000 REST calls a day
Start Business

A terminal for your own desk only, not for other users? Ultra €131/month

Billed in euros by card. Checkout shows today's dollar estimate; your card issuer sets the exact amount. USDC or SOL at the day's rate. Cancel anytime.

Free, Pro and Ultra keys are for your own internal use, such as bots, backends and research. Showing MadeOnSol data to your own users, for example in a public terminal or dashboard, needs Business. Compare plans

DEX programs on the tape
14
Token- and wallet-scoped channels
4
Candle timeframes over REST
6

A terminal combines live trades, prices and candles, token and trader context, history and the views each user sets up. Your frontend renders state; it does not decode Solana transactions.

One screen, four data sources

Each pane loads over REST, then stays current on a stream.

  • Chart

    token:candlesPro

    GET /tokens/{mint}/candlesPro

  • Price header

    token:pricesPro

    GET /token/{mint}Free

  • Trade tape

    dex:tradesUltra and Business

    GET /tokens/{mint}/tradesPro

  • Trader panel

    wallet:scoresPro

    GET /wallet/{address}Pro

The problem

One terminal screen is several data products at once. The chart needs history plus a live bar, the tape needs every trade on the token, the header needs the current price, and the panels need holders, risk and trader context. From raw Solana data that means decoding each venue, pricing tokens, aggregating candles and keeping every pane consistent after a reconnect.

Show me

Load it, subscribe, merge into state

One token, five steps, in the order a terminal opens it. Keys are what the API sends; values are illustrative.

  1. 1 · Load the token panel

    One REST call fills the header and panel. This route has no plan gate, so a Free key returns it too.

    GET /api/v1/token/{mint} (abridged)
    // GET /api/v1/token/8vdc...pump   Authorization: Bearer msk_...
    {
      "token": {
        "mint": "8vdc...pump",
        "name": "Example",
        "symbol": "EXMPL",
        "price_usd": 0.0000428,
        "market_cap": 42800,
        "liquidity_usd": 21870,
        "primary_dex": "pumpfun",
        "launchpad": "pumpfun",
        "mint_authority_revoked": true,
        "freeze_authority_revoked": true,
        "volume_24h_usd": 58210.4,
        "trades_24h": 1462,
        "price_age_seconds": 5,
        "price_is_stale": false
      },
      "as_of": "2026-09-23T10:02:05.120Z"
    }
  2. 2 · Backfill the chart

    History comes from REST in 1m, 5m, 15m, 1h, 4h, 1d. Note the field names: t, open, close here; bucket_start and *_price_usd on the stream.

    GET /api/v1/tokens/{mint}/candles
    // GET /api/v1/tokens/8vdc...pump/candles?tf=1m&limit=3
    {
      "mint": "8vdc...pump",
      "timeframe": "1m",
      "from": "2026-09-23T09:59:05.000Z",
      "to": "2026-09-23T10:02:05.000Z",
      "count": 2,
      "net_flow_included": false,
      "candles": [
        { "t": "2026-09-23T09:59:00+00:00", "open": 0.0000398, "high": 0.0000414, "low": 0.0000396, "close": 0.0000411, "volume_usd": 1204.7, "trades": 29, "market_cap_usd": 41100 },
        { "t": "2026-09-23T10:00:00+00:00", "open": 0.0000411, "high": 0.0000415, "low": 0.0000407, "close": 0.0000412, "volume_usd": 988.1, "trades": 24, "market_cap_usd": 41200 }
      ]
    }
  3. 3 · Subscribe to the token

    One named subscription carries both channels; filters.mints scopes them. Price, candle and risk mints each have their own per-connection budget: 25 on Pro, 100 on Ultra and 250 on Business. Over the cap the channel is rejected, never truncated.

    Subscribe on /ws/v1/stream
    // wss://madeonsol.com/ws/v1/stream  (token from POST /api/v1/stream/token)
    {
      "type": "subscribe",
      "sub_id": "chart-8vdc",
      "channels": ["token:prices", "token:candles"],
      "filters": { "mints": ["8vdc...pump"], "updates": true }
    }
  4. 4 · Merge the frames

    The last minute not yet stored at the REST call arrives as candle:closed; ticks and the open bar follow. Closed candles carry id and seq; price ticks and candle:update are state and carry neither.

    Frames you receive (candle:closed abridged)
    [
      {
        "channel": "token:candles",
        "sub_id": "chart-8vdc",
        "event": "candle:closed",
        "id": "candle:solana:8vdc...pump:1790157660",
        "seq": 184311,
        "data": {
          "chain": "solana",
          "mint": "8vdc...pump",
          "bucket_start": "2026-09-23T10:01:00.000Z",
          "bucket_end": "2026-09-23T10:02:00.000Z",
          "closed_at": "2026-09-23T10:02:14.402Z",
          "open_price_usd": 0.0000412,
          "high_price_usd": 0.0000431,
          "low_price_usd": 0.0000409,
          "close_price_usd": 0.0000428,
          "close_mc_usd": 42800,
          "volume_usd": 1843.2,
          "trades": 37,
          "buy_count": 22,
          "sell_count": 15,
          "final": true,
          "source": "token_ohlc_1m"
        },
        "ts": 1790157734402
      },
      {
        "channel": "token:prices",
        "sub_id": "chart-8vdc",
        "event": "token:price",
        "data": {
          "mint": "8vdc...pump",
          "price_usd": 0.0000431,
          "vwap_price_usd": 0.0000429,
          "market_cap_usd": 43100,
          "fdv_usd": 43100,
          "liquidity_usd": 21950,
          "primary_dex": "pumpfun",
          "primary_pool_address": "Gf7h...2kLm",
          "mc_change_pct": 0.7,
          "volume_usd": 58310.9,
          "mev_volume_pct": 3.1,
          "history_age_seconds": 86400,
          "source": "mc-tracker"
        },
        "ts": 1790157751120
      },
      {
        "channel": "token:candles",
        "sub_id": "chart-8vdc",
        "event": "candle:update",
        "data": {
          "chain": "solana",
          "mint": "8vdc...pump",
          "bucket_start": "2026-09-23T10:02:00.000Z",
          "bucket_end": "2026-09-23T10:03:00.000Z",
          "open_price_usd": 0.0000428,
          "high_price_usd": 0.0000433,
          "low_price_usd": 0.0000426,
          "close_price_usd": 0.0000431,
          "close_mc_usd": 43100,
          "volume_usd": 912.4,
          "trades": 18,
          "final": false,
          "as_of": "2026-09-23T10:02:31.120Z",
          "source": "mc-tracker:open_candle"
        },
        "ts": 1790157751180
      }
    ]
  5. 5 · Add the tape

    The firehose is a second socket with its own filters. min_sol: 0 includes trades under the default floor, marked dust: true. Available on Ultra and Business.

    Trade tape on /ws/v1/dex-stream (abridged)
    // wss://madeonsol.com/ws/v1/dex-stream
    // sent: {"type":"subscribe","sub_id":"tape-8vdc","filters":{"token_mints":["8vdc...pump"],"min_sol":0},"replay":50}
    {
      "channel": "dex:trades",
      "sub_id": "tape-8vdc",
      "data": {
        "wallet": "7vfC...rXs2",
        "mint": "8vdc...pump",
        "action": "buy",
        "sol_amount": 2.5,
        "token_amount": 12354830.7,
        "executed_price_sol": 0.00000020235,
        "tx_signature": "5K7j...",
        "slot": 449476901,
        "block_time": 1790157751,
        "dex": "pumpfun",
        "dust": false
      },
      "ts": 1790157751412
    }

Client state, slice by slice

StateWritten byMerge onAfter a reconnect
Chart barsGET /tokens/{mint}/candlescandle:closedcandle:updateREST t = stream bucket_start. Map open, high, low, close to the *_price_usd fields. A candle:update (final: false) redraws the open bar; the candle:closed for that minute replaces it.Resume replays closed candles from storage. candle:update is never replayed and has no snapshot, so the open bar returns with the next price move.
Price header and token panelGET /token/{mint}token:pricemint; the newest ts wins. The REST body fills the panel once, then ticks update price_usd, market_cap_usd and liquidity_usd.A fresh subscribe sends no price snapshot. A resume sends one token:price frame per watched mint with snapshot: true.
Trade tapedex:tradesGET /tokens/{mint}/tradestx_signature; prepend newest first. executed_price_sol is in SOL, the header price in USD.Resubscribe with replay (up to 500 recent trades from the server buffer) and drop signatures you already hold. The firehose has no resume cursor.

Try it

Call the token panel endpoint on a free key

A Free key calls GET /api/v1/token/{mint} right away, the same response step 1 shows. The price and candle channels start on Pro and the tape on Ultra and Business; the streaming reference lists each channel's scope and recovery.

Get a free API key Streaming reference Look up a token

Stream or request

Prices and candles plus a terminal feed

Stream what moves while a user watches; request what a user opens. Every row names the real channel and endpoint, with the plan each one starts on.

DataStreamREST
Price and market captoken:pricesProtoken:priceWhile the token is on screen. Ticks are coalesced per mint, not one per trade.GET /api/v1/token/{mint}FreeWhen the panel opens: the stream sends nothing until the next price move.
Candlestoken:candlesProcandle:closed · candle:update1-minute bars as they close; with updates: true, the open minute at most once per second per token.GET /api/v1/tokens/{mint}/candlesProChart history and every other timeframe: 1m, 5m, 15m, 1h, 4h, 1d.
Tradesdex:tradesUltra and BusinessParsed swaps on the token across 14 DEX programs, filtered by token_mints (up to 50 per subscription).GET /api/v1/tokens/{mint}/tradesProOlder tape, paged by cursor, for the pump.fun pipeline (pump.fun, LaunchLab/bonk, bags) only.
Risk inputstoken:riskProrisk:authority_changed · risk:supply_inflatedMint or freeze authority revoked, a transfer fee changed, supply drift crossing a level. Not a score stream.GET /api/v1/tokens/{mint}/riskProThe 0-100 score and its factors, computed at read time.
Trader contextwallet:scoresProdeployer:tier_changed · kol:score_state_changedDeployer tier and KOL state changes for the wallets you name.GET /api/v1/wallet/{address}ProWhen a user clicks a trader on the tape: KOL, alpha-wallet, bot and deployer flags.
HoldersREST onlyNo stream.GET /api/v1/tokens/{mint}/holdersProA live holder census with concentration shares, on demand.

Scoped channels take a list of mints or wallets per connection: 25 on Pro, 100 on Ultra and 250 on Business, each channel its own budget. dex:trades runs on the DEX firehose, a separate socket.

Architecture

From a DEX event to a pane on screen

Keep the API key and stream token out of the browser: your backend holds the connections and relays state to each viewer. Connections per plan are limited, so one upstream socket feeds every viewer of a token.

  1. 1 · MadeOnSol

    DEX event

    A swap on one of the decoded venues

  2. 2 · MadeOnSol

    MadeOnSol

    Decoded trade, price tick, 1-minute candle

  3. 3 · Yours

    Your backend

    Holds the key and stream token; one upstream socket per stream

  4. 4 · Yours

    App state

    Bars by bucket_start, tape by tx_signature, header by mint

  5. 5 · Yours

    Chart · tape · panel

    Rendered from state, not from raw frames

Request lane. The token panel, chart history, holders and trader profiles come from /api/v1 through the same backend (cache them per token) and seed the state the streams then update.

Snapshot plus stream

One snapshot, then only the changes

Polling the combined intelligence endpoint on every tick burns quota and source reads. The terminal helper, watchTokenIntelligence() in madeonsol-x402 4.3.0 and robinhood-chain-x402 0.21.0, reads the token once, then lets the existing stream channels decide which module is worth reading again. There is no token:intelligence channel: the helper combines channels that already exist on /ws/v1/stream.

  1. 1Stream

    Named subscription, acknowledged

    The panel subscribes on your ONE shared socket under its own sub_id and waits for the server ACK that names that sub_id and every requested channel. A partial ACK or a refusal shows the panel as degraded, never as live.

    subscribe { sub_id, channels, filters }
  2. 2REST

    One include-scoped snapshot

    After the ACK, one read of the intelligence endpoint with only the modules the panel renders. Each module keeps its own status, reason, as_of and provenance.

    GET /tokens/{mint}/intelligence?include=snapshot,risk
  3. 3Client

    Live price overlay

    Price ticks render as a separate overlay. They never rewrite REST data and never trigger a REST read; a late or out-of-order tick never replaces a newer one.

    token:prices / rhc:token_prices
  4. 4REST

    Selective, throttled re-fetch

    A risk, lock, KOL or candle event marks only its module stale. Refreshes are debounced (750 ms default) and limited per module (15 s default, 1 s to 10 min allowed), with zero background reads while the stream is quiet.

    include=risk
  5. 5Stream

    Reconnect, resync, disclose gaps

    On reconnect the SDK re-subscribes and the helper takes a fresh snapshot after the re-ACK. A reported replay gap sets incomplete: true and keeps it set until you reconcile the missing interval yourself and call acknowledgeHistoricalRecovery().

    incomplete: true

Lanes: Stream = your shared socket, REST = one intelligence read, Client = rendered in your app only.

What refreshes each module

Cost per module, out of a budget of 8 per read across at most 5 modules. Every read counts as one API call, and the helper never asks for more than one read at a time per panel.

  • snapshotcost 2

    Solana: token:prices (overlay)

    RHC: rhc:token_prices (overlay)

  • riskcost 2

    Solana: token:risk input changes

    RHC: rhc:token_risk verdict rechecks

  • lockscost 1

    Solana: token:locks lifecycle

    RHC: rhc:token_locks new locks and unlocks

  • flowcost 3

    Solana: token:candles minute close

    RHC: rhc:token_candles close or revision; rhc:dex_trades with the Ultra opt-in

  • buyer_qualitycost 2

    Solana: token:candles minute close

    RHC: rhc:token_candles; rhc:dex_trades with the Ultra opt-in

  • top_traderscost 2

    Solana: token:candles minute close

    RHC: rhc:token_candles; rhc:dex_trades with the Ultra opt-in

  • kolcost 1

    Solana: kol:trades, only with includeKolBroadcast

    RHC: rhc:kol_trades, only with includeKolBroadcast

  • holder_countcost 1

    Solana: snapshot only: last complete census, timestamped

    RHC: snapshot only: Transfer-log fold count, timestamped; unverified until reconciled

  • holderscost 3

    Solana: excluded from the composite (use /tokens/{mint}/holders)

    RHC: snapshot only

Pro and Ultra

  • Pro and up: the intelligence read, a stream token, prices, risk, locks and one-minute candles. Named subscriptions per connection: 5 on Pro, 10 on Ultra and 20 on Business; each panel uses one.
  • KOL updates are opt-in on every plan (includeKolBroadcast). The KOL channels are roster broadcasts, not filtered to your token, so they cost bandwidth.
  • The Robinhood Chain trade tape is Ultra and up and opt-in (includeRhcFirehose). The server does not filter it by address: you receive the whole attributed tape and the helper filters it client-side.
  • A one-minute candle close is a coarse trigger to re-read flow, buyer quality and top traders. It is not trade-by-trade coverage.

What is never pushed

  • holders and holder_count are snapshot only. Solana holder_count is the timestamped last complete census, never a live count.
  • Risk channels report input and verdict changes, not a continuously recomputed score.
  • A fresh snapshot after a reconnect is not a replay of missed trades. Delivery is at least once and ids are deduplicated; price ticks are state with no replay.
  • The DEX firehose and the ShredPrism early stream are separate sockets the helper does not use. An early observation is not a confirmed fill.
Solana · madeonsol-x402
// Node 22+, server side: the msk_ key never leaves your backend.
import { MadeOnSolREST } from "madeonsol-x402";

const client = new MadeOnSolREST({ apiKey: process.env.MADEONSOL_API_KEY });
const stream = client.stream(); // ONE shared socket for every panel

const mint = process.env.SOLANA_MINT;
const view = client.watchTokenIntelligence(mint, {
  stream,
  subId: "panel_main",              // unique per panel on this socket; "default" is refused
  tier: "PRO",                      // your plan; the server stays authoritative
  include: ["snapshot", "risk", "holder_count", "locks"], // cost 2 + 2 + 1 + 1 = 6 (max 8, max 5 modules)
  includeKolBroadcast: false,       // true = the whole KOL roster broadcast on this socket
  debounceMs: 750,
  minModuleRefreshMs: 15_000,
  onChange(v) {
    // v.phase: awaiting_subscribe | bootstrapping | live | degraded | stopped
    for (const [name, m] of Object.entries(v.snapshot?.modules ?? {})) {
      console.log(name, m.status, m.reason, m.as_of);
    }
    if (v.stale.length) console.log("refreshing", v.stale);
    if (v.incomplete) console.log("history may be incomplete; do not imply missed trades were recovered");
  },
  onLive(frame, module) {
    if (module === "snapshot") console.log("price overlay", frame.data);
  },
});

process.once("SIGINT", () => { view.dispose(); stream.close(); });
Robinhood Chain · robinhood-chain-x402
// Node 22+, server side. Key mode only: a keyless x402 client throws
// token_intelligence_requires_api_key.
import { RobinhoodChainX402 } from "robinhood-chain-x402";

const client = new RobinhoodChainX402({ apiKey: process.env.MADEONSOL_API_KEY });
const stream = client.stream();

const address = process.env.RHC_TOKEN_ADDRESS; // 0x..., compared case-insensitively
const view = client.watchTokenIntelligence(address, {
  stream,
  subId: "rhc_panel_main",
  tier: "ULTRA",
  include: ["snapshot", "risk", "flow"], // cost 2 + 2 + 3 = 7
  // Ultra+ only. rhc:dex_trades is NOT address-filtered by the server: you
  // receive the whole attributed RHC tape and the helper filters client-side.
  // Leave it off and flow refreshes on rhc:token_candles instead.
  includeRhcFirehose: false,
  onChange(v) {
    const flow = v.snapshot?.modules.flow;
    console.log(v.phase, flow?.status, flow?.reason); // e.g. partial_history / history_not_verified
  },
  onLive(frame, module) {
    if (module === "snapshot") console.log("price overlay", frame.data);
  },
});

process.once("SIGINT", () => { view.dispose(); stream.close(); });
In a browser panel. The same controller runs keyless in the page: your backend hands out a stream token and proxies the intelligence read, and the API key stays on the server. A stream token opens your account's stream, so serve it only to your own signed-in users, or keep the relay architecture above for a public product. How it was checked. A live run on both chains with several panels on one socket, a forced socket drop and reconnect, timing from ACK to first snapshot and from reconnect to live again, and a check that dispose left no subscriptions behind. That is a smoke test, not a latency guarantee.
Helper reference and browser exampleGet an API keyCompare plans

Display rights

A terminal shows data to its users, so it needs Business

Lower plans are licensed for internal use: your own trading, research and tooling. The Business embed licence lets one branded product (its web app, mobile apps and companion bot count as one) display the data to its end users, with a visible "Powered by MadeOnSol" notice near the data. It does not cover offering raw responses or bulk data for download.

Rights by planTerms, section 5aCompare plans

Redistribution or white-label: contact us about Enterprise.

Build outcomes

What terminal teams build

  • Web trading terminals
  • Live token pages
  • Multi-token watch screens
  • Trade tape widgets
  • Trader lookup panels

Coverage

What the tape and the channels cover

Read from the service code, not from marketing copy. For measured delivery and uptime, see the benchmarks, the API status page and data integrity.

Trade tape: 14 programs, 8 venues

  • pump.fun

    1 program

  • PumpSwap

    1 program

  • Raydium

    4 programs

  • Jupiter

    1 program

  • Orca

    1 program

  • Meteora

    4 programs

  • LaunchLab

    1 program

  • Moonshot

    1 program

Scoped channels on /ws/v1/stream

  • token:pricesPrice header · filters.mints

    token:price

  • token:candlesChart · filters.mints

    candle:closed · candle:update

  • token:riskRisk badge · filters.mints

    risk:authority_changed · risk:supply_inflated

  • wallet:scoresTrader panel · filters.wallets

    deployer:tier_changed · kol:score_state_changed

Keep going

Related

Solution

DEX Data

Every filter and frame of the DEX firehose.

Solution

Wallet Tracking

Watchlist events behind a trader panel.

Solution

Trading Bots

Launch, KOL and copy-trade signals.

Product

Business plan

The embed licence for customer-facing products.

Guide

Price, holder, volume and liquidity panels

A token dashboard in code.

Guide

A live KOL dashboard in Next.js

REST plus the stream in a web UI.

FAQ

Questions terminal builders ask

Which terminal data should stream and which should come from REST?+
Stream what changes while the user watches: the price header (token:prices), the current chart bar (token:candles) and the trade tape (dex:trades on the DEX firehose). Request what the user opens: the token panel, chart history, holders and trader profiles. A fresh price subscription sends nothing until the next price move, so load each panel over REST first. The streaming reference lists every channel's scope.
Which Solana DEXs does the trade tape cover?+
The DEX firehose decodes 14 Solana programs across 8 venues: pumpfun, pumpswap, raydium, jupiter, orca, meteora, launchlab, moonshot. REST trade history per token covers the pump.fun pipeline (pump.fun, LaunchLab/bonk, bags) only; for other tokens the firehose is the source.
Can my terminal show MadeOnSol data to its users?+
Yes, on Business. Its embed licence covers displaying the data inside one product of your own, to that product's end users, with a visible "Powered by MadeOnSol" notice. Free, Pro and Ultra keys are licensed for internal use only. Redistribution, raw data resale and white-label are Enterprise terms. See the rights table and the terms.
Can the terminal place orders through MadeOnSol?+
No. MadeOnSol has no order, quote or transaction endpoint and never holds funds. The order ticket, wallet connection, signing and routing are yours; MadeOnSol fills the chart, tape and panels around them.
How many tokens can one connection watch?+
Each scoped channel has its own per-connection budget: 25 on Pro, 100 on Ultra and 250 on Business mints for token:prices, the same again for token:candles and for token:risk. A subscribe over the cap is rejected, not truncated. On the firehose, each of up to 10 subscriptions per connection takes up to 50 mints.

Next step

Fill the chart and tape, then license the screen.

Check how the data is verified, call the panel endpoint on a free key, wire the streams, and pick the plan that lets you show it.

  1. 1 · ProofData integrity Request IDs, point-in-time queries, the archive.
  2. 2 · TryGet a free API key GET /token/{mint} works on it.
  3. 3 · DocsStreaming reference Scoped channels, caps, recovery.
  4. 4 · PlanBusiness embed licence Display rights on Business.