Marketplace Admin
Marketplace Admin protocol schemas
Marketplace Administration Protocol
Defines schemas for the platform (Cloud) side of marketplace operations.
Covers the administrative workflows for managing and governing the marketplace.
Architecture Alignment
-
Salesforce AppExchange Admin: Security review, ISV monitoring, partner management
-
Apple App Store Connect Review: Human review process, guidelines, rejection reasons
-
Google Play Console: Policy enforcement, quality gates, content moderation
Key Concepts
-
Review Process: Structured workflow for submission review (automated + manual)
-
Curation: Featured apps, curated collections, editorial picks
-
Governance: Policy enforcement, takedown, compliance
-
Platform Analytics: Marketplace health, trending, abuse detection
Source: packages/spec/src/cloud/marketplace-admin.zod.ts
TypeScript Usage
import { CuratedCollection, FeaturedListing, MarketplaceHealthMetrics, PolicyAction, PolicyViolationType, RejectionReason, ReviewCriterion, ReviewDecision, SubmissionReview, TrendingListing } from '@objectstack/spec/cloud';
import type { CuratedCollection, FeaturedListing, MarketplaceHealthMetrics, PolicyAction, PolicyViolationType, RejectionReason, ReviewCriterion, ReviewDecision, SubmissionReview, TrendingListing } from '@objectstack/spec/cloud';
// Validate data
const result = CuratedCollection.parse(data);CuratedCollection
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| id | string | ✅ | Collection ID |
| name | string | ✅ | Collection name |
| description | string | optional | |
| coverImageUrl | string | optional | |
| listingIds | string[] | ✅ | Ordered listing IDs |
| published | boolean | ✅ | |
| sortOrder | integer | ✅ | |
| createdBy | string | optional | |
| createdAt | string | optional | |
| updatedAt | string | optional |
FeaturedListing
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| listingId | string | ✅ | Featured listing ID |
| priority | integer | ✅ | |
| bannerUrl | string | optional | |
| editorialNote | string | optional | |
| startDate | string | ✅ | |
| endDate | string | optional | |
| active | boolean | ✅ |
MarketplaceHealthMetrics
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| totalListings | integer | ✅ | |
| listingsByStatus | Record<string, integer> | optional | |
| listingsByCategory | Record<string, integer> | optional | |
| totalPublishers | integer | ✅ | |
| verifiedPublishers | integer | ✅ | |
| totalInstalls | integer | ✅ | |
| averageReviewTime | number | optional | |
| pendingReviews | integer | ✅ | |
| listingsByPricing | Record<string, integer> | optional | |
| snapshotAt | string | ✅ |
PolicyAction
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| id | string | ✅ | Action ID |
| listingId | string | ✅ | Target listing ID |
| violationType | Enum<'malware' | 'data-harvesting' | 'spam' | 'copyright' | 'inappropriate-content' | 'terms-of-service' | 'security-risk' | 'abandoned'> | ✅ | |
| action | Enum<'warning' | 'suspend' | 'takedown' | 'restrict'> | ✅ | |
| reason | string | ✅ | Explanation of the violation |
| actionBy | string | ✅ | Admin user ID |
| actionAt | string | ✅ | |
| resolution | string | optional | |
| resolved | boolean | ✅ |
PolicyViolationType
Allowed Values
malwaredata-harvestingspamcopyrightinappropriate-contentterms-of-servicesecurity-riskabandoned
RejectionReason
Allowed Values
security-vulnerabilitypolicy-violationquality-below-standardmisleading-metadataincompatibleduplicateinsufficient-documentationother
ReviewCriterion
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| id | string | ✅ | Criterion ID |
| category | Enum<'security' | 'performance' | 'quality' | 'ux' | 'documentation' | 'policy' | 'compatibility'> | ✅ | |
| description | string | ✅ | |
| required | boolean | ✅ | |
| passed | boolean | optional | |
| notes | string | optional |
ReviewDecision
Allowed Values
approvedrejectedchanges-requested
SubmissionReview
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| id | string | ✅ | Review ID |
| submissionId | string | ✅ | Submission being reviewed |
| reviewerId | string | ✅ | Platform reviewer ID |
| decision | Enum<'approved' | 'rejected' | 'changes-requested'> | optional | Final decision |
| criteria | Object[] | optional | Review checklist results |
| rejectionReasons | Enum<'security-vulnerability' | 'policy-violation' | 'quality-below-standard' | 'misleading-metadata' | 'incompatible' | 'duplicate' | 'insufficient-documentation' | 'other'>[] | optional | |
| feedback | string | optional | Detailed review feedback (Markdown) |
| internalNotes | string | optional | Internal reviewer notes |
| startedAt | string | optional | |
| completedAt | string | optional |
TrendingListing
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| listingId | string | ✅ | |
| rank | integer | ✅ | |
| trendScore | number | ✅ | |
| installVelocity | number | ✅ | |
| period | string | ✅ |