GT LAUNCH FEED

Your RPC sees a mint. GT sees who minted it.

An RPC-style stream of every launch on Solana and Robinhood Chain, with the dev’s rap sheet already embedded. SSE, WebSocket, HTTP or MCP.

LIVE · 5 min delayed, free key

Pulling launches…

Raw RPC vs GT Launch Feed

GT runs on top of RPC nodes. Keep yours. GT rides next to it.

Raw launch log

{
  "mint":    "7xK...pump",
  "creator": "9pQ...fR2",
  "tx":      "4Zt...e1Q"
}

Mint, creator, tx. Who the dev is: your problem.

GT Launch Feed

{
  "mint":    "7xK...pump",
  "creator": "9pQ...fR2",
  "chain":   "solana", "venue": "pump.fun",
  "dev": {
    "launches":        111,
    "rugged_resolved": "110/111",
    "faded_resolved":  "0/111",
    "median_pull_s":   72,
    "median_pull_n":   110
  },
  "labels":   ["KOL"],
  "dev_last": "$100 at launch on this dev's last coin: peak $240, held to $0. RUGGED.",
  "card_url": "https://groundtruths.xyz/?ca=7xK...pump"
}

Same event. Dev’s coins, rugged and faded with N, pull time with N.

Specs

19,000Solana launches a day
3,580Robinhood Chain launches a day
15 min replayReconnect with Last-Event-ID
6,000 bytesMax per message
25 s heartbeatDead socket? You know fast.
MCP launch_feedAgents pull the last launches
Plain HTTPFor sniper bots: GET /v1/launches?n=100

Pricing

FREE KEY

$0

5 min behind.

200 calls a day.

FEED

$49 a month

Real time. 5,000,000 credits.

Covers ~677,400 launches a month. Every one, both chains.

HOLD $GTRUTH

2.5B $GTRUTH

Real time. Free. Tier 3.

Tier 2 (250M $GTRUTH): 60 s behind, free.

Under Tier 2: 5 min, like the free key. Never a ban.

Credit math, packs, the meter: /api.

Quick start

curl

curl -N -H "x-api-key: $GT_KEY" -H "accept: text/event-stream" https://api.groundtruths.xyz/v1/feed

JavaScript

const r = await fetch('https://api.groundtruths.xyz/v1/feed', {
  headers: { 'x-api-key': process.env.GT_KEY, accept: 'text/event-stream' } });
let buf = '';
for await (const chunk of r.body) {
  buf += new TextDecoder().decode(chunk, { stream: true });
  let i;
  while ((i = buf.indexOf('\n\n')) >= 0) {
    const frame = buf.slice(0, i); buf = buf.slice(i + 2);
    const d = /^data: (.*)$/m.exec(frame);
    if (d && /^event: launch/m.test(frame)) { const m = JSON.parse(d[1]); console.log(m.chain, m.mint, m.line); }
  }
}

Python

import json, os, requests
r = requests.get("https://api.groundtruths.xyz/v1/feed", stream=True,
                 headers={"x-api-key": os.environ["GT_KEY"], "accept": "text/event-stream"})
ev = None
for line in r.iter_lines(decode_unicode=True):
    if line.startswith("event: "):
        ev = line[7:]
    elif line.startswith("data: ") and ev == "launch":
        m = json.loads(line[6:])
        print(m["chain"], m["mint"], m["line"])

MCP: add https://api.groundtruths.xyz/mcp to Claude/Cursor.

{ "groundtruth": { "url": "https://api.groundtruths.xyz/mcp", "headers": { "x-api-key": "gt_live_..." } } }