ObjectStackObjectStack

App Store

App Store protocol schemas

App Store Protocol (Customer Experience)

Defines schemas for the end-customer experience when browsing, evaluating,

installing, and managing marketplace apps from within ObjectOS.

Architecture Alignment

  • Salesforce AppExchange (Customer): Browse apps, read reviews, 1-click install

  • Shopify App Store (Merchant): App evaluation, trial, install, manage subscriptions

  • Apple App Store (User): Ratings, reviews, featured collections, personalized recs

Customer Journey


Discover → Evaluate → Install → Configure → Use → Rate/Review → Manage

Key Concepts

  • Reviews & Ratings: User-submitted ratings and reviews with moderation

  • Collections & Recommendations: Personalized discovery and curated picks

  • Subscription Management: Manage licenses, billing, and renewals

  • Installed App Management: Enable, disable, configure, upgrade, uninstall

Source: packages/spec/src/cloud/app-store.zod.ts

TypeScript Usage

import { AppDiscoveryRequest, AppDiscoveryResponse, AppSubscription, InstalledAppSummary, ListInstalledAppsRequest, ListInstalledAppsResponse, ListReviewsRequest, ListReviewsResponse, RecommendationReason, RecommendedApp, ReviewModerationStatus, SubmitReviewRequest, SubscriptionStatus, UserReview } from '@objectstack/spec/cloud';
import type { AppDiscoveryRequest, AppDiscoveryResponse, AppSubscription, InstalledAppSummary, ListInstalledAppsRequest, ListInstalledAppsResponse, ListReviewsRequest, ListReviewsResponse, RecommendationReason, RecommendedApp, ReviewModerationStatus, SubmitReviewRequest, SubscriptionStatus, UserReview } from '@objectstack/spec/cloud';

// Validate data
const result = AppDiscoveryRequest.parse(data);

AppDiscoveryRequest

Properties

PropertyTypeRequiredDescription
tenantIdstringoptional
categoriesEnum<'crm' | 'erp' | 'hr' | 'finance' | 'project' | 'collaboration' | 'analytics' | 'integration' | 'automation' | 'ai' | 'security' | 'developer-tools' | 'ui-theme' | 'storage' | 'other'>[]optional
platformVersionstringoptional
limitinteger

AppDiscoveryResponse

Properties

PropertyTypeRequiredDescription
featuredObject[]optional
recommendedObject[]optional
trendingObject[]optional
newArrivalsObject[]optional
collectionsObject[]optional

AppSubscription

Properties

PropertyTypeRequiredDescription
idstringSubscription ID
listingIdstringApp listing ID
tenantIdstringCustomer tenant ID
statusEnum<'active' | 'trialing' | 'past-due' | 'cancelled' | 'expired'>
licenseKeystringoptional
planstringoptionalSubscription plan name
billingCycleEnum<'monthly' | 'annual'>optional
priceInCentsintegeroptional
currentPeriodStartstringoptional
currentPeriodEndstringoptional
trialEndDatestringoptional
autoRenewboolean
createdAtstring

InstalledAppSummary

Properties

PropertyTypeRequiredDescription
listingIdstring
packageIdstring
namestring
iconUrlstringoptional
installedVersionstring
latestVersionstringoptional
updateAvailableboolean
enabledboolean
subscriptionStatusEnum<'active' | 'trialing' | 'past-due' | 'cancelled' | 'expired'>optional
installedAtstring

ListInstalledAppsRequest

Properties

PropertyTypeRequiredDescription
tenantIdstringoptional
enabledbooleanoptional
updateAvailablebooleanoptional
sortByEnum<'name' | 'installed-date' | 'updated-date'>
pageinteger
pageSizeinteger

ListInstalledAppsResponse

Properties

PropertyTypeRequiredDescription
itemsObject[]
totalinteger
pageinteger
pageSizeinteger

ListReviewsRequest

Properties

PropertyTypeRequiredDescription
listingIdstringListing to get reviews for
sortByEnum<'newest' | 'oldest' | 'highest' | 'lowest' | 'most-helpful'>
ratingintegeroptional
pageinteger
pageSizeinteger

ListReviewsResponse

Properties

PropertyTypeRequiredDescription
itemsObject[]
totalinteger
pageinteger
pageSizeinteger
ratingSummaryObjectoptional

RecommendationReason

Allowed Values

  • popular-in-category
  • similar-users
  • complements-installed
  • trending
  • new-release
  • editor-pick

RecommendedApp

Properties

PropertyTypeRequiredDescription
listingIdstring
namestring
taglinestringoptional
iconUrlstringoptional
categoryEnum<'crm' | 'erp' | 'hr' | 'finance' | 'project' | 'collaboration' | 'analytics' | 'integration' | 'automation' | 'ai' | 'security' | 'developer-tools' | 'ui-theme' | 'storage' | 'other'>Marketplace package category
pricingEnum<'free' | 'freemium' | 'paid' | 'subscription' | 'usage-based' | 'contact-sales'>Package pricing model
averageRatingnumberoptional
activeInstallsintegeroptional
reasonEnum<'popular-in-category' | 'similar-users' | 'complements-installed' | 'trending' | 'new-release' | 'editor-pick'>

ReviewModerationStatus

Allowed Values

  • pending
  • approved
  • flagged
  • rejected

SubmitReviewRequest

Properties

PropertyTypeRequiredDescription
listingIdstringListing to review
ratingintegerStar rating
titlestringoptional
bodystringoptional

SubscriptionStatus

Allowed Values

  • active
  • trialing
  • past-due
  • cancelled
  • expired

UserReview

Properties

PropertyTypeRequiredDescription
idstringReview ID
listingIdstringListing being reviewed
userIdstringReview author user ID
displayNamestringoptionalReviewer display name
ratingintegerStar rating (1-5)
titlestringoptionalReview title
bodystringoptionalReview text
appVersionstringoptionalApp version being reviewed
moderationStatusEnum<'pending' | 'approved' | 'flagged' | 'rejected'>
helpfulCountinteger
publisherResponseObjectoptionalPublisher response to review
submittedAtstring
updatedAtstringoptional

On this page