Docs

REST surface for the Marketplace — listings, install, uninstall, checkout, Tenant Yokes, verticals, clone, draft, primitives.

API reference

Every endpoint is tenant-scoped. The platform derives the tenant_id from the JWT; you never pass it in the body or in a path segment.

Auth

Tenant JWT in Authorization: Bearer …. Endpoints return 401 if the JWT is missing or invalid.

Catalogue

MethodPathPurpose
GET/api/v1/tenant/marketplace/listingsList every public listing in the catalogue.

Install lifecycle

MethodPathPurpose
POST/api/v1/tenant/marketplace/listings/:id/installInstall a listing. Free → grants entitlement + seeds. Paid → 402 if tier-blocked; otherwise hands off to checkout.
POST/api/v1/tenant/marketplace/listings/:id/uninstallRevoke entitlement. Data retained.
POST/api/v1/tenant/marketplace/listings/:id/checkoutOpen a Stripe Checkout session for a paid listing. Returns a session URL.

Tenant Yokes

MethodPathPurpose
POST/api/v1/tenant/marketplace/tenant-yokesCreate a Tenant Yoke.
PUT/api/v1/tenant/marketplace/tenant-yokes/:slugUpdate a Tenant Yoke definition.
DELETE/api/v1/tenant/marketplace/tenant-yokes/:slugDelete a Tenant Yoke.
GET/api/v1/tenant/marketplace/tenant-yokes/:slug/historyTenant Yoke change history.
POST/api/v1/tenant/marketplace/yoke-draftSave a draft Tenant Yoke (Studio's autosave target).

Verticals

MethodPathPurpose
GET/api/v1/tenant/marketplace/verticalsList curated bundles.
GET/api/v1/tenant/marketplace/verticals/:slugOne vertical's composition.

Clone-from-source

MethodPathPurpose
POST/api/v1/tenant/marketplace/clone/:source_slugCreate a Tenant Yoke pre-populated from a public listing.

Primitives

MethodPathPurpose
GET/api/v1/tenant/marketplace/primitivesList building-block primitives Tenant Yokes can draw from.
GET/api/v1/tenant/marketplace/primitives/:slugOne primitive's definition.

Error codes

CodeMeaningReturned by
tier_requiredThe tenant's tier is below the listing's tier_required. Body carries the listing slug and the required tier.POST /listings/:id/install
not_entitledThe caller doesn't hold the listing's entitlement.Listing-private routes guarded by the entitlement gate.

Both are 402 responses.

See also