Skip to main content
Forge exposes publication inspection and a fixed Stage selector under /v1/resource-packs. Authenticate with an authorized Forge bearer token. Reads require ADMIN_AREA_ACCESS; writes additionally require RESOURCE_PACKS_MANAGE.
string
required
Bearer followed by the caller’s Forge access token. Set it through your normal authenticated client; never embed it in documentation or source control.

Endpoint summary

These routes define no endpoint-specific rate limit or pagination parameter. Do not infer an unlimited upstream quota: release reads use GitHub and are bounded to its first page with per_page=30. Drafts, prereleases, and noncanonical tags are filtered out.

Releases and Edge

string
required
Canonical major.minor.patch without v, leading zeroes, or prerelease/build suffixes. Example: 1.1.0.
ResourcePackReleaseSummary contains version, tag, ISO timestamp publishedAt, and GitHub htmlUrl. A release detail read binds the CDN manifest’s SHA-256/size to the GitHub Release manifest asset and expected release publication identity. PackSetView fields are: EdgePackSetView contains channel: {sequence, targetId, manifestSha256, manifestSize}, resolvedAt (ISO timestamp), and packSet: PackSetView. It does not return the upstream channel’s manifest URL in channel. Forge validates channel → manifest hash/size → build/provenance binding before returning it.

Read the selection

These are illustrative document versions. Always read the current value. mutationEnabled reports backend capability; it does not replace caller authorization or prove every proxy has converged.

Update the selection

string
required
Current Config document version. Canonical positive decimal string from 1 through 9223372036854775807; no quotes inside the value, zero, signs, or leading zeroes.
object
required
Either {mode: "channel", channel: "stable" or "edge"} or {mode: "release", release: "1.1.0"}. Unknown fields are rejected. There is no environment, arbitrary origin, PackSet, enabled, required, or prompt write parameter.
A release must still be in the available release list, have a valid inspected manifest, and match Stage’s current Minecraft 26.3 / format 97 contract. A channel change clears the pin. Release mode preserves the current channel in Config; clients cannot set fallbackChannel directly. Forge reads Config, checks expectedVersion, then writes with Config’s If-Match: "<version>". The upstream compare protects against a second change between Forge’s read and write. On conflict, GET the latest selection, reassess the intended change, and submit with the new version. Do not retry stale writes automatically. A successful update preserves unrelated delivery settings and returns the new document version. It triggers neither a restart nor a live resource-pack broadcast. Forge records resourcepacks.selection.update with actor, from/to selections, previous/new versions, and target Stage. An audit failure increments its failure metric and logs a sanitized warning; it does not undo a successful Config write or turn the response into a write failure.

Complete read-then-write example

Run from an authenticated operator environment with FORGE_API_URL and FORGE_TOKEN already set. This script deliberately performs a Stage write and uses jq; do not run it merely to inspect a deployment.

Error reference

Selection errors return {error: string}. Publication loader errors return {error: string, kind: "github" | "channel" | "manifest" | "contract"}; a loader not-found error during selection is mapped to 409 instead of an inspection 404.
Invalid update
Version conflict
Incompatible pin

Config Service boundary

Forge’s server-side client uses only these fixed private paths:
  • Read: /v1/config/apps/network/envs/stage/namespaces/resourcepacks/documents/global
  • Write: /v1/config/admin/apps/network/envs/stage/namespaces/resourcepacks/documents/global
It reads the projected token file per request, allowing token rotation; sends bearer auth; requires a valid quoted numeric ETag; uses a 5-second timeout, 65,536-byte response bound, and manual redirect handling. The Config body is {contentJson: string}; write also records updatedBy. Portal clients must use Forge, not the private Config admin endpoint.

Implementation sources

Verified against the main-branch source on October 14, 2026.