Welcome to Flintr - Documentation
Flintr is your one-stop feed for real-time Solana token launches—delivering fresh market intel the moment a new coin goes live on Pump.fun, Pump Swap, and other emerging launchpads. Traders, quants, and builders all use Flintr to spot opportunities early and focus on innovation instead of hunting for data.
Behind the scenes, Flintr streams block-0 alerts over WebSocket with sub-second latency. Every JSON payload arrives ready for bots or dashboards and includes creator wallet, mint address, supply, and liquidity-pair details. Current coverage spans Pump.fun and Pump Swap. Moonit and Raydium LaunchLab are next on the roadmap, giving developers the widest real-time Solana signal layer for custom filters and trading logic.
Real-time Signals
Receive token creation signals in real-time via WebSocket
Strategic data
Access key insights on each token to fuel your trading strategy
Easy Integration
Simple API design with examples for JavaScript, Python, and more
Quick Start Guide
Follow these steps to quickly integrate with Flintr and start receiving real-time token signals:
- Sign up for Flintr – Create an account and subscribe to a plan that suits your needs.
- Get your API key - Generate an API key from your dashboard. Keep this key secure as it will be used for all API requests.
- Connect to WebSocket - Establish a WebSocket connection to receive real-time signals as they occur.
- Process signals - Implement logic to process and act on the signals you receive according to your trading strategy.
Note: For production applications, implement reconnection logic to handle potential disconnections.
Authentication
All API requests require authentication using your API key. You can generate an API key from your Flintr dashboard.
Important: Developer accounts only have a 7-Day Free Trial access to the websocket, which starts with the first API key generation and does not reset with subsequent key generations. Once the key has expired, you'll need to upgrade your account to a Sniper tier to continue using Flintr.
Important: Keep your API key secure and never expose it in client-side code. If you believe your API key has been compromised, regenerate it immediately from your dashboard.
Important: API Keys automatically expire when the account paid subscription status changes (Developer-to-Sniper or Sniper-to-Developer). Make sure to generate a new key before integrating with your application.
WebSocket API
The WebSocket API provides real-time token signals as they happen. This is the recommended way to receive signals if your strategy requires immediate action.
Connection
To establish a WebSocket connection, connect to the following endpoint:
wss://api-v1.flintr.io/?token=[YOUR_API_KEY]
Signal Format
When a new signal is available, you'll receive a message in the following formats. Note that all platforms and event types are sent on the same websocket connection. It is thus necessary to filter based on platform and event classes/types to achieve your desired results.
Token launches:
{
"timeSent": 1748036482000,
"timeDetected": 1748036479000,
"blockchainDelay": 1.695957,
"transactionTime": 0.641921,
"signature": "3Ko2…NuHv",
"event": {
"class": "token",
"platform": "pump.fun",
"type": "mint"
},
"data": {
"mint": "9A76…pump",
"metaData": {
"name": "Example token",
"symbol": "EXT",
"description": "A new mint!",
"image": "https://example.com/example.png",
"twitter": "https://x.com/example",
"website": "https://x.com/i/communities/example",
"createdOn": "https://pump.fun"
},
"tokenData": {
"mintDatetime": 1748036479000,
"updateAuthority": "TSLv…eokM",
"creator": "8U6d…as6s",
"decimals": 6,
"isBundled": true,
"bundleAmount": 0.9903592,
"latestPrice": "0.000000029822"
},
"ammData": {
"bondingCurve": "F21P…oSvK",
"associatedBondingCurve": "EBDk…X3p3",
"vaultCreatorATA": "GMVf…771s",
"vaultCreatorAuthority": "f2Z4…tVA9"
}
}
}
Token graduations:
{
"timeSent": 1746387580000,
"timeDetected": 1746387578000,
"blockchainDelay": 1.588838,
"transactionTime": 0.716285,
"signature": "498b…fhhS",
"event": {
"class": "token",
"platform": "pump.fun",
"type": "graduation"
},
"data": {
"mint": "Skb3…pump",
"metaData": {
"name": "Example token",
"symbol": "EXT",
"description": "A graduation meme token",
"image": "https://example.com/example.png",
"twitter": "https://x.com/example",
"website": "https://x.com/i/communities/example"
},
"tokenData": {
"mintDatetime": 1746386003463,
"migrateInstruction": true,
"lockedLP": true,
"freezeAuthority": null,
"mintAuthority": null,
"updateAuthority": "3zDg…VNaA",
"isNative": false,
"holderDistribution": {
"0": {"address": "DXYZ…wzFbD", "amount": 212943394.916821},
"1": {"address": "8S43…JwJw", "amount": 30905022.792736},
"2": {"address": "81Yf…fQf5", "amount": 30027308.835351},
"3": {"address": "FPjM…kHwu", "amount": 27029480.942816},
"4": {"address": "8UiW…qWCP", "amount": 17044849.192236},
"5": {"address": "Fc1j…hC4z", "amount": 15582914.502887},
"6": {"address": "Fa31…HtnW", "amount": 15295954.591196},
"7": {"address": "HTxG…dxPQ", "amount": 14566477.861491},
"8": {"address": "HWka…DMVi", "amount": 14509102.054108},
"9": {"address": "EHqP…ERAx", "amount": 14337490.68874}
},
"creator": "2xKD…pFFQ",
"signer": "39az…UJjg",
"quoteAmount": "84.990359973",
"baseAmount": "206900000",
"decimals": 6
},
"ammData": {
"ammId": "CbuM…yoE6",
"poolBase": "DXYZ…zFbD",
"poolQuote": "Ec7c…iexh",
"vaultCreatorATA": "9zmj…PWU1Z",
"vaultCreatorAuthority": "9BpU…opX9D"
},
"platformData": {
"marketCapInSOL": 400.320762125,
"pumpKOTHDatetime": 1746386505000,
"pumpTrades": 1939,
"pumpLikes": 17,
"pumpReplies": 13
}
}
}
We also send pings every minute to confirm the Websocket connection is still alive.
{
"time": "2025-05-04 20:31:08",
"event": {
"class": "ping"
}
}
Data Models
The Flintr WebSocket feed emits real-time trading signals with rich, structured payloads. To make integration smooth, we break down the structure of each Signal into intuitive groups: general metadata, event type, token details, AMM data, and platform-specific stats.
We send two event types: (1) PINGS to confirm the websocket is running; (2) TOKENS with signal data.
PINGS
time
string
Datetime of when the ping was sent out in UTC, in the YYYY-MM-DD HH:MM:SS format.
2025-05-04 20:41:10
class
string
Parent: event
Type of event sent out. Ping!
ping
UNIFIED TOKEN SIGNAL SCHEMA
Legend: Required /Optional (platform-specific or nullable)
This unified schema covers both mint and graduation events. The event.type
field tells you which it is: mint
or graduation
.
timeSent
integer
Unix timestamp (ms) when Flintr emitted the signal.
1748036482000
timeDetected
integer
Unix timestamp (ms) when the event was first visible on-chain.
1748036479000
blockchainDelay
float
Seconds between the event happening and its visibility on the blockchain (RPC/indexer availability).
1.102580
transactionTime
float
Seconds Flintr took to process and publish the signal after detection.
0.482359
signature
string
Solana transaction signature associated with the event (mint or graduation).
5ydu…Wj1G
Event
class
string
Parent: event
Class of event. For token events this is always 'token'.
token
platform
string
Parent: event
Origin platform/launchpad (e.g., pump.fun, letsbonk.fun, bags.so, moonshot.fun, studio.jup.ag, moonit.fun, heaven.fun, raydium.io).
pump.fun
type
string
Parent: event
Event type: 'mint' (new token created) or 'graduation' (moved to AMM/pool).
mint
Data · metaData
name
string
Parent: data/metaData
Token name.
Example token
symbol
string
Parent: data/metaData
Ticker symbol.
EXT
description
string
Parent: data/metaData
Creator-provided description (if any).
A new mint!
image
string
Parent: data/metaData
Token image URL (if any).
https://example.com/example.png
twitter
string
Parent: data/metaData
X/Twitter link (if any).
https://x.com/example
telegram
string
Parent: data/metaData
Telegram link (if any).
https://t.me/example
website
string
Parent: data/metaData
Website/community link (if any).
https://example.com
createdOn
string
Parent: data/metaData
Reference URL for the platform where the token was created (if available).
https://pump.fun
Data · tokenData
mintDatetime
integer
Parent: data/tokenData
Unix timestamp (ms) when the token was first minted.
1748036479000
updateAuthority
string
Parent: data/tokenData
Account allowed to update token metadata (often null/renounced).
TSLv…eokM
creator
string
Parent: data/tokenData
Original token creator address.
8U6d…as6s
decimals
integer
Parent: data/tokenData
Token decimals (commonly 6; sometimes 9 on Raydium).
6
freezeAuthority
string
Parent: data/tokenData
Freeze authority (if any).
null
mintAuthority
string
Parent: data/tokenData
Mint authority (if any).
null
isBundled
bool
Parent: data/tokenData
Whether a buy was bundled with the mint (platform-dependent).
true
bundleAmount
float
Parent: data/tokenData
Amount of SOL bundled with the mint, if any.
2.178217821
latestPrice
float
Parent: data/tokenData
Latest observed price around mint time (if available).
0.000000029989
migrateInstruction
bool
Parent: data/tokenData
Whether a migration/move to AMM instruction was present (graduation).
true
lockedLP
bool
Parent: data/tokenData
Whether LP was locked/burned at graduation (if detectable).
true
holderDistribution
object
Parent: data/tokenData
Top holder map at graduation time (index → {address, amount}).
{"0":{"address":"DXYZ…wzFbD","amount":212943394.916821},"1":{"address":"8S43…JwJw","amount":30905022.792736}}
totalSupply
string
Parent: data/tokenData
Total supply (string to avoid float precision issues).
999999999.000000
signer
string
Parent: data/tokenData
Payer/signer for the AMM creation/graduation, if applicable.
PayR…dAMM2
quoteAmount
string
Parent: data/tokenData
Quote asset amount deposited to the pool at graduation (string for precision).
14500
baseAmount
string
Parent: data/tokenData
Base asset amount deposited to the pool at graduation (string for precision).
600000000
Data · ammData (all variants)
bondingCurve
string
Parent: data/ammData
Bonding curve account (Pump.fun, Moonit).
F21P…oSvK
associatedBondingCurve
string
Parent: data/ammData
Associated bonding curve token account.
EBDk…X3p3
vaultCreatorATA
string
Parent: data/ammData
Creator vault ATA (Pump.fun).
GMVf…771s
vaultCreatorAuthority
string
Parent: data/ammData
Creator vault authority (Pump.fun).
f2Z4…tVA9
backendAuthority
string
Parent: data/ammData
Backend authority (Moonit).
BdA1…tYxR
poolState
string
Parent: data/ammData
AMM pool state account (Raydium/Meteora/Heaven).
92bn…hF8k
poolBase
string
Parent: data/ammData
Base token vault.
C1vP…9nM8
poolQuote
string
Parent: data/ammData
Quote token vault.
E4zA…5LpR
quoteMint
string
Parent: data/ammData
Quote mint (WSOL / USDC).
So11111111111111111111111111111111111111112
ammConfig
string
Parent: data/ammData
AMM configuration PDA.
CfgH…9VqP
ammType
string
Parent: data/ammData
AMM type hint (e.g., 'amm', 'cpmm', 'dammv2', 'dammv1').
cpmm
ammId
string
Parent: data/ammData
AMM identifier account (program-specific).
AMM1…32sd
openOrders
string
Parent: data/ammData
Open orders account (AMM/orderbook variants).
OOr1…KmLp
targetOrders
string
Parent: data/ammData
Target orders account (AMM/orderbook variants).
TOr2…pXas
marketId
string
Parent: data/ammData
Market ID (AMM/orderbook variants).
Mkt1…Zpq2
observationState
string
Parent: data/ammData
Observation/account state (CPMM/Meteora).
ObsK…12sQ
vaultAuthority
string
Parent: data/ammData
Vault authority (AMM variants).
VAu1…asQp
poolAuthority
string
Parent: data/ammData
Pool authority PDA (dAMMv2).
3BgP…7YpM
eventAuthority
string
Parent: data/ammData
Event authority PDA (dAMMv2).
Evt1…pP9L
ammProgram
string
Parent: data/ammData
AMM program id (dAMMv2/dAMMv1).
PrgB…mmV2
LpMint
string
Parent: data/ammData
LP token mint (dAMMv1).
LPMn…tLp1
quoteVaultAuthority
string
Parent: data/ammData
Quote vault authority (dAMMv1).
QVau…tA99
baseVaultAuthority
string
Parent: data/ammData
Base vault authority (dAMMv1).
BVau…bX72
quoteVaultLpMint
string
Parent: data/ammData
Quote vault LP mint (dAMMv1).
QVLP…11nX
baseVaultLpMint
string
Parent: data/ammData
Base vault LP mint (dAMMv1).
BVLP…22zY
quoteVaultLp
string
Parent: data/ammData
Quote vault LP account (dAMMv1).
QVLp…qXp1
baseVaultLp
string
Parent: data/ammData
Base vault LP account (dAMMv1).
BVLp…bXp2
quoteProtocolFee
string
Parent: data/ammData
Protocol fee vault for quote (dAMMv1).
QFee…1pZ9
baseProtocolFee
string
Parent: data/ammData
Protocol fee vault for base (dAMMv1).
BFee…2kW1
platformData
marketCapInSOL
float
Parent: platformData
Market cap in SOL at creation/graduation time (if available on the platform).
212.5
Implementation Examples
Here's how to connect to the Flintr WebSocket API in different programming languages:
Javascript
// API key from your Flintr dashboard
const API_KEY = 'YOUR_API_KEY';
const WS_URL = `wss://api-v1.flintr.io/sub?token=${API_KEY}`;
// Connect to Flintr WebSocket API
function connect() {
const ws = new WebSocket(WS_URL);
ws.onopen = () => console.log('✅ Connected');
ws.onmessage = e => {
try {
const sig = JSON.parse(e.data);
console.log('🔔 Signal:', sig);
// …your buy logic here…
} catch {
console.error('⚠️ Invalid JSON:', e.data);
}
};
ws.onerror = e => console.error('⚠️ Error', e);
ws.onclose = () => {
console.log('🔴 Disconnected — reconnecting in 5s');
setTimeout(connect, 5000);
};
}
// kick things off
connect();
Python
import json
import time
from websocket import WebSocketApp
# API key from your Flintr dashboard
API_KEY = "YOUR_API_KEY"
WS_URL = f"wss://api-v1.flintr.io/sub?token={API_KEY}"
def on_open(ws: WebSocketApp):
print("[Flintr] Connected → streaming signals…")
def on_message(ws: WebSocketApp, message: str):
try:
sig = json.loads(message)
except json.JSONDecodeError:
print("⚠️ Malformed JSON:", message)
return
# pretty-print the entire signal
print(json.dumps(sig, indent=2))
# …your buy logic here…
def on_error(ws: WebSocketApp, error):
print(f"Error: {error}")
def on_close(ws: WebSocketApp, close_status_code, close_msg):
print(f"Disconnected (code={close_status_code}): {close_msg}")
# auto-reconnect after a pause
time.sleep(5)
print("Reconnecting…")
start_ws()
def start_ws():
ws = WebSocketApp(
WS_URL,
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close
)
# run in blocking mode with ping keep-alive
ws.run_forever(ping_interval=30, ping_timeout=10)
if __name__ == '__main__':
try:
start_ws()
except KeyboardInterrupt:
print("\nStopped by user")