/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
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.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 withFORGE_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
{contentJson: string}; write also records updatedBy. Portal clients must use Forge, not the private Config admin endpoint.
