---
title: "Poll new Solana tokens on pump.fun with rug and grad odds"
method: GET
path: "/v1/launches/since"
tags: ["paid"]
---

# Poll new Solana tokens on pump.fun with rug and grad odds

`GET /v1/launches/since`

## Request

- Base URL: `https://api.loopholetape.com`
- URL: `https://api.loopholetape.com/v1/launches/since`
- Auth: none required

Use when a bot polls for newly launched Solana tokens on pump.fun with their calibrated odds; for a one-off screen of the last hour use GET /v1/launches/recent, and for one mint the $0.005 rug check. The polling feed for bots: every covered launch created after `since` (unix seconds; default the last 60 s, at most the last hour), oldest first, up to 100 per call, each with creator, reserve, buys, buyer inflow, top-5 holder and creator shares, first-observed flags, the calibrated P(rug within 300 s) for young mints and P(true graduation), and the paid check URL. Returns next_cursor to pass back as since. An empty page costs the same call, so poll at the launch rate you need (about 20 launches per minute). Each item also carries its verdict word by the /v1/verdict rule with p_rug_300s and p_true_graduation; no_avoid=1 drops avoid items and min_p_grad keeps items at or above that P(true graduation), and next_cursor still advances past what they drop.

## Query parameters

- `since` number, nullable
- `limit` integer
- `no_avoid` boolean
- `min_p_grad` number

## Response `200`

Paid response (header PAYMENT-RESPONSE carries the settlement)

- Envelope
  - `ok` boolean, required
  - `schema_version` '2.0', required
  - `generated_at` string, date-time, required
  - `t` number, required: unix seconds at generation
  - `coverage` 'full' | 'thin', required: the mint is inside our live window (created while our captur / thin = the mint is not in the live window (older than ~2 h of silen
  - `data` object, required
  - `meta` object, required
    - `source` string
    - `version` string
    - `feed_lag_s` number, nullable: seconds between the newest event in our tape and now (the age of the newest event we ingested; it does not say whether the capture runs behind the chain, see chain_lag_s)
    - `is_stale` boolean: the ingest age (feed_lag_s) exceeds the route's freshness limit (5 s for compact risk checks, 30 s otherwise); a paid or keyed pump.fun request is also refused above 5 s of estimated chain lag when the gate enforces (see chain_lag_s, tape_behind), which this flag does not show
    - `chain_lag_s` number, nullable: estimated seconds the newest slot in our pump.fun tape is behind the Solana RPC's processed tip (slots_behind x the measured slot time, to 0.1 s); null when the tip is unknown; absent on Robinhood Chain answers
    - `slots_behind` integer, nullable: estimated slots between the newest slot in our pump.fun tape and the Solana RPC's processed tip (a tip read every 30 s, carried forward by the wall time since at the slot rate our own reads measure); 0 when the tape is at or ahead of the estimate; null when the tip is unknown
    - `tape_behind` boolean, nullable: true when the estimated chain_lag_s is above 5 s, false within 5 s, null when there is no tip to compare; on pump.fun answers only
    - `last_slot` integer, nullable
    - `price_usd` number, nullable
    - `next` object: related resources worth calling next (paths relative to base_url)
    - `disclaimer` string

## Other responses

- `402`: Payment required (x402 v2): header PAYMENT-REQUIRED = base64 of the body
- `422`: Validation Error

---

[API](https://skmtc.dev/loopholetape/apis/loophole-tape.md) · [All operations](https://skmtc.dev/loopholetape/apis/loophole-tape/llms.txt) · [OpenAPI document](https://skmtc.dev/loopholetape/apis/loophole-tape/revisions/eea099d70151?raw)
