Plex Updater API v1

JSON describing recent Plex server and module builds. The updater (UpdateMetadataClient in dev.plex.updater) reads these to decide what to download.

Servers

The updater tries the primary first, then the fallback if it didn't get a build. Two 404s mean "no build available". Any other failure (timeout, 5xx, malformed JSON) on either mirror counts as an error.

Projects

Info about Plex itself and each module.

GET /api/v1/projects/{project}.json Project catalog

Description

The basics for one project: whether it's Plex or a module, which versions and channels exist, and where to find the "latest build" pointer for each channel.

Path parameters

NameTypeDescription
projectrequiredstring One of: Plex Module-HTTPD Module-LibsDisguises Module-TFMExtras Case-sensitive.

Responses

200
Catalog for the project. Schema: ProjectCatalog
{
  "name": "Module-HTTPD",
  "kind": "module",
  "versions": ["2.0-SNAPSHOT", "2.0"],
  "channels": ["dev", "stable"],
  "latest": {
    "stable": {
      "api/1": "api/v1/projects/Module-HTTPD/channels/stable/latest/api/1.json"
    },
    "dev": {
      "api/1": "api/v1/projects/Module-HTTPD/channels/dev/latest/api/1.json"
    }
  }
}
404
Unknown project.

Latest build

The newest build on a channel that matches your compatibility level. This is what the updater asks for when it's checking for a new version.

GET /api/v1/projects/Plex/channels/{channel}/latest/minecraft/{minecraftVersion}.json Latest Plex build for a Minecraft version

Description

The newest Plex build on {channel} that lists {minecraftVersion} under its supported Minecraft versions.

Sanity checks on the response. The updater confirms name is "Plex", channel matches the request, and the Minecraft version it asked for shows up in minecraftVersions. Anything off, and the response is treated as broken instead of as "no build available".

Path parameters

NameTypeDescription
channelrequiredstring devstable Release channel.
minecraftVersionrequiredstring 26.1.2 Minecraft server version you want a Plex build for.

Responses

200
Newest matching Plex build. Schema: PlexArtifactMetadata
{
  "schemaVersion": 1,
  "name": "Plex",
  "version": "2.0-SNAPSHOT",
  "buildNumber": "489",
  "commit": "73c4449cb3c2698a2b2ac78f8fc817832a7795d3",
  "channel": "dev",
  "downloadUrl": "https://ci.plex.us.org/job/Plex/job/master/489/artifact/build/libs/Plex-2.0-SNAPSHOT.jar",
  "sha256": "f1348738a01b39b1cac0fe5e1c077b00ba12714b59400843e5a164fe5af2167c",
  "size": 431781,
  "publishedAt": "2026-05-19T21:42:00.828260293Z",
  "minecraftVersions": ["26.1.2"],
  "apiCompatibility": 1
}
404
No Plex build on this channel matches that Minecraft version.
5xx
Mirror is unhealthy. The updater will try the other mirror.
GET /api/v1/projects/{module}/channels/{channel}/latest/api/{apiCompatibility}.json Latest module build for an API level

Description

The newest build of {module} on {channel} whose requiredApiCompatibility equals {apiCompatibility}.

Sanity checks on the response. Same idea as the Plex check above: the updater confirms name, channel, and API level all line up with what it asked for. Anything off, and the response is treated as broken.

Path parameters

NameTypeDescription
modulerequiredstring Module-HTTPD Module-LibsDisguises Module-TFMExtras Module name.
channelrequiredstring devstable Release channel.
apiCompatibilityrequiredinteger 1 Plex module API level your server can load.

Responses

200
Newest matching module build. Schema: ModuleArtifactMetadata
{
  "name": "Module-HTTPD",
  "version": "2.0",
  "buildNumber": "114",
  "commit": "b0f96ce1fb4c29cf3179bd9fa5569971a11d24b7",
  "channel": "stable",
  "downloadUrl": "https://ci.plex.us.org/job/Module-HTTPD/114/artifact/build/libs/Module-HTTPD.jar",
  "sha256": "01003b6598c693edbe2f692e5cfd0fe68f26573c3408e07ffc07f22930183e96",
  "size": 596526,
  "publishedAt": "2026-05-19T20:29:24.129348817Z",
  "requiredApiCompatibility": 1
}
404
No build of this module on this channel matches that API level.
5xx
Mirror is unhealthy. The updater will try the other mirror.

Builds

Past builds, listed by project and version.

GET /api/v1/projects/{project}/versions/{version}/builds.json List builds for a version

Description

Every build published for {project} at {version}, newest first. Each entry uses the same shape as the per-build endpoint below.

Path parameters

NameTypeDescription
projectrequiredstring Plex or a module name. Case-sensitive.
versionrequiredstring e.g. 2.02.0-SNAPSHOT Must be in the project's versions list.

Responses

200
List of builds. Schema: BuildList
{
  "project": "Plex",
  "version": "2.0-SNAPSHOT",
  "builds": [
    { "buildNumber": "489", "channel": "dev", "sha256": "f134...", ... },
    { "buildNumber": "488", "channel": "dev", "sha256": "da2a...", ... },
    { "buildNumber": "487", "channel": "dev", "sha256": "3d60...", ... }
  ]
}
404
Unknown project or version.
GET /api/v1/projects/{project}/versions/{version}/builds/{buildNumber}.json Get a specific build

Description

Info for one build. Same shape as the entries inside builds.json and as the "latest" endpoints return.

Path parameters

NameTypeDescription
projectrequiredstringPlex or a module name.Case-sensitive.
versionrequiredstringe.g. 2.0, 2.0-SNAPSHOT.Project version.
buildNumberrequiredstringe.g. 489.CI build number, as a string.

Responses

200
One build. Schema: PlexArtifactMetadata or ModuleArtifactMetadata, depending on the project's kind.
404
Unknown project, version, or build.

Schemas

Shape of each JSON response.

ProjectCatalog
FieldTypeDescription
namestringProject name. Matches the URL segment.
kindplexmodulePicks which build-info shape this project uses.
versionsstring[]Versions of this project that exist.
channelsstring[]Channels that have a "latest" pointer.
latestobjectWhere the latest build lives, per channel. Keys under each channel are minecraft/{version} for Plex or api/{level} for modules; values are relative paths.
PlexArtifactMetadata
FieldTypeDescription
schemaVersionintegerSchema revision. Currently 1.
namestringAlways "Plex".
versionstringPlex version, e.g. 2.0-SNAPSHOT.
buildNumberstringCI build number.
commitstringFull Git commit the build came from.
channelstringdev or stable.
downloadUrlstring (URL)Direct link to the .jar.
sha256stringLowercase hex SHA-256 of the .jar.
sizeintegerSize of the .jar, in bytes.
publishedAtstring (RFC 3339)UTC publish timestamp, nanosecond precision.
minecraftVersionsstring[]Minecraft server versions this build targets.
apiCompatibilityintegerPlex module API level this build exposes.
ModuleArtifactMetadata
FieldTypeDescription
namestringModule name, e.g. Module-HTTPD.
versionstringModule version, e.g. 2.0.
buildNumberstringCI build number.
commitstringFull Git commit the build came from.
channelstringdev or stable.
downloadUrlstring (URL)Direct link to the .jar.
sha256stringLowercase hex SHA-256 of the .jar.
sizeintegerSize of the .jar, in bytes.
publishedAtstring (RFC 3339)UTC publish timestamp.
requiredApiCompatibilityintegerLowest Plex module API level the server has to support to load this module.
BuildList
FieldTypeDescription
projectstringProject name.
versionstringProject version.
builds(PlexArtifactMetadata | ModuleArtifactMetadata)[]Builds published at this version, newest first.