Submit a block to the Marketplace (creator flow)

Anyone with org-admin permissions on an org can author and publish a block to the Marketplace. The flow at /marketplace/blocks/submit walks you through three phases.

Phase 1 — Listing:
Pick an existing listing of yours, or fill out a new one.
• Org slug + Block slug — combined into the unique block id 'orgSlug.blockSlug' (lowercase, dashes allowed). e.g. 'pixel-studios.testimonial-carousel'.
• Label — 1–4 words shown in the picker.
• Category — for marketplace filtering.
• Requires module — optional. If set, only orgs that have that module on will see the block.
• Pricing — Free, One-time, or Subscription.
- One-time: amount in USD cents (minimum 50 = $0.50).
- Subscription: amount + month/year interval.
• Description — one paragraph on the marketplace card.

Phase 2 — Bundle:
Upload your built artifact — a single ES module .js file built with the SDK (see "Block Marketplace SDK" article). The file is uploaded to Storage, SHA-256 hashed client-side, and stamped with your declared semver version. The "Block Marketplace SDK" article explains the import + render contract.

Phase 3 — Submit:
Review the metadata + bundle URL, then click "Submit for review". The listing flips to status 'pending-review' and a platform reviewer audits the bundle before it goes live.

After submit:
• You can iterate on drafts as long as status is 'draft' or 'changes-requested'.
• Approved versions auto-route 90% of every install/subscription invoice to your Stripe Connect account (the same one you set in Settings → Integrations → Stripe Connect).
• 'Track latest' installers auto-upgrade when you publish a new approved version. Pinned installers stay on their version.

Important: you must have completed Stripe Connect onboarding on the owning org before paid blocks can be installed — without an ownerStripeAccountId on the listing, the install function refuses to start checkout for any paid block.