Skip to content

API Reference

RadicalMuffinMan edited this page Jul 16, 2026 · 2 revisions

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/Jellyseerr prefix still works as a legacy alias for every Seerr endpoint, and some responses still include legacy jellyseerr* fields for older clients.

Status and settings

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.

Admin

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

Media bar, genres, and themes

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.

Ratings (MDBList and TMDB)

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

Custom rows and collections

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)

Retro games

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}/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

Active downloads

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

Seerr

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.

Seerr config response

{
  "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

Notifications (Seerr requests and issues)

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

Web hosting and discovery

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