Public API
Read only endpoints for public channel data. No API key needed.
- Base URL:
https://fishrift.com - Responses are JSON.
:usernamematches any connected platform name, preferring Twitch.- Creators with a private profile return
404 {"error":"Not found"}on profile endpoints.
Note: these endpoints don't send CORS headers yet. Call them from your server, not from browser code on another site.
Profile
GET /api/public/profile/:username
Everything on a creator's public profile: names, avatar and banner, bio, live status, connected platforms, social links, cosmetics, schedule and visible sections.
| Endpoint | Returns |
|---|---|
GET /api/public/profile/:username/trophies | { season, trophies } |
GET /api/public/profile/:username/spotlight-history | { months } |
GET /api/public/profile/:username/cookies | { given, count, stats } |
GET /api/public/cookies/leaderboard?limit=50 | Top cookie givers on Fishrift, up to 100 |
Schedule
GET /api/public/schedule/:username
{
"creator_timezone": "Europe/Amsterdam",
"highlight": { "title": "Efteling day", "platform": "twitch", "start_datetime": "2026-10-05T18:00:00Z", "days_until": 1, "is_live": false },
"recurring": [{ "title": "Chill stream", "days": ["mon", "wed"], "time": "20:00", "timezone": "Europe/Amsterdam", "duration_minutes": 120 }],
"upcoming": [],
"recent": [],
"series": []
}Recurring times are local to their timezone.
recent lists dated entries from the last 8 days that are already over, in the same shape as upcoming. Week views use it to show past days greyed out instead of empty.
GET /api/public/schedule/:username/embed returns a short version: the highlight, up to 4 recurring streams and the next 3 upcoming ones.
Leaderboard
GET /api/public/leaderboard/:username?type=points&period=all_time&limit=10&offset=0
| Parameter | Values |
|---|---|
type | points (default), watchtime, chatters, bits, gift_subs |
period | all_time (default), month, week. Only for points |
limit | 1 to 50, default 10 |
offset | 0 and up |
:username must be the Twitch login. Cached for 2 minutes.
{
"type": "points",
"period": "all_time",
"currency_name": "Fishcoins",
"has_more": true,
"entries": [{ "rank": 1, "login": "fishfan", "display_name": "fishfan", "value": 12345 }]
}value is points, watch time in seconds, message count, bits or gift subs, depending on type. Hidden boards return 404 {"error":"hidden"}.
Commands
GET /api/public/commands/:username
The creator's public command list, in sections (general, song_request, raffle, viewer_queue, giveaway, moderation, bot).
{
"prefix": "!",
"sections": [{
"id": "general",
"label": "General",
"commands": [{ "trigger": "!discord", "description": "...", "access": "Viewer", "cooldown_sec": 5, "user_cooldown_sec": 0 }]
}]
}Activity
GET /api/public/feed/:username
The last 50 follows, subs, resubs, gift subs, raids, cheers and tips. Messages are never included. Cached for 30 seconds.
{ "events": [{ "type": "bits", "platform": "twitch", "viewer": "FishFan", "amount": 500, "occurred_at": "2026-10-04T19:00:00Z" }] }Alerts, clips and links
| Endpoint | Returns |
|---|---|
GET /api/public/alerts/:username | Alerts shown on the creator's Alerts page, with name, category, rarity and preview |
GET /api/public/clips/:username | Featured clips |
GET /api/public/links/:username | The creator's links page |
GET /api/public/links/:username/native?types=live,nowplaying,latestalert | Live status, the current song and the latest alert |
Giveaway
| Endpoint | Returns |
|---|---|
GET /api/public/giveaway/:username | The running giveaway: prize, entry cost, entry command, end time and entry count |
GET /api/public/giveaway/:username/entries | Up to 200 entries with their ticket counts. Cached 10 seconds |
Viewer cosmetics and pronouns
| Endpoint | Returns |
|---|---|
GET /api/public/cosmetics/:platform/:username | A viewer's Fishrift badge, name paint and frame. fishrift_user: false when they don't use Fishrift |
GET /api/public/pronouns/:login | { login, pronouns, pronouns_public }. pronouns is null when private |
Cosmetics are useful for chat overlays that want to show Fishrift name paints and badges.
Media
| Endpoint | Returns |
|---|---|
GET /api/media-avatar/:userId | A creator's avatar |
GET /api/media-banner/:userId | A creator's banner |
GET /api/media-public/:fileId | A file a creator uploaded and shared |