FishriftDocs Dashboard

Public API

Read only endpoints for public channel data. No API key needed.

  • Base URL: https://fishrift.com
  • Responses are JSON.
  • :username matches 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.

EndpointReturns
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=50Top 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

ParameterValues
typepoints (default), watchtime, chatters, bits, gift_subs
periodall_time (default), month, week. Only for points
limit1 to 50, default 10
offset0 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" }] }
EndpointReturns
GET /api/public/alerts/:usernameAlerts shown on the creator's Alerts page, with name, category, rarity and preview
GET /api/public/clips/:usernameFeatured clips
GET /api/public/links/:usernameThe creator's links page
GET /api/public/links/:username/native?types=live,nowplaying,latestalertLive status, the current song and the latest alert

Giveaway

EndpointReturns
GET /api/public/giveaway/:usernameThe running giveaway: prize, entry cost, entry command, end time and entry count
GET /api/public/giveaway/:username/entriesUp to 200 entries with their ticket counts. Cached 10 seconds

Viewer cosmetics and pronouns

EndpointReturns
GET /api/public/cosmetics/:platform/:usernameA 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

EndpointReturns
GET /api/media-avatar/:userIdA creator's avatar
GET /api/media-banner/:userIdA creator's banner
GET /api/media-public/:fileIdA file a creator uploaded and shared