Skip to content

5.10.2.2 Channels

The Channels domain of releases. Who receives a version: channels and their access rule, releases of a build on a channel with their approval, pauses and rollbacks, recipient Organizations and tester groups. The download page lists what the caller may receive and never reveals what they may not. It is one API, with its own contract and its own version.

5.10.2.2.1 Versions

Version Status Prod URL Contract
v1 Proposed https://releases.moonitoring.com/channels/v1 channels/v1/openapi.yaml

The resources follow the data model. Adds DownloadPage, the one read open to the public audience, which lists only what the caller may receive.

5.10.2.2.2 Operations

Every operation names who calls it and the capability it checks (x-moonitoring-audience, x-moonitoring-capability in the contract); every capability is in the catalog of the data model (req 1002, 1006). Lists are paged by cursor, writes that create something carry an Idempotency-Key, errors are Problem Details.

Operation Request Who Capability
List channels GET /channels Staff releases.releases.read
Create a channel POST /channels Staff releases.channels.manage
Read a channel GET /channels/{channel_id} Staff releases.releases.read
Update a channel PATCH /channels/{channel_id} Staff releases.channels.manage
List a channel's recipient Organizations GET /channels/{channel_id}/access Staff releases.releases.read
Add a recipient Organization POST /channels/{channel_id}/access Staff releases.channels.manage
Remove a recipient Organization DELETE /channels/{channel_id}/access/{access_id} Staff releases.channels.manage
List a channel's releases GET /channels/{channel_id}/releases Staff releases.releases.read
Stage a release POST /channels/{channel_id}/releases Staff releases.releases.stage
Roll back a channel POST /channels/{channel_id}/rollbacks Staff releases.releases.rollback
Read a release GET /releases/{release_id} Staff releases.releases.read
Approve a release POST /releases/{release_id}/approve Staff releases.releases.approve
Pause a release POST /releases/{release_id}/pause Staff releases.releases.pause
Resume a paused release POST /releases/{release_id}/resume Staff releases.releases.approve
List tester groups GET /tester-groups Staff releases.releases.read
Create a tester group POST /tester-groups Staff releases.channels.manage
Update or archive a tester group PATCH /tester-groups/{group_id} Staff releases.channels.manage
Open a channel to a group PUT /tester-groups/{group_id}/channels/{channel_id} Staff releases.channels.manage
Close a channel to a group DELETE /tester-groups/{group_id}/channels/{channel_id} Staff releases.channels.manage
List a group's testers GET /tester-groups/{group_id}/testers Staff releases.releases.read
Invite a tester POST /tester-groups/{group_id}/testers Staff releases.channels.manage
Revoke a tester POST /testers/{tester_id}/revoke Staff releases.channels.manage
Read the download page GET /applications/{application_slug}/download Organization users, staff or clients none: any member of the Organization

5.10.2.2.3 Contract v1

Proposed version

v1 is a proposal for review: its endpoints, errors and capabilities were designed from the requirements and the flows and are not confirmed. It leaves proposal with its first release; from then on it changes only as described in Every API Is Versioned.

5.10.2.2.4 Rules Confirmed with the Implementation

Decided on 2026-11-05, from the choices made while building releases:

  • Two people release a build: the approver is neither who staged the release nor who made the build, and is a person, which the staff copy tells by the account_kind of a staff membership.
  • External copies of release events go to every Organization that receives the channel: its listed recipients and every Organization with an installation on it, one copy each on platform.external.v1.
  • The enrolment link of an unlisted channel is its id. Unlisted hides a channel from the lists; it protects nothing, because the channel's rule still applies at enrolment.
  • Organizations that are closing keep receiving updates during their grace period, so a security fix still reaches them; closed Organizations and disabled users receive nothing.