-
Notifications
You must be signed in to change notification settings - Fork 18
API Reference
Every endpoint Moonbase exposes on the server. Paths are absolute and served by both the Jellyfin and Emby plugins unless noted.
Auth column:
- Yes requires any valid Jellyfin or Emby session.
- Admin requires an elevated (administrator) session.
- Session uses a stored Seerr session rather than the platform token.
- No is anonymous (used for web assets, discovery, and the inbound Seerr webhook, which has its own shared secret).
Some areas are gated by config: the Settings and public Themes endpoints return 503 when settings sync is disabled, and the Games endpoints return empty results or 404 when the game library feature is turned off.
Seerr rename: the primary prefix is
/Moonfin/Seerr. The old/Moonfin/Jellyseerrprefix still works as a legacy alias for every Seerr endpoint, and some responses still include legacyjellyseerr*fields for older clients.
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/Ping |
Yes | Plugin status: version, whether sync is enabled, Seerr/MDBList/TMDB availability, and admin defaults |
| GET | /Moonfin/Defaults |
Yes | The admin-configured default settings profile |
| GET | /Moonfin/Settings |
Yes | The current user's full settings envelope |
| POST | /Moonfin/Settings |
Yes | Save the current user's settings (merge or replace via body) |
| DELETE | /Moonfin/Settings |
Yes | Delete all of the current user's settings |
| HEAD | /Moonfin/Settings |
Yes | Check whether the current user has stored settings (200 or 404) |
| GET | /Moonfin/Settings/Stream |
Yes | Server-sent events stream of settings changes, theme changes, and admin messages |
| GET, POST | /Moonfin/Settings/{userId} |
Admin | Get or save another user's settings |
| GET | /Moonfin/Settings/Resolved/{profile} |
Yes | The resolved flat values for a profile (global, desktop, mobile, tv) |
| POST, DELETE | /Moonfin/Settings/Profile/{profile} |
Yes | Save or delete one device profile's overrides (global cant be deleted) |
| GET, POST |
/Moonfin/Settings/detailsScreenBlur and /detailsScreenBlur/{profile}
|
Yes | Get or save the details-screen backdrop blur |
| GET, POST |
/Moonfin/Settings/detailsScreenOpacity and /detailsScreenOpacity/{profile}
|
Yes | Get or save the details-screen backdrop opacity |
See Settings Sync for the envelope shape and the full list of synced settings.
| Method | Path | Auth | Description |
|---|---|---|---|
| POST | /Moonfin/Admin/PushDefaults |
Admin | Apply admin defaults to all users (overwrite=true resets everyone, otherwise merges) |
| POST | /Moonfin/Admin/PushDefaults/{userId} |
Admin | Apply admin defaults to a single user |
| POST | /Moonfin/Broadcast |
Admin | Send an announcement to all connected users over the SSE stream |
| GET | /Moonfin/Libraries/CheckWriteAccess |
Admin | Test whether the server can write metadata to each library, and report failing paths |
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/MediaBar |
Yes | The resolved media bar items for the current user (profile query, default global) |
| GET | /Moonfin/Genres |
Yes | All genre names and ids across the user's movie and series libraries |
| GET | /Moonfin/Themes |
Yes | List uploaded custom themes |
| GET | /Moonfin/Themes/{themeId} |
Yes | Get one custom theme by id |
| GET | /Moonfin/Admin/Themes |
Admin | Theme metadata index for the admin panel |
| POST | /Moonfin/Admin/Themes |
Admin | Upload or replace a theme payload |
| DELETE | /Moonfin/Admin/Themes/{themeId} |
Admin | Delete a theme |
See Themes for the editor and upload flow.
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/MdbList/Ratings |
Yes | MDBList ratings for a title (type = movie or show, tmdbId), filtered to the user's chosen sources |
| GET | /Moonfin/MdbList/Lists |
Yes | The cached catalog of MDBList official lists |
| GET | /Moonfin/MdbList/Lists/{slug}/Items |
Yes | Cached items for one official list (optional mediatype) |
| GET | /Moonfin/Tmdb/EpisodeRating |
Yes | TMDB rating for one episode (tmdbId, season, episode) |
| GET | /Moonfin/Tmdb/SeasonRatings |
Yes | TMDB ratings for every episode in a season (tmdbId, season) |
| GET | /Moonfin/Tmdb/ProductionCompanies |
Yes | TMDB studios for a title (tmdbId, type), each flagged for logo availability |
| GET | /Moonfin/Tmdb/StudioImage/{companyId} |
Yes | A cached studio logo PNG (re-downloaded from TMDB if evicted) |
| GET | /Moonfin/Assets/{fileName} |
No | Bundled rating provider icons |
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/CustomRows/Items |
Yes | Resolve an external home row (source, type, params) into items, cached server-side for 24 hours |
| GET | /Moonfin/Collections/{collectionId}/Order |
Yes | The current user's saved item order for a collection |
| POST | /Moonfin/Collections/{collectionId}/Order |
Yes | Save the user's item order for a collection (empty array clears it) |
All game endpoints require the game library feature to be enabled. See Retro Games for the full guide.
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/Games/Libraries |
Yes | Libraries treated as game (ROM) libraries |
| GET | /Moonfin/Games/{libraryId}/Systems |
Yes | Top-level system folders in a game library |
| GET | /Moonfin/Games/{libraryId}/Games |
Yes | Games in a library, optionally filtered by system
|
| GET | /Moonfin/Games/{libraryId}/Games/{gameId} |
Yes | One game's full detail (ROM, core, BIOS) |
| GET | /Moonfin/Games/{libraryId}/Rom/{token} |
Yes | Stream a ROM file, auto-extracting archives, with range support |
| GET | /Moonfin/Games/{libraryId}/Bios/{token} |
Yes | Stream a BIOS file a core needs |
| GET | /Moonfin/Games/Cores/Status |
Yes | Whether the self-hosted emulator cores are installed or downloading |
| POST | /Moonfin/Games/Cores/Install |
Admin | Download and install the cores bundle in the background |
| POST | /Moonfin/Games/Cores/Upload |
Admin | Install cores from an uploaded zip |
| GET | /Moonfin/Games/Saves/{gameId} |
Yes | Download a saved game blob for the current user (kind, default state) |
| PUT | /Moonfin/Games/Saves/{gameId} |
Yes | Upload or overwrite a saved game blob (max 32 MB) |
| GET | /Moonfin/EmulatorJS/player.html |
No | The in-browser player shell |
| GET | /Moonfin/EmulatorJS/data/{**path} |
No | Self-hosted EmulatorJS runtime files, with a CDN fallback when not installed |
| GET | /Moonfin/Games/Debug |
Admin | Diagnostics for game library detection |
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/Transcodes/Active |
Admin | Active transcode and download jobs with progress and session info (includePlayback adds HLS playback jobs) |
| DELETE | /Moonfin/Transcodes/Active/{jobId} |
Admin | Cancel an active job |
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/Seerr/Config |
Yes | Seerr config for the client (see the response shape below) |
| POST | /Moonfin/Seerr/Login |
Yes | Sign in to Seerr with Jellyfin/Emby or local credentials and store the session |
| GET | /Moonfin/Seerr/Status |
Yes | Whether Seerr is enabled and the current user's session status |
| GET | /Moonfin/Seerr/Validate |
Yes | Confirm the stored session is still valid |
| DELETE | /Moonfin/Seerr/Logout |
Yes | Log out and clear the stored session |
| GET, POST, PUT, DELETE | /Moonfin/Seerr/Api/{**path} |
Session | Authenticated proxy to the Seerr API using the stored session |
The /Moonfin/Jellyseerr/... prefix mirrors all of the above. See Reverse Proxy and Seerr for proxy and single sign-on notes.
{
"enabled": true,
"url": "https://seerr.example.com",
"displayName": "Seerr",
"variant": "seerr",
"userEnabled": true
}| Field | Type | Description |
|---|---|---|
enabled |
bool | Whether Seerr is enabled by the admin |
url |
string | The Seerr server URL used for proxying |
displayName |
string | The name shown in the client (admin override, defaults to Seerr) |
variant |
string | Always seerr on current versions |
userEnabled |
bool | Whether the user has Seerr enabled in their own settings |
| Method | Path | Auth | Description |
|---|---|---|---|
| GET, POST | /Moonfin/Notifications/Prefs |
Yes | Get or save the caller's notification preferences |
| POST, DELETE | /Moonfin/Notifications/Register |
Yes | Register or remove a push token for the caller's device |
| GET | /Moonfin/Notifications/WebhookInfo |
Admin | The Seerr webhook URL, secret, supported types, and provisioning status |
| POST | /Moonfin/Notifications/Reprovision |
Admin | Re-register Moonfin's webhook in Seerr immediately |
| POST | /Moonfin/Seerr/Webhook |
No (shared secret) | Inbound Seerr webhook, authenticated by the secret query or X-Moonfin-Webhook-Secret header |
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/Web/{**path} |
No | Serve the Moonfin web app static files with SPA fallback |
| GET | /Moonfin/Web/config.json |
No | Runtime config for web plugin mode |
| GET | /Moonfin/Web/loader.js |
No | The loader bridge script for the stock Jellyfin header button |
| GET |
/Moonfin/Discovery and /Moonfin/Discovery/discover
|
No | Same-origin server metadata for web discovery |