Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: loophole tape Free API
description: 'Live rug checks for new pump.fun memecoins on Solana (calibrated rug probability and graduation odds, holders, creator record, rug flags) and Robinhood Chain pons launch and token risk cards, computed in real time from our own independent capture of every on-chain event (not resold third-party data). Pay per request in USDC on Solana or Base through x402 with no account: $0.001-$0.04 per data call, $5.00 per daily dataset file; prepaid keys ($0.10 trial, $2.00) serve clients without an x402 library. Responses report coverage, freshness and observed evidence.'
version: 0.9.0
x-guidance: 'Machine-payable pump.fun intelligence and Robinhood Chain (pons) launch structure. Call /v1/x402/resources or /llms.txt first. First step, no key and no payment: GET /v1/token_check/{mint} (any Solana mint or Robinhood Chain pons token, or its link) answers a verdict word, one reason and coverage. Paid GET routes return 402 with the x402 v2 PAYMENT-REQUIRED header (and the same JSON in the body); pay USDC on Solana mainnet (Coinbase CDP facilitator) or on Base (Coinbase CDP facilitator), exact scheme, and retry with PAYMENT-SIGNATURE. Without an x402 client, buy a prepaid key once (/v1/keys/trial $0.10 or /v1/keys/new $2.00 in a browser wallet, or GET /v1/keys/transfer to pay with a plain USDC transfer from any wallet or exchange) and send it as the X-API-Key header. Every response is {ok, schema_version, generated_at, coverage: full|thin, data, meta{feed_lag_s, is_stale, next}}. Compact checks cost $0.005 for one mint or $0.01 total for up to five; full coverage and feed lag <= 5 s required. Free: /v1/token_check/{mint}, /v1/radar, /v1/check/coverage, /v1/check/watch, /v1/market/regime, /v1/sample/*, /health, /v1/labels. MCP at /mcp.'
contact:
name: loophole tape
url: https://api.loopholetape.com
email: hello@loopholetape.com
termsOfService: https://api.loopholetape.com/terms
servers:
- url: https://api.loopholetape.com
tags:
- name: free
description: no payment
paths:
/v1/calibration:
get:
summary: Get the validation tables behind the calibrated probabilities
description: Validation tables behind the calibrated probabilities inside compact checks (free).
operationId: calibration_v1_calibration_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
tags:
- free
security: []
/health:
get:
summary: 'Report feed health: lag behind the chain, last slot, counters'
operationId: health_health_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
description: 'feed health: seconds behind the chain, last slot, mints tracked, counters'
tags:
- free
security: []
/v1/market/regime:
get:
summary: 'Get the pump.fun market regime: launch rate, flow and rugs'
operationId: market_regime_v1_market_regime_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
description: 'market-wide regime meter: launch rate, mayhem share, buy/sell flow, fail share, migrations vs true graduations, rug flags (free)'
tags:
- free
security: []
/v1/sample/launches:
get:
summary: Get a three-item sample of recent launches, 300 s delayed
operationId: sample_launches_v1_sample_launches_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
description: free 3-item sample of /v1/launches/recent, delayed >= 300 s
tags:
- free
security: []
/v1/sample/rugs:
get:
summary: Get a three-item sample of recent rug flags, 300 s delayed
operationId: sample_rugs_v1_sample_rugs_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
description: free 3-item sample of /v1/rugs/recent, delayed >= 300 s
tags:
- free
security: []
/v1/sample/mint:
get:
summary: Get one full risk card for a mint older than 300 seconds
operationId: sample_mint_v1_sample_mint_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
description: free full risk card of one mint aged >= 300 s (the exact paid shape)
tags:
- free
security: []
/v1/datasets:
get:
summary: List the bulk dataset days with sizes, sha256 and links
operationId: datasets_index_v1_datasets_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
description: 'free index of the bulk datasets: days available, rows, bytes, sha256, sample and schema links, how to buy'
tags:
- free
security: []
/v1/track-record:
get:
summary: Get the radar's daily scorecard against observed outcomes
description: 'Free: the radar''s calls scored against outcomes per complete UTC day (scorecard from chainstack/track_record.py).'
operationId: track_record_view_v1_track_record_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
tags:
- free
security: []
/v1/keys/balance:
get:
summary: Read the status and remaining credit of a prepaid key
operationId: keys_balance_v1_keys_balance_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
description: 'free: status and credit remaining on a prepaid key (X-API-Key header); without a key: usage and how to buy one'
tags:
- free
security: []
/v1/radar:
get:
summary: List new pump.fun memecoins ranked by rug and graduation odds
description: 'Free live radar: top rug risk (age < 30 s) and top graduation probability (age < 15 min), each row one click from the paid check.'
operationId: radar_view_v1_radar_get
parameters:
- name: limit
in: query
required: false
schema:
type: integer
maximum: 25
minimum: 1
default: 10
title: Limit
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- free
security: []
/v1/rhc/regime:
get:
summary: Get the Robinhood Chain pons launch regime meter
operationId: rhc_regime_v1_rhc_regime_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
description: 'Robinhood Chain (pons) regime meter: launches/h, graduations/h and rate, median launch-to-graduation seconds, curve buys/sells per minute, unique buyers (free)'
tags:
- free
security: []
/v1/check/coverage:
get:
summary: Check coverage and freshness for one to five mints
operationId: check_coverage_v1_check_coverage_get
parameters:
- name: mints
in: query
required: false
schema:
anyOf:
- type: string
maxLength: 224
- type: 'null'
description: One to five comma-separated mint addresses; omitted = usage and mints covered right now
title: Mints
description: 'One to five comma-separated mint addresses; omitted = usage and mints covered right now A pasted link works too: pump.fun/coin/<mint>, gmgn.ai/sol/token/<mint>, solscan.io/token/<mint>, birdeye.so/token/<mint>, a Jupiter swap link or solana:<mint>; a DexScreener, Axiom or Photon link only when its id is a mint we know (a pair address is refused 400 pair_address_not_mint). The link is resolved before the 402, which names the resolved mint; an unreadable link is refused 400 url_not_recognised, unpaid.'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: 'free coverage and freshness check for one to five mints; quotes single and batch prices; called without mints: usage and mints covered right now'
tags:
- free
security: []
/v1/check/watch:
get:
summary: Poll a watchlist cursor for new risk or lifecycle events
operationId: watchlist_updates_v1_check_watch_get
parameters:
- name: mints
in: query
required: false
schema:
anyOf:
- type: string
maxLength: 224
- type: 'null'
description: One to five comma-separated mint addresses; omitted = usage and mints covered right now
title: Mints
description: 'One to five comma-separated mint addresses; omitted = usage and mints covered right now A pasted link works too: pump.fun/coin/<mint>, gmgn.ai/sol/token/<mint>, solscan.io/token/<mint>, birdeye.so/token/<mint>, a Jupiter swap link or solana:<mint>; a DexScreener, Axiom or Photon link only when its id is a mint we know (a pair address is refused 400 pair_address_not_mint). The link is resolved before the 402, which names the resolved mint; an unreadable link is refused 400 url_not_recognised, unpaid.'
- name: cursor
in: query
required: false
schema:
anyOf:
- type: string
maxLength: 1024
- type: 'null'
title: Cursor
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: 'free availability of new risk/lifecycle events for a watchlist; opaque cursor, no event details; called without mints: usage and a ready example'
tags:
- free
security: []
/v1/token_check/{mint}:
get:
summary: Check any Solana or pons token for rug risk, no payment needed
operationId: token_check
parameters:
- name: mint
in: path
required: true
schema:
type: string
description: A Solana mint (pump.fun or any other), a Robinhood Chain pons 0x curve or token address, or the token's pasted link.
examples:
- 73sfnFgqQzpSRZSimCC4sxpubqghRGYewYLmiUH2pump
- https://pump.fun/coin/73sfnFgqQzpSRZSimCC4sxpubqghRGYewYLmiUH2pump
- '0x1d63d24f2d6e726fa53c45cefcbee2c1b8ffa855'
title: Mint
description: 'A Solana mint (pump.fun or any other), a Robinhood Chain pons 0x curve or token address, or the token''s pasted link. A pasted link works too: pump.fun/coin/<mint>, gmgn.ai/sol/token/<mint>, solscan.io/token/<mint>, birdeye.so/token/<mint>, a Jupiter swap link or solana:<mint>, or for a Robinhood Chain token its pons link (www.ponsfamily.com/launchpad/<token>) or explorer link (robinhoodchain.blockscout.com/token/<token>). An unreadable link is refused 400 url_not_recognised.'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'400':
description: two different values, or a link no token could be read from (url_not_recognised, pair_address_not_mint)
'404':
description: 'not a token id: neither a Solana mint, a 0x address nor a link ({ok:false, error:not_a_token})'
'429':
description: the caller's hourly limit or the daily cap across all callers (Retry-After)
'503':
description: the pump.fun feed is stale or the checks are starting (feed_stale, checks_unavailable); the call is not counted
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: 'free, no key and no payment: the coarse pre-trade check of ONE token, the same answer as the MCP tool token_check. Give it a pump.fun mint, any other Solana mint (a thin answer read from the chain), a Robinhood Chain pons 0x curve or token address, or the token''s pasted link (pump.fun, GMGN, Solscan, Birdeye, Jupiter, pons, Blockscout): a verdict word (avoid | caution | no_flags_observed by the fixed public rule at /v1/labels), one reason, coverage (full | thin | not_covered) and age, with links to the paid detail; also GET /v1/token_check?mint=. 30 calls an hour per caller by default (429 over it) and a daily cap across all callers; no_flags_observed is not a safety verdict'
tags:
- free
security: []
components:
schemas:
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
x-discovery:
ownershipProofs:
- '0x1c71f60523d95a3b2e350f882830b4413163f2d8b74dd450566c11270928d85f70ee5c55493ae7220554c52055e3ad8f4aac4ccd4ba9043060875bc513940e741b'
- 59uLEUWTMbhHMLCxHBEkRtq19ASZ3V4m93j6HhRhuydjcbusnSonNhvSvFh2CwPTm9v1huc3Kpnjx1dQRYAeHhFK