List runs
The brand's runs, newest first, counted as the Studio's run list counts them: a person's decision on a row outranks the grader's verdict. ?limit= up to 200, default 50.
apiKeyAuthorizationBearer <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.
brandId*stringWhich of your brands this run belongs to. A brand outside your organization answers not found.
limit?integer0 < value <= 9007199254740991The runs.
application/json- response
data*array<>curl -X GET 'https://fabric.inc/api/v1/brands/string/catalog-builder/runs'{ "data": [ { "createdAt": "string", "createdBy": "string", "finishedAt": "string", "id": "string", "name": "string", "processed": -9007199254740991, "promoted": -9007199254740991, "refused": -9007199254740991, "rejected": -9007199254740991, "reviewing": -9007199254740991, "status": "cancelled", "total": -9007199254740991 } ]}Plan a run over your products POST
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.
Start a run POST
A batch of product identities in, a run id back. **202, not 200**: the work has been accepted, not done — poll `GET /runs/{id}`. Needs `catalog:write` and an `Idempotency-Key` header: a retried POST with the same key does not scrape the batch twice. Send NDJSON (one object per line, `application/x-ndjson`) or a JSON array. Lines are accepted or rejected **individually**: a batch of 5,000 with one bad row scrapes 4,999 and tells you which line failed. Every line needs a vendor SKU (`sku` or `vendorSku`) — it is what the supplier's site is indexed by, and a line without one is rejected. Each line needs something to scrape *against*: either a `categoryId` whose category has a golden mapping, or its own `attributes`. A line with neither is refused as `no_gold_match` rather than scraped for generic attributes.