Skip to main content

Publishing & approval

The marketplace uses the agents.status column as the publish gate. Four values, three of which are observable to end-users.

StatusPublic catalogDetail pagePricingOAuthNotes
draftHidden404 to non-adminsN/AWorks (lets you test)Admins only
coming_soonShown with "Coming soon" badgeLoads (locked CTA)Hidden, replaced with waitlistWorksCaptures emails into agent_waitlist
activeShownLoadsVisible, checkout enabledWorksProduction state
inactiveHidden404N/ADisabled at OAuth client levelSoft delete

Status transitions

There's no separate "review queue" or two-step approval. The transition is a single POST /agents/:id mutation with the new status. Only platform_admin can do it.

Checklist before flipping to coming_soon

  1. Agent record created (Track B Step 1) — ✓
  2. Pricing tiers seeded (Track B Step 5) — ✓
  3. Capabilities + steps + screenshots all present — ✓
  4. iconUrl is a real CDN URL (not localhost) — ✓
  5. productDomain and redirectUris point to your production origin — ✓
  6. Marketing copy has been reviewed — ✓
  7. comingSoon agent card renders correctly in the marketplace UI — ✓

Then:

POST /agents/<agentId>
{
"status": "coming_soon"
}

Checklist before flipping to active

In addition to the above:

  1. Track A is deployed to production (not staging).
  2. Stripe Products + Prices are created (auto on tier create — verify stripeProductId populated).
  3. Stripe webhooks are pointing to the prod marketplace backend.
  4. End-to-end checklist all green.
  5. At least one internal user has completed a full checkout on the paid tier.
  6. Quota arithmetic has been exercised against the real backend.
  7. Audit logs are flowing to PostHog.

Then:

POST /agents/<agentId>
{
"status": "active"
}

The agent is now publicly purchasable.

Going inactive

If you need to take an agent down (deprecation, compliance issue, abuse):

DELETE /agents/<agentId>

This is soft-delete — sets status: 'inactive' and disables the OAuth client. Existing subscriptions stay in the DB. Stripe subscriptions are not auto-cancelled — do that separately if needed.

To re-enable, POST /agents/:id with status: 'active'. The OAuth client is reactivated.

Communicating the launch

The marketplace doesn't auto-broadcast a launch. Recommended steps:

  1. Add a changelog entry for v1.0.0 via POST /agents/:id/changelog.
  2. Add a homepage feature placement: set featured: true and isNew: true on the agent.
  3. Email anyone on the waitlist (export from agent_waitlist).
  4. Post to the marketplace team's Slack via the existing channels.

What success looks like 7 days post-launch

SignalWhere to look
InstallsGET /agents/:id returns installs > 0
SubscriptionsPOSTHOG → query event = 'subscription_created'
ReviewsGET /agents/:id/reviews
Errorsaudit_logs rows where result = 'failure'
Stripe failuresstripe_events.errorMessage IS NOT NULL

If any of those look off, jump to Troubleshooting.