What You Can Do
Track a Discord Server
You track a Discord server by passing a server invite as thesid. Scrapest resolves the invite to the underlying server (guild) and monitors messages across its channels.
The sid accepts any of these forms:
- A bare invite code —
abc123 - A short URL —
discord.gg/abc123 - A full URL —
https://discord.com/invite/abc123
The
externalId returned is the server (guild) ID the invite resolved to
— not a channel ID. Use it (or the internal id) as the eid/iid when you
later call DELETE /track/discord. Invite resolution fails with Invalid or expired Discord invite if the invite is dead, so prefer a non-expiring
invite.How Joining Works (Human-in-the-Loop)
Scrapest monitors servers using real Discord accounts. To avoid the rate-limiting and bans that automated joins trigger, joining and leaving a server is a human-in-the-loop step — it is not automatic. YourPOST (or DELETE) call succeeds immediately and the source is recorded. If Scrapest isn’t already monitoring that server, the join is handed off to a human-in-the-loop review before the account joins.
Because joining is gated on that review, expect a short delay between creating the tracking and the first messages arriving for a server Scrapest hasn’t joined before. Servers Scrapest is already in start streaming immediately. Leaving is only requested once no other API key is still tracking that server.
You’re notified of the outcome on your admin dashboard — and via Telegram if you’ve opted in to Telegram notifications:
- Tracking is live — the account joined the server and messages are now streaming.
- Could not be set up — the server couldn’t be joined, so the tracking you created is automatically removed. Check the invite is valid and try again.
Token & Cashtag Monitoring
Scrapest automatically detects token mentions and cashtags in Discord messages —$BTC, $SOL, $ETH, and any custom token symbol. This works the same way as X token search, applied to your tracked Discord sources.
Messages containing token references are flagged in the webhook payload for easy filtering.
Backfill History
Retrieve historical messages from tracked Discord servers.In the examples below,
src_789 is the internal ID (the Discord source
cuid) of the server whose historical data you want to pull. This is the same
id returned when you created the tracking via POST /track/discord.Webhook Payload
When a tracked Discord server receives a message in any of its channels, your webhook receives aSourceEvent object. This is the exact shape sent via JSON.stringify to your webhook URL:
payload is a dynamically flattened representation of the underlying
discord.py-self Message — all object IDs are stringified and nested
objects (author, channel, etc.) are expanded inline. payload.author is
always normalized to include id, username, and globalName. The message’s
channel is available on the nested channel object within the payload.Delivery Methods
Discord data is delivered through all the same channels as X:- Webhooks — Push to your endpoint
- WebSocket — Real-time bidirectional stream
- SSE — Server-sent events with auto-reconnect
API Reference
All tracking endpoints use/track/:source where :source is x, telegram, or discord.
- Create Tracking —
POST /track/discord - List Tracked Sources —
GET /track/discord - Delete Tracking —
DELETE /track/discord - Trigger Backfill —
PUT /backfill - Backfill Status —
GET /backfill/status - Get History —
GET /account/history/:id