`POST /api/marketplace/publish` — publish a workspace App to the marketplace as a buildable source listing (ADR 0030 UX3-D). Workspace-admin only: a publish creates a public listing, so it mirrors the source-mutation auth.
const url = 'https://example.com/api/marketplace/publish';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"app_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","changelog":"example","prerequisites":"example","prerequisites_de":"example","prerequisites_must_acknowledge":true,"pricing":{"amount_minor":1,"currency":"example","model":"example"},"slug":"example","summary":"example","version":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/api/marketplace/publish \ --header 'Content-Type: application/json' \ --data '{ "app_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "changelog": "example", "prerequisites": "example", "prerequisites_de": "example", "prerequisites_must_acknowledge": true, "pricing": { "amount_minor": 1, "currency": "example", "model": "example" }, "slug": "example", "summary": "example", "version": "example" }'Request Bodyrequired
Section titled “Request Bodyrequired”Body for POST /api/marketplace/publish — publish a workspace App.
object
#1060 — Markdown describing what changed in THIS version.
marketplace_item_versions.changelog has existed since migration 094 and
the detail page has rendered a Changelog tab all along, but NO publish
path ever wrote the column — every one of them passed a literal None,
so the tab was a surface with no producer. This field is that producer
for a workspace publish (the seed catalog carries the official half).
#943 — Markdown describing what the buyer must set up on their OWN systems before this listing can work. English.
#943 — the German text for the same prerequisite. Absent → the English text is shown in both languages.
#943 — set when the prerequisite fails SILENTLY if unmet: the installer
must then acknowledge it before the install proceeds. Absent → false.
Examplegenerated
{ "app_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "changelog": "example", "prerequisites": "example", "prerequisites_de": "example", "prerequisites_must_acknowledge": true, "pricing": { "amount_minor": 1, "currency": "example", "model": "example" }, "slug": "example", "summary": "example", "version": "example"}Responses
Section titled “Responses”What a successful publish returns to the seller UI.
object
Examplegenerated
{ "expected_storage_mb": 1, "framework": "example", "item_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "slug": "example", "source_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "source_tarball_sha256": "example", "version": "example", "version_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"}