API reference · v1

Introduction

The Launchprint API serves the same verdicts as the Telegram bot, in JSON. Pass a token, pool or config address — or a Solscan, DexScreener, Jupiter or Meteora link — and get the verdict with the flags behind it.

Base URL: https://api.launchprint.xyz. All responses are JSON. Timestamps are unix seconds; SOL amounts are in SOL.

curl
curl https://api.launchprint.xyz/v1/check/<token-or-pool-address>

Authentication

Public reads need no key. Send a key in the X-API-Key header to unlock more:

curl -H "X-API-Key: $LAUNCHPRINT_KEY" \
  https://api.launchprint.xyz/v1/check/<address>

Keys are issued on request — info@launchprint.xyz.

Rate limits

Requests are limited per minute: per IP without a key, with a higher limit for a valid key. Exceeding the limit returns 429 rate_limited; the message states the current limit. Invalid keys are checked after the rate limit, so key guessing is rate-limited too.

Endpoints

GET/v1/check/{address}

Verdict for a token, launch pool, config, or a post-migration Meteora DAMM v2 / DLMM pool (resolved to its token). kind is launch, config, token or unknown. When the address came through a post-migration pool, the response has via: { venue, pool }. Tokens from other launchpads are recognised: { "kind": "token", "dbc": false, "launchpad": "pump.fun" }.

response.json
{
  "kind": "launch",
  "verdict": "AMBER",
  "launch": {
    "pool": "<dbc-pool>",
    "token": "<mint>",
    "config": "<config>",
    "created_time": 1791261146,
    "graduated_time": null,
    "trades_sampled": true,
    "trades": {
      "count": 214,
      "wallets": 87,
      "creator_opening_buy_sol": 1.5,
      "fan_out_sellers": 0
    }
  },
  "config": {
    "verdict": "AMBER",
    "flags": [ ... ]
  }
}

GET/v1/latest

Latest launches with RED, RED-LINK or AMBER verdicts.

ParameterDefaultDescription
hours2Look-back window, 1–24.
limit20Maximum items, 1–100.
response.json
{
  "hours": 2,
  "count": 2,
  "launches": [
    { "pool": "<pool>", "token": "<mint>", "config": "<config>",
      "verdict": "RED", "created_time": 1791261146 },
    { "pool": "<pool>", "token": "<mint>", "config": "<config>",
      "verdict": "AMBER", "created_time": 1791260512 }
  ]
}

GET/v1/stats

Launches in the last 24 hours by verdict, and how fresh the analysis is.

response.json
{
  "launches_24h": 3912,
  "by_verdict_24h": { "RED": 1402, "SELF-GRAD": 1180, "GREEN": 1101, "AMBER": 210, "RED-LINK": 19 },
  "configs_analysed": 2909,
  "analysis_age_secs": 312
}

GET/v1/health

Service status and analysis age. No rate limit.

response.json
{ "ok": true, "configs": 2909, "analysis_age_secs": 312 }

Verdicts

A verdict is about one config — never a whole launchpad. Losses alone never make a verdict negative.

GREEN
No major red flags in the rules or observed trading.
SELF-GRAD
Instant or self-funded graduation, no real market on the curve.
AMBER
Risky rules or suspicious but inconclusive trading; visible before buying.
RED
Synthetic launch: trading dominated by the creator and linked wallets.
RED-LINK
Rules linked by specific addresses to a known synthetic-launch operator, flagged before the first trade.

Errors

Errors use HTTP status codes and a JSON body with a stable machine code:

error.json
{ "error": "rate_limited", "message": "limit is 30 requests per minute" }
StatusCodeMeaning
400bad_addressThe path is not a Solana address (or a link containing one).
401invalid_api_keyX-API-Key was sent but is not valid.
404not_indexedAddress is not in the index; on-chain lookup requires a key.
404not_dbcNot a supported pool, token or config.
404launch_not_foundLaunch not found in available history; try the pool address.
429rate_limitedToo many requests this minute.
502rpc_errorUpstream RPC failed; retry with backoff.