Skip to main content
The CMS becomes a marketplace primitive when you wire it to a payment plan with purpose: 'cms_item'. The fulfillment pipeline runs automatically: once the buyer pays, the item is created (or queued for review) without any custom webhook code.

1. Create the plan

From the dashboard, create a payment_plan and set:

2. Show a checkout button on your site

3. What happens behind the scenes

  1. The buyer’s form data is stashed in cms_pending_submissions.
  2. They are sent to checkout (Stripe embedded or custom redirect).
  3. On payment success, the Stripe webhook calls the unified fulfillment dispatcher, which:
    • reads the pending submission,
    • validates it against the collection schema,
    • inserts a cms_item with source = 'payment' and expires_at based on duration_days,
    • emits a purchase.fulfilled event.
If moderation is set to manual, the new item is created with status = 'pending_review' and a dashboard notification fires. Otherwise it goes live immediately.