Portal Community
Phase 3 — PENDING The marketplace publishing pipeline is planned but not yet implemented. This guide documents the intended behavior.

Submission at a Glance

Publishing a package is a five-stage process. All stages complete without human intervention for Community-level packages. Certified packages add a human review stage after the automated checks.

1. Publisher
Verified
2. Package
Uploaded
3. Security
Scan
4. Review
(Automated)
5. Listed in
Marketplace

Trust Level Earned on Submission

Trust LevelHow EarnedReview TypeTypical Timeline
CommunityAutomated scan PASS + manifest validationAutomated only5–15 minutes
CertifiedCommunity + human review + 70% test coverage + full READMEAutomated + human2–5 business days
OfficialBizFirstGO engineering team onlyInternalInternal process

Submission API

POST /api/marketplace/submit
Authorization: Bearer {publisherToken}
Content-Type: multipart/form-data

Fields:
  package     — the .installhub.zip file
  description — short description (max 500 chars)
  category    — one of: Workflows, Forms, Agents, Templates, Utilities
  tags        — comma-separated tags (max 10)
  changelog   — release notes for this version
  requestCertification — true to enter the Certified review queue

// Response (immediate):
{
  "submissionId": "sub-a1b2c3d4",
  "status":       "Queued",
  "statusUrl":    "/api/marketplace/submissions/sub-a1b2c3d4/status",
  "estimatedMinutes": 10
}

Submission Status

GET /api/marketplace/submissions/{submissionId}/status

// Scanning:
{ "status": "SecurityScanning", "stage": "ExpressionInjectionCheck", "progress": "2 of 5 checks" }

// Listed:
{
  "status":      "Listed",
  "packageId":   "mkt-pkg-a1b2c3",
  "trustLevel":  "Community",
  "listedAt":    "2026-05-25T14:22:00Z",
  "marketplaceUrl": "https://marketplace.bizfirstai.com/packages/mkt-pkg-a1b2c3"
}

// Rejected:
{
  "status":  "Rejected",
  "reason":  "SecurityScanFailed",
  "details": "Expression injection detected in RuleSet 'ApprovalRules': unsafe expression '{{env.secret}}'",
  "resubmitAfterFix": true
}

Prerequisites Before Publishing