Skip to content
Select themeSelect language

`POST /api/marketplace/bundles/publish` — publish several workspace primitives as one `kind='bundle'` item. Workspace-admin only, like every other publish path.

POST
/api/marketplace/bundles/publish
curl --request POST \
--url https://example.com/api/marketplace/bundles/publish \
--header 'Content-Type: application/json' \
--data '{ "app_ids": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "categories": [ "example" ], "changelog": "example", "description": "example", "name": "example", "node_type_ids": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "prerequisites": "example", "prerequisites_de": "example", "prerequisites_must_acknowledge": true, "pricing": { "amount_minor": 1, "currency": "example", "model": "example" }, "required_resource_kinds": [ "example" ], "script_ids": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "slug": "example", "summary": "example", "tags": [ "example" ], "version": "example", "workflow_ids": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ] }'
Media typeapplication/json

Body for POST /api/marketplace/bundles/publish.

At least two primitives across the four id lists must be named — a single-primitive “bundle” is that primitive’s own listing and belongs on its own publish path. version defaults to 1.0.0.

object
app_ids

Workspace App ids to fold in. Each ships its full source tree embedded in the manifest, so the bundle installs on a bare instance.

Array<string>
categories
Array<string> | null
changelog

#1060 - Markdown describing what changed in THIS bundle version. See [super::marketplace_publish_dto::PublishRequest::changelog]: the column has had a UI tab but no producer since migration 094, and a bundle needs one as much as a single item does.

string | null
description
string | null
name
required
string
node_type_ids
Array<string>
prerequisites

#943 - Markdown describing what the buyer must set up on their OWN systems before this bundle can work. English.

string | null
prerequisites_de

#943 - the German mirror of prerequisites.

string | null
prerequisites_must_acknowledge

#943 - when true the installer must tick the acknowledgement before the install action unlocks. Enforced server-side, not only in the wizard.

boolean | null
pricing
One of:
null
required_resource_kinds

Resource kinds the installer must bind for the product as a whole. The kinds a member connector declares are merged in automatically.

Array<string>
script_ids
Array<string>
slug
required
string
summary
string | null
tags
Array<string> | null
version
string | null
workflow_ids
Array<string>
Examplegenerated
{
"app_ids": [
"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
],
"categories": [
"example"
],
"changelog": "example",
"description": "example",
"name": "example",
"node_type_ids": [
"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
],
"prerequisites": "example",
"prerequisites_de": "example",
"prerequisites_must_acknowledge": true,
"pricing": {
"amount_minor": 1,
"currency": "example",
"model": "example"
},
"required_resource_kinds": [
"example"
],
"script_ids": [
"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
],
"slug": "example",
"summary": "example",
"tags": [
"example"
],
"version": "example",
"workflow_ids": [
"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
]
}
Media typeapplication/json

A catalog item — an app, script, bundle, or runner offer listing. Scoped to a source via source_id. The (source_id, slug) pair is unique.

object
categories
required
Array<string>
created_at
required
string format: date-time
deprecated
required
boolean
description
string | null
framework

ADR 0030 W6 — build framework of the item’s latest non-withdrawn version (plain | react | svelte). Populated by list_items / get_item via a correlated subquery; absent in queries that do not project it (e.g. upsert_item RETURNING), where #[sqlx(default)] supplies "plain". Surfaces a framework badge on browse cards. Runtime String; the spec narrows it to the closed [MarketplaceFramework].

string
Allowed values: plain react svelte
id
required
string format: uuid
install_count

#358 — public install popularity: the number of DISTINCT workspaces that have installed this item (marketplace_installs). Populated by list_items / get_item via a correlated subquery mirroring rating; absent (None) in projections that do not select it, where #[sqlx(default)] supplies None.

integer | null format: int64
kind
required
string
name
required
string
price
One of:
null
publisher
One of:
null
rating
One of:
null
seller_profile_id
string | null format: uuid
slug
required
string
source_id
required
string format: uuid
summary
string | null
tags
required
Array<string>
updated_at
required
string format: date-time
verified
required
boolean
Example
{
"framework": "plain"
}