{✦} Stylumia Developers

Coverage & combinations

Coverage

There is no separate endpoint for the list of retailers or the list of categories — GET /v1/coverage is how you see what exists, and it returns one row per RCD combination: a retailer, a category, and the department that category sits under.

Field Meaning
retailer Retailer slug
department Department slug
category Category slug, scoped within department
rcd retailer:category:department, ready to reuse as the rcd filter elsewhere
corpus_rows Total rows this combination holds
matching_rows Rows in this combination that also match any start_date/end_date you sent
earliest_date Earliest crawl_date among the matching rows
latest_date Most recent crawl_date among the matching rows

Call it with no filters and you get every combination your team can see — that's the full retailer/category/department vocabulary, since there's no dedicated endpoint for retailers or categories on their own anymore. Narrow it with retailer, category, department, or rcd to see just the combinations you care about.

rcd: the combination as one value

rcd is the shorthand for a combination: retailer:category:department, comma-separated when you mean more than one. It's exactly the string GET /v1/coverage gives back in each row's rcd field — copy it straight into /v1/sample, /v1/catalog, or /v1/coverage instead of naming retailer, category, and department separately:

GET /v1/coverage?rcd=home_depot:power_tools:tools,home_depot:hand_tools:tools

meta.coverage: coverage without a separate call

Every response from every endpoint — /v1/sample, /v1/catalog, and /v1/coverage itself — carries a coverage block in meta, summed across whatever combinations your filters matched:

{ "combinations": 1, "matching_rows": 6, "corpus_rows": 2361, "earliest_date": "2026-06-14", "latest_date": "2026-08-14" }

That's the same shape aggregated: combinations is how many RCD rows matched, matching_rows and corpus_rows are summed across them, and the dates span all of them. One request tells you both what you got and how much exists — see Requests.

Not a required first step

Coverage is useful before a large pull — it answers "does this window have enough rows before I spend a call finding out" — but nothing here gates anything else. /v1/sample and /v1/catalog work with filters you already know, with no coverage call in between. Guess wrong and you get valid_options naming the real values instead of a working result — that's the only vocabulary lookup this API needs, and it works from any of the three endpoints, not just this one. See Error handling.

View as markdown