Open app
Moonborn — Developers

Marketplace publishing

List a persona on the Moonborn marketplace with pre-publish moderation, fork lineage with attribution, ratings, and an optional commerce layer via Stripe Connect. Free workspaces can browse and fork; publishing starts at Pro.

The problem

A persona that works for you is worth sharing. The two failure modes:

  • Publish without a gate and the marketplace fills with low-quality, off-brand, or unsafe listings.
  • Publish without lineage and forks lose their connection to the canonical work — no attribution, no audit trail, no way to follow improvements upstream.

Moonborn's marketplace is a curated, fork-aware listing surface: every publish runs through moderation, every fork is wired into the lineage graph, and the optional commerce layer rides on Stripe Connect.

What you can do

  • Publish a persona snapshot as a listing with a license and (optionally) a price.
  • Browse by filter (all / free / paid / new / editor's picks) and sort (popular / new / featured / semantic).
  • Install a listing into your workspace — copies the persona, increments the listing's download counter.
  • Fork a listing — copies the persona with parent_persona_id set, attribution metadata attached, and the lineage edge inserted.
  • Rate a listing (1–5 stars, optional comment) — one rating per user, upsert on re-rate.
  • Report abuse — files into the moderation queue.
  • Curate collections — workspace-scoped groupings of listings.

How publishing works

const listing = await client.marketplace.listings.publish({
 personaId: persona.id,
 license: 'CC-BY-4.0',
 priceCents: 0,
});
// listing.status === 'in_review'

Every new listing enters the in_review state. A moderation pass — configurable as auto-approved or human-reviewed via marketplace.moderation.auto_approve — decides between published, unpublished (rejected), or held in in_review (flagged for deeper review). The default policy gates approval through human review with a target SLA configured by marketplace.moderation.review_sla_hours.

The Listing entity carries:

{
 id, personaId, orgId,
 license, priceCents, currency,
 status: 'draft' | 'in_review' | 'published' | 'unpublished' | 'removed',
 featured, ratingsAvg, ratingsCount,
 downloads, forks,
 publishedAtMs, removedAtMs,
}

Lineage on fork

When a listing is forked, Moonborn:

  1. Copies the persona into the forking workspace.
  2. Sets the new persona's parent_persona_id to the source persona.
  3. Writes a persona_lineage edge into the fork graph.
  4. If marketplace.fork.attribution_required is on (default), augments the new persona's metadata with meta.attribution = { sourcePersonaId, sourceCreator }.
  5. Increments the source listing's forks counter.
  6. Writes an immutable marketplace.listing.forked row into the audit log.

Pair this with the Brand voice variants flow when you want a public canonical persona that downstream teams can fork into their own brand-locked variants without losing the attribution chain.

Commerce (optional, Stripe Connect)

The commerce layer is gated by marketplace.commerce.enabled (off by default) and binds to Stripe Connect Express:

  • Creators onboard via OnboardCreatorUseCase; charges and payouts are gated on Stripe's charges_enabled and payouts_enabled flags.
  • Revenue split is set by marketplace.commerce.revenue_share (default 0.7 — 70% creator, 30% platform).
  • Payouts trip when the creator's pending balance crosses marketplace.commerce.payout_min_usd (default $50), via RequestPayoutUseCase.
  • Stripe Tax handles VAT, GST, and US sales tax automatically.
  • A reconciliation cron audits usage_events against Stripe records hourly so the internal ledger and Stripe never drift.

Endpoints

MethodPathPurpose
GET/api/marketplace/listingsDiscover (filter, query, sort, limit)
POST/api/marketplace/listings/publishSubmit for review
POST/api/marketplace/listings/{id}/installAdd to workspace
POST/api/marketplace/listings/{id}/forkFork with lineage
POST/api/marketplace/listings/{id}/reviewRate (1–5) + optional comment
POST/api/marketplace/listings/{id}/reportFile abuse report
GET/api/marketplace/collectionsBrowse curated collections
GET/api/marketplace/publishableList personas eligible for publish

Tier

CapabilityFreeProTeamEnterprise
Browse, fork, rate, comment
Publish
Collections
Commerce (paid listings)

The commerce layer is currently Enterprise-only and starts disabled at the system config level — switch it on per organization once a Stripe Connect agreement is in place.

Honest scope

Moonborn's marketplace is not a third-party storefront platform — no embedded storefronts, no creator-tier subscription reselling, no NFT or blockchain layer. Direct creator-to-consumer messaging and a native Slack persona bot are also explicitly out of scope; webhooks remain the integration path.

Next