Overview
The Hub API provides programmatic access to the Marketplace Hub — the B2B content exchange where workspaces publish and discover product catalogs. The API supports both consumer operations (browse, preview, clone, subscribe) and publisher operations (analytics, unpublish).Base URL
All Hub API endpoints use the following base:Endpoint groups
Browse Catalogs
GET /hub/catalogs — search and filter the public Hub feedPreview
GET /hub/catalogs/{id}/preview — first 10 products + stats, no clone requiredClone & Subscribe
POST /hub/catalogs/{id}/clone and /subscribe — acquire catalog accessSync & Conflicts
Subscription sync management and conflict resolution
Publisher Analytics
GET /hub/catalogs/{id}/analytics — views, clones, subscribers, revenueAuthentication
Public endpoints (no auth required)
The following endpoints are publicly accessible without authentication:| Endpoint | Description |
|---|---|
GET /api/hub/catalogs | Browse the public Hub feed |
GET /api/hub/catalogs/{catalogId}/preview | Preview a published catalog |
Authenticated endpoints
All other endpoints require a Bearer token:Rate limits
| Tier | Public endpoints | Authenticated endpoints |
|---|---|---|
| Unauthenticated | 60 requests/minute | — |
| Free | 60 requests/minute | 60 requests/minute |
| Pro | 60 requests/minute | 300 requests/minute |
| Business | 60 requests/minute | 600 requests/minute |
| Enterprise | Custom | Custom |
Retry-After header.
HubCatalog object
The core object returned by Hub browse and preview endpoints:Error responses
All Hub endpoints return standard error shapes:| Code | HTTP status | Description |
|---|---|---|
CATALOG_NOT_FOUND | 404 | Hub catalog ID not found or unpublished |
CATALOG_PRIVATE | 404 | Catalog exists but is private (returned as 404 to avoid enumeration) |
ALREADY_SUBSCRIBED | 409 | Workspace already has an active subscription to this catalog |
PAYMENT_REQUIRED | 402 | Paid catalog — complete Stripe Checkout before cloning/subscribing |
INSUFFICIENT_PERMISSIONS | 403 | Operation not permitted for this API key |
RATE_LIMIT_EXCEEDED | 429 | Too many requests — see Retry-After header |