Publish

Draft, upload, verify, publish.

A published release is the result of three authenticated API operations with a direct storage upload between presign and publish.

DraftArtifactPublished

Create or update draft

POST /v1/apps/{app-slug}/releases creates the channel/version draft or updates its notes and requested publication date while it remains a draft.

Declare an artifact

POST /v1/apps/{app-slug}/artifacts/presign records target, format, size, SHA-256, optional signature, and optional content type.

Upload directly

PUT the exact bytes to the returned uploadUrl using all returned headers.

Publish

POST /v1/apps/{app-slug}/releases/{release-id}/publish verifies every draft object exists and matches its declared byte size, then changes the release to published.

Draft behavior

Creating the same channel and version again updates notes and publication date only while the existing release is still a draft. Once published, the same channel/version returns release_already_published.

Declaring another artifact with the same release and target replaces the draft artifact record. Declaring a new target adds another artifact until the 32-artifact limit is reached.

Publication checks

Publication requires at least one artifact. Every artifact must have an object key, the uploaded object must exist, and its actual byte size must equal the declared size.

After publication

The release becomes eligible for:

  • the updater endpoint
  • public latest and release-history responses
  • the hosted download page
  • completed-download analytics
  • channel retention scheduling

Only artifacts whose stored object still exists and has not been pruned appear in edge responses.