Callout events
Follow pump.fun callouts, author updates, replies, and reposts on your WebSocket. Render initial content, then merge optional enrichment.
Select callout accounts
In the Callouts tab, add a pump.fun username, Solana wallet, or profile URL. Labels are optional.
- Use a Solana wallet for the account, regardless of the token's chain.
- Minimum: 10 accounts. Pro, Scale, and Ultra Speed: 100. Pending additions count toward the limit.
account/callout
Show content immediately. d.platform is pump_fun; caller username and token address are required.
Optional d.token.chainId uses CAIP-2: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp for Solana mainnet; eip155:56, eip155:999, eip155:4663, or eip155:8453 for EVM chains. When absent, the chain is unspecified.
Text, media, positions, and token/price details are optional. Optional images: d.caller.image (avatar), d.token.image (token artwork).
- Optional
d.kind:callout,author_update,reply, orrepost. Author updates are new posts, not enrichment. d.calleris the tracked actor.d.referenceholds the original author, text, and media;d.reference.replyholds a reposted reply and its author, not the reposter.replyIdidentifies a reply or author update. OptionalparentReplyIdandrootReplyIdlink the thread;calloutIdidentifies the original callout.- Exact decimal prices:
calloutPrice/maxPriceSol(SOL),calloutPriceUsd/maxPriceUsd(USD). Keep strings or use a decimal library. USD prices do not imply SOL prices. marketCapUsdandmultipleare optional numbers. Position values are exact decimal strings:amountHeldis a token amount,pnlPercentagea percentage, and*Usdfields USD amounts.
Callout event type
typescripttype CalloutCaller = {
username: string;
image?: string;
};
type CalloutReply = {
caller: CalloutCaller;
replyId: string;
parentReplyId?: string;
rootReplyId?: string;
text?: string;
mediaUrl?: string;
};
type CalloutEvent = {
platform: 'pump_fun';
caller: CalloutCaller;
kind?: 'callout' | 'author_update' | 'reply' | 'repost';
text?: string;
mediaUrl?: string;
// Required for replies and author updates.
replyId?: string;
parentReplyId?: string;
rootReplyId?: string;
reference?: {
caller: CalloutCaller;
text?: string;
mediaUrl?: string;
reply?: CalloutReply;
};
position?: {
amountHeld?: string;
valueUsd?: string;
costBasisUsd?: string;
pnlUsd?: string;
pnlPercentage?: string;
realizedPnlUsd?: string;
};
token: {
address: string;
chainId?: string;
symbol?: string;
name?: string;
image?: string;
};
url?: string;
marketCapUsd?: number;
// SOL, exact decimal.
calloutPrice?: string;
// USD, exact decimal.
calloutPriceUsd?: string;
multiple?: number;
// SOL peak, exact decimal.
maxPriceSol?: string;
// USD peak, exact decimal.
maxPriceUsd?: string;
calloutId: string;
createdAt: number;
receivedAt?: number;
};
type CalloutUpdateEvent = CalloutEvent & {
// Original envelope id, not calloutId.
updateOf: string;
};Callout event
json{
"v": 1,
"t": "account",
"op": "callout",
"id": "callout.0123456789abcdef0123",
"ts": 1772000001060,
"d": {
"platform": "pump_fun",
"caller": {
"username": "CryptoCalls",
"image": "https://cdn.example/avatar.png"
},
"kind": "callout",
"text": "Watching this token.",
"mediaUrl": "https://cdn.example/chart.png",
"token": {
"address": "So11111111111111111111111111111111111111112",
"chainId": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"
},
"url": "https://pump.fun/callouts/So11111111111111111111111111111111111111112/9ab3177c-7b35-4d99-9cca-8b426f74a270",
"marketCapUsd": 156230.75,
"calloutPriceUsd": "0.00018750",
"multiple": 2.5,
"calloutId": "9ab3177c-7b35-4d99-9cca-8b426f74a270",
"createdAt": 1772000001000,
"receivedAt": 1772000001050
}
}{
"v": 1,
"t": "account",
"op": "callout",
"id": "callout.repost-example",
"ts": 1772000003060,
"d": {
"platform": "pump_fun",
"kind": "repost",
"caller": { "username": "MarketReader" },
"token": { "address": "So11111111111111111111111111111111111111112" },
"calloutId": "9ab3177c-7b35-4d99-9cca-8b426f74a270",
"createdAt": 1772000003000,
"reference": {
"caller": { "username": "CryptoCalls" },
"text": "Watching this token.",
"reply": {
"caller": { "username": "ReplyAuthor" },
"replyId": "reply-example",
"text": "Watching the volume too."
}
}
}
}account/callout_update
Merge optional details into the original event. Do not send another alert.
- Deduplicate by this envelope's
id.d.updateOfpoints to the original envelopeid, notcalloutId. - Merge supplied fields, including nested
caller,token,position, andreferencefields. Omitted fields do not erase earlier values. - If the original is missing, store or ignore the update; do not treat it as a new callout.
- Updates are optional. Show initial content even if no update arrives.
{
"v": 1,
"t": "account",
"op": "callout_update",
"id": "callout_update.556abf0021a7ff937a1a804ec0a0c245d497bcc6090af66179e74ce03c0970e0",
"ts": 1772000002060,
"d": {
"platform": "pump_fun",
"updateOf": "callout.0123456789abcdef0123",
"caller": { "username": "CryptoCalls" },
"kind": "callout",
"token": {
"address": "So11111111111111111111111111111111111111112",
"symbol": "ABC",
"name": "Alpha Beta",
"image": "https://cdn.example/token.png"
},
"calloutPriceUsd": "0.00018750",
"calloutPrice": "0.00000125",
"maxPriceSol": "0.00000450",
"maxPriceUsd": "0.00067500",
"calloutId": "9ab3177c-7b35-4d99-9cca-8b426f74a270",
"createdAt": 1772000001000
}
}Use identifiers and timestamps
Deduplicate by envelope id. Replies and reposts share the original calloutId, not the envelope ID.
d.createdAt: occurrence creation time.d.receivedAt: optional TweetStream receipt time.- Envelope
ts: preparation time.