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_kindof 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.