Skip to content

API Reference

RadicalMuffinMan edited this page Jul 31, 2026 · 3 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

MethodPathAuthDescription
GET/Moonfin/PingYesPlugin status: version, whether sync is enabled, Seerr/MDBList/TMDB availability, and admin defaults
GET/Moonfin/DefaultsYesThe admin-configured default settings profile
GET/Moonfin/SettingsYesThe current user's full settings envelope
POST/Moonfin/SettingsYesSave the current user's settings (merge or replace via body)
DELETE/Moonfin/SettingsYesDelete all of the current user's settings
HEAD/Moonfin/SettingsYesCheck whether the current user has stored settings (200 or 404)
GET/Moonfin/Settings/StreamYesServer-sent events stream of settings changes, theme changes, and admin messages
GET, POST/Moonfin/Settings/{userId}AdminGet or save another user's settings
GET/Moonfin/Settings/Resolved/{profile}YesThe resolved flat values for a profile (global, desktop, mobile, tv)
POST, DELETE/Moonfin/Settings/Profile/{profile}YesSave or delete one device profile's overrides (global cant be deleted)
GET, POST/Moonfin/Settings/detailsScreenBlur and /detailsScreenBlur/{profile}YesGet or save the details-screen backdrop blur
GET, POST/Moonfin/Settings/detailsScreenOpacity and /detailsScreenOpacity/{profile}YesGet or save the details-screen backdrop opacity

See Settings Sync for the envelope shape and the full list of synced settings.

Admin

MethodPathAuthDescription
POST/Moonfin/Admin/PushDefaultsAdminApply admin defaults to all users (overwrite=true resets everyone, otherwise merges)
POST/Moonfin/Admin/PushDefaults/{userId}AdminApply admin defaults to a single user
POST/Moonfin/BroadcastAdminSend an announcement to all users, over the SSE stream for connected clients and as a push to registered devices
GET/Moonfin/Libraries/CheckWriteAccessAdminTest whether the server can write metadata to each library, and report failing paths

Media bar, genres, and themes

MethodPathAuthDescription
GET/Moonfin/MediaBarYesThe resolved media bar items for the current user (profile query, default global)
GET/Moonfin/GenresYesAll genre names and ids across the user's movie and series libraries
GET/Moonfin/ThemesYesList uploaded custom themes
GET/Moonfin/Themes/{themeId}YesGet one custom theme by id
GET/Moonfin/Admin/ThemesAdminTheme metadata index for the admin panel
POST/Moonfin/Admin/ThemesAdminUpload or replace a theme payload
DELETE/Moonfin/Admin/Themes/{themeId}AdminDelete a theme

See Themes for the editor and upload flow.

Ratings (MDBList and TMDB)

MethodPathAuthDescription
GET/Moonfin/MdbList/RatingsYesMDBList 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/KeyInfoAdminValidate 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/ClearCacheAdminDrop every cached MDBList rating so lookups refetch from the API
GET/Moonfin/MdbList/ListsYesThe cached catalog of MDBList official lists
GET/Moonfin/MdbList/Lists/{slug}/ItemsYesCached items for one official list (optional mediatype)
GET/Moonfin/Tmdb/EpisodeRatingYesTMDB rating for one episode (tmdbId, season, episode)
GET/Moonfin/Tmdb/SeasonRatingsYesTMDB ratings for every episode in a season (tmdbId, season)
GET/Moonfin/Tmdb/ProductionCompaniesYesTMDB studios for a title (tmdbId, type), each flagged for logo availability
GET/Moonfin/Tmdb/StudioImage/{companyId}YesA cached studio logo PNG (re-downloaded from TMDB if evicted)
GET/Moonfin/Assets/{fileName}NoBundled rating provider icons

Custom rows and collections

MethodPathAuthDescription
GET/Moonfin/CustomRows/ItemsYesResolve an external home row (source, type, params) into items, cached server-side for 24 hours
GET/Moonfin/Collections/{collectionId}/OrderYesThe current user's saved item order for a collection
POST/Moonfin/Collections/{collectionId}/OrderYesSave 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.

MethodPathAuthDescription
GET/Moonfin/Games/LibrariesYesLibraries treated as game (ROM) libraries
GET/Moonfin/Games/{libraryId}/SystemsYesTop-level system folders in a game library
GET/Moonfin/Games/{libraryId}/GamesYesGames in a library, optionally filtered by system
GET/Moonfin/Games/{libraryId}/Games/{gameId}YesOne game's full detail (ROM, core, BIOS)
GET/Moonfin/Games/{libraryId}/Thumb/{gameId}YesStream a game's box art or screenshot (type query), downloaded and cached on first request
GET/Moonfin/Games/{libraryId}/Rom/{token}YesStream a ROM file, auto-extracting archives, with range support
GET/Moonfin/Games/{libraryId}/Bios/{token}YesStream a BIOS file a core needs
GET/Moonfin/Games/Cores/StatusYesWhether the self-hosted emulator cores are installed or downloading
POST/Moonfin/Games/Cores/InstallAdminDownload and install the cores bundle in the background
POST/Moonfin/Games/Cores/UploadAdminInstall cores from an uploaded zip
GET/Moonfin/Games/Saves/{gameId}YesDownload a saved game blob for the current user (kind, default state)
PUT/Moonfin/Games/Saves/{gameId}YesUpload or overwrite a saved game blob (max 32 MB)
GET/Moonfin/EmulatorJS/player.htmlNoThe in-browser player shell
GET/Moonfin/EmulatorJS/data/{**path}NoSelf-hosted EmulatorJS runtime files, with a CDN fallback when not installed
GET/Moonfin/Games/DebugAdminDiagnostics for game library detection

Active downloads

MethodPathAuthDescription
GET/Moonfin/Transcodes/ActiveAdminActive transcode and download jobs with progress and session info (includePlayback adds HLS playback jobs)
DELETE/Moonfin/Transcodes/Active/{jobId}AdminCancel an active job

Seerr

MethodPathAuthDescription
GET/Moonfin/Seerr/ConfigYesSeerr config for the client (see the response shape below)
POST/Moonfin/Seerr/LoginYesSign in to Seerr with Jellyfin/Emby or local credentials and store the session
GET/Moonfin/Seerr/StatusYesWhether Seerr is enabled and the current user's session status
GET/Moonfin/Seerr/ValidateYesConfirm the stored session is still valid
DELETE/Moonfin/Seerr/LogoutYesLog out and clear the stored session
GET, POST, PUT, DELETE/Moonfin/Seerr/Api/{**path}SessionAuthenticated 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
}
FieldTypeDescription
enabledboolWhether Seerr is enabled by the admin
urlstringThe Seerr server URL used for proxying
displayNamestringThe name shown in the client (admin override, defaults to Seerr)
variantstringAlways seerr on current versions
userEnabledboolWhether the user has Seerr enabled in their own settings

Notifications (Seerr and new media)

MethodPathAuthDescription
GET, POST/Moonfin/Notifications/PrefsYesGet or save the caller's notification preferences, including the new media opt-in (notifyOnNewMedia)
POST, DELETE/Moonfin/Notifications/RegisterYesRegister or remove a push token for the caller's device
GET/Moonfin/Notifications/WebhookInfoAdminThe Seerr webhook URL, secret, supported types, and provisioning status
POST/Moonfin/Notifications/ReprovisionAdminRe-register Moonfin's webhook in Seerr immediately
POST/Moonfin/Seerr/WebhookNo (shared secret)Inbound Seerr webhook, authenticated by the secret query or X-Moonfin-Webhook-Secret header

Web hosting and discovery

MethodPathAuthDescription
GET/Moonfin/Web/{**path}NoServe the Moonfin web app static files with SPA fallback
GET/Moonfin/Web/config.jsonNoRuntime config for web plugin mode
GET/Moonfin/Web/loader.jsNoThe loader bridge script for the stock Jellyfin header button
GET/Moonfin/Discovery and /Moonfin/Discovery/discoverNoSame-origin server metadata for web discovery