Fabric documentation
V1BrandsBrandidCatalog builderPlans

Plan a run over your products

POST
/v1/brands/{brandId}/catalog-builder/plans

What a run over these products would do, before anything starts: how many can be scraped, which cannot and why, and a quoteId. Costs nothing and starts nothing. Needs catalog:read.

This is the step a program takes where a person reads the Studio's card. The product ids are your own catalog's; the lines are built from each product's vendor SKU, category and title the way the Studio's Build from suppliers builds them.

Authorization

apiKey
headerAuthorizationBearer <token>

Your API key. X-Api-Key: <key> is accepted as an alternative.

A key belongs to an organization, not a user, so it outlives whoever created it. It carries two independent things, and both are checked: an org role (a member key cannot approve a publish or activate a mapping) and a set of scopes — catalog:read, catalog:write, enrichment:write, publishing:read, publishing:write, org:read, org:write. Holding a scope does not grant a role, and holding a role does not grant a scope.

GET /v1/me returns both for the key you are holding.

Path Parameters

brandId*string

Which of your brands this run belongs to. A brand outside your organization answers not found.

Request Body

application/json
  1. body
productIds*array<>
Items1 <= items <= 5000

Response Body

The plan.

application/json
  1. response
ceiling*integer

The most products one run may take for this brand.

Range-9007199254740991 <= value <= 9007199254740991
eligible*integer

Products a run would scrape.

Range-9007199254740991 <= value <= 9007199254740991
quoteId*string

Hand this to POST /runs/from-products with the same productIds. It stays valid while a fresh plan of that selection agrees — the same products eligible under the same ceiling.

skipped*array<>
Example Request
curl -X POST 'https://fabric.inc/api/v1/brands/string/catalog-builder/plans' \  -H 'Content-Type: application/json' \  -d '{  "productIds": [    "string"  ]}'
Example Response
{  "ceiling": -9007199254740991,  "eligible": -9007199254740991,  "quoteId": "string",  "skipped": [    {      "productId": "string",      "reason": "string"    }  ]}