Skip to main content

Endpoints

POST /api/hub/catalogs/{catalogId}/clone
POST /api/hub/catalogs/{catalogId}/subscribe
Two ways to acquire a Hub catalog:
  • Clone — creates a local copy in your workspace with no ongoing connection
  • Subscribe — creates a live link that receives publisher version updates
Both require authentication. Paid catalogs require a completed Stripe Checkout before these endpoints succeed.

Path parameters

ParameterTypeRequiredDescription
catalogIdstringYesThe Hub catalog ID

Clone

POST /api/hub/catalogs/{catalogId}/clone Creates a complete copy of the catalog in your workspace as a new, standalone catalog. No ongoing connection to the publisher — you own the copy entirely.

Request body

{
  "targetWorkspaceId": "ws_your_workspace",
  "catalogName": "Spring 2026 Apparel (Cloned)"
}
FieldTypeRequiredDescription
targetWorkspaceIdstringNoWorkspace to clone into (defaults to the key’s workspace)
catalogNamestringNoName for the new catalog (defaults to original name + ” (Clone)“)

Response

{
  "cloneId": "clone_7x3p9q",
  "catalogId": "cat_new_local_123",
  "status": "processing",
  "productCount": 512,
  "estimatedSeconds": 30
}

Clone examples

curl -X POST "https://app.alana.shopping/api/hub/catalogs/hub_cat_9x8k2m/clone" \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "catalogName": "Spring 2026 Apparel (My Copy)"
  }'

Subscribe

POST /api/hub/catalogs/{catalogId}/subscribe Creates a live subscription to the Hub catalog. When the publisher releases a new version, your workspace receives a notification and can sync.

Request body

{
  "syncStrategy": "manual",
  "conflictResolution": "keep_local"
}
FieldTypeRequiredDescription
syncStrategystringYes"auto" or "manual"
conflictResolutionstringYes"keep_local", "accept_remote", or "manual_review"

Sync strategies

StrategyBehavior
autoNew publisher versions are automatically applied to your local catalog
manualNew versions are queued — you must explicitly trigger sync

Conflict resolution strategies

StrategyBehavior
keep_localYour local edits always win when they conflict with publisher changes
accept_remotePublisher changes always win — your local edits are overwritten
manual_reviewConflicts are queued for manual resolution via the UI or API

Response

{
  "subscriptionId": "sub_4k2n8x",
  "catalogId": "cat_local_456",
  "hubCatalogId": "hub_cat_9x8k2m",
  "status": "active",
  "syncStrategy": "manual",
  "conflictResolution": "keep_local",
  "currentVersion": 5,
  "createdAt": "2026-03-17T10:00:00Z"
}

Subscribe examples

curl -X POST "https://app.alana.shopping/api/hub/catalogs/hub_cat_9x8k2m/subscribe" \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "syncStrategy": "manual",
    "conflictResolution": "keep_local"
  }'

Clone vs Subscribe comparison

FeatureCloneSubscribe
Creates local catalogYesYes
Ongoing publisher updatesNoYes
Sync on new versionsNoYes (auto or manual)
Conflict resolutionN/AConfigurable
Can edit local copyYes (fully)Yes (with conflict resolution)
Cost (paid catalogs)One-timeRecurring (if subscription pricing)

Error responses

HTTP statusCodeDescription
402PAYMENT_REQUIREDPaid catalog — complete Stripe Checkout first
403INSUFFICIENT_PERMISSIONSAPI key lacks required permission
404CATALOG_NOT_FOUNDHub catalog not found or unpublished
409ALREADY_SUBSCRIBEDWorkspace already has an active subscription (subscribe only)
429RATE_LIMIT_EXCEEDEDToo many requests
Last modified on March 18, 2026