-
Notifications
You must be signed in to change notification settings - Fork 37
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 users, over the SSE stream for connected clients and as a push to registered devices |
| 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. An optional profile query (desktop, mobile, or tv) resolves the sources against that device profile, anything else falls back to global
|
| GET | /Moonfin/MdbList/KeyInfo |
Admin | Validate an MDBList API key and return the account's plan and remaining quota (backs the Test Key button, optional key query tests an unsaved key, otherwise the server-wide key is used) |
| POST | /Moonfin/MdbList/ClearCache |
Admin | Drop every cached MDBList rating so lookups refetch from the API |
| 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 |
| GET | /Moonfin/UserRatings/Mine |
Yes | Every personal rating the calling user has set, in one response, so a client can sort a library by My Rating and filter it by liked or disliked. Neither server has a user rating sort of its own |
| 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) |
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/Bookmarks |
Yes | Every bookmark the calling user has, across items |
| GET | /Moonfin/Bookmarks/{itemId} |
Yes | One item's bookmarks and notes for the calling user |
| POST | /Moonfin/Bookmarks/{itemId} |
Yes | Save the item's bookmarks for the calling user |
| POST | /Moonfin/Bookmarks/{itemId}/Notes |
Yes | Save the item's notes for the calling user |
Clients work from local storage first and reconcile with these, so nothing waits on the network to open a book.
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}/Thumb/{gameId} |
Yes | Stream a game's box art or screenshot (type query), downloaded and cached on first request |
| GET | /Moonfin/Games/{libraryId}/Rom/{token} |
Yes | Stream a ROM file, auto-extracting archives, with range support |
| GET | /Moonfin/Games/{libraryId}/Rom/{token}/{fileName} |
Yes | The same stream with an explicit file name, which some cores need to identify the ROM |
| 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 |
| PUT | /Moonfin/Games/{libraryId}/Games/{gameId}/Core |
Yes | Pin one game to a specific core |
| PUT | /Moonfin/Games/{libraryId}/Games/{gameId}/Backend |
Yes | Pin one game to the native or EmulatorJS backend |
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/Games/ArtworkCapabilities |
Yes | Advertises the manifest-driven artwork protocol, so older clients keep the old path |
| GET | /Moonfin/Games/{libraryId}/ArtworkManifest |
Yes | The cataloged artwork state for one system, without scheduling any provider work. Returns 304 when nothing changed |
| POST | /Moonfin/Games/{libraryId}/ArtworkPriority |
Yes | Promotes already cataloged artwork into the order the client actually needs it |
| GET | /Moonfin/Games/{libraryId}/Artwork/{gameId}/{role}/{revision} |
Yes | One versioned artwork file, served locally |
| POST | /Moonfin/Games/{libraryId}/Artwork/{gameId}/Refresh |
Admin | Repair path that reopens and reschedules one artifact |
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /Moonfin/Games/ArcadeCompatibility/Status |
Admin | Whether the FBNeo and MAME data files are installed, and what they cover |
| PUT | /Moonfin/Games/ArcadeCompatibility/{core}/Dat |
Admin | Replace one core's data file with an uploaded XML, up to 512 MB |
| 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 |
| GET | /Moonfin/Transcodes/Mine |
Yes | The caller's own transcode jobs, scoped by the device id on its token, so a client can show progress and an ETA for a download it started |
| 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, including the new media opt-in (notifyOnNewMedia) |
| 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 |