@instruments/materialgraph 0.30.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,7 +11,6 @@ export const RESPONSE_SCHEMA_OPERATION_IDS = [
11
11
  "get_catalog_page_representation",
12
12
  "list_catalog_product_references",
13
13
  "search_materials_post",
14
- "match_material",
15
14
  "plan_material_query",
16
15
  "samplize_catalogue_products",
17
16
  "search_materials_get",
@@ -31,6 +30,7 @@ export const RESPONSE_SCHEMA_OPERATION_IDS = [
31
30
  "list_variant_facets",
32
31
  "find_variants_by_colour",
33
32
  "find_variants_by_vector",
33
+ "find_companions",
34
34
  "resolve_variant",
35
35
  "get_variant",
36
36
  "resolve_colour_name",
@@ -76,42 +76,34 @@ export const RESPONSE_SCHEMA_CATALOGUE_JSON = [
76
76
  "ble\"}},\"required\":[\"reason\",\"requiredArtifact\",\"status\"]}},\"required\":[\"catalogId\",\"documentId\",\"editionId\",\"id\",\"original\",\"page\",\"representation\"]},\"reason\":{\"type\":\"string\",\"const\":\"retained_representation_not_found\"},\"requiredArtifact\":{\"type\":\"object\",\"properties\":{\"mediaType\":{\"type\":\"string\",\"const\":\"image/webp\"},\"version\":{\"type\":\"string\",\"const\":\"catalogue-page-webp-v1\"}},\"required\":[\"mediaType\",\"version\"]},\"status\":{\"type\":\"string\",\"const\":\"unavailable\"}},\"required\":[\"page\",\"reason\",\"requiredArtifact\",\"status\"]},{\"type\":\"object\",\"properties\":{\"pageId\":{\"type\":\"string\",\"minLength\":1},\"status\":{\"type\":\"string\",\"const\":\"unresolved_page\"}},\"required\":[\"pageId\",\"status\"]}]},\"CatalogueReferenceBatchResponse\":{\"type\":\"object\",\"properties\":{\"coverage\":{\"type\":\"object\",\"properties\":{\"noVerifiedReference\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"requested\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"unavailable\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"unresolvedVariant\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"upstreamFailure\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"verified\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"noVerifiedReference\",\"requested\",\"unavailable\",\"unresolvedVariant\",\"upstreamFailure\",\"verified\"]},\"results\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"reference\":{\"type\":\"object\",\"properties\":{\"anchor\":{\"type\":\"object\",\"properties\":{\"coordinateSpace\":{\"type\":\"string\",\"const\":\"normalized_0_1000\"},\"height\":{\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":1000},\"width\":{\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":1000},\"x\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":999},\"y\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":999},\"documentPage\":{\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"const\":\"printed_code\"}},\"required\":[\"coordinateSpace\",\"height\",\"width\",\"x\",\"y\",\"kind\"]},\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"name\"]},\"catalogue\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"title\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"title\"]},\"document\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"mediaType\":{\"type\":\"string\",\"const\":\"application/pdf\"}},\"required\":[\"id\",\"mediaType\"]},\"edition\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"label\":{\"type\":\"string\",\"minLength\":1},\"title\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"label\"]},\"isPrimary\":{\"type\":\"boolean\"},\"page\":{\"type\":\"object\",\"properties\":{\"documentPage\":{\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"pageCount\":{\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"printedPageLabel\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"documentPage\"]},\"productRegion\":{\"type\":\"object\",\"properties\":{\"coordinateSpace\":{\"type\":\"string\",\"const\":\"normalized_0_1000\"},\"height\":{\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":1000},\"width\":{\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":1000},\"x\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":999},\"y\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":999},\"kind\":{\"type\":\"string\",\"const\":\"product_region\"},\"review\":{\"type\":\"object\",\"properties\":{\"approvedBy\":{\"type\":\"string\",\"minLength\":1},\"confidence\":{\"type\":\"object\",\"properties\":{\"evidenceBasis\":{\"type\":\"string\",\"enum\":[\"human_visual_review\",\"model_assisted_visual_review\"]},\"level\":{\"type\":\"string\",\"const\":\"reviewed\"}},\"required\":[\"evidenceBasis\",\"level\"]},\"method\":{\"type\":\"string\",\"enum\":[\"human\",\"model_assisted\"]},\"model\":{\"type\":\"string\",\"minLength\":1},\"reviewedAt\":{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"}}",
77
77
  ",\"required\":[\"approvedBy\",\"confidence\",\"method\",\"reviewedAt\"]}},\"required\":[\"coordinateSpace\",\"height\",\"width\",\"x\",\"y\",\"kind\",\"review\"]},\"source\":{\"type\":\"object\",\"properties\":{\"brandItemCode\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"brandItemCode\"]},\"status\":{\"type\":\"string\",\"const\":\"verified\"},\"variantId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"anchor\",\"brand\",\"catalogue\",\"document\",\"edition\",\"isPrimary\",\"page\",\"source\",\"status\",\"variantId\"]},\"status\":{\"type\":\"string\",\"const\":\"verified\"},\"variantId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"reference\",\"status\",\"variantId\"]},{\"type\":\"object\",\"properties\":{\"publication\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"name\"]},\"catalogue\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"title\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"title\"]},\"documentId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"edition\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"label\":{\"type\":\"string\",\"minLength\":1},\"title\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"label\"]},\"referencedProductCount\":{\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991}},\"required\":[\"brand\",\"catalogue\",\"documentId\",\"edition\"]},\"reason\":{\"type\":\"string\",\"enum\":[\"no_publication_on_record\",\"publication_source_unavailable\",\"publication_not_reviewed\",\"product_not_yet_referenced\"]},\"status\":{\"type\":\"string\",\"const\":\"no_verified_reference\"},\"variantId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"reason\",\"status\",\"variantId\"]},{\"type\":\"object\",\"properties\":{\"status\":{\"type\":\"string\",\"const\":\"unresolved_variant\"},\"variantId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"status\",\"variantId\"]},{\"type\":\"object\",\"properties\":{\"status\":{\"type\":\"string\",\"const\":\"unavailable\"},\"variantId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"status\",\"variantId\"]},{\"type\":\"object\",\"properties\":{\"status\":{\"type\":\"string\",\"const\":\"upstream_failure\"},\"variantId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"status\",\"variantId\"]}]}}},\"required\":[\"coverage\",\"results\"]},\"CreatePublicRunResponse\":{\"type\":\"object\",\"properties\":{\"accepted\":{\"type\":\"boolean\"},\"replayed\":{\"type\":\"boolean\"},\"workflowRunId\":{\"type\":\"string\"},\"run\":{\"$ref\":\"#/$defs/PublicRun\"}},\"required\":[\"accepted\",\"replayed\",\"workflowRunId\",\"run\"]},\"DeclaredAssociations\":{\"type\":\"object\",\"properties\":{\"associations\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"colourwayCount\":{\"description\":\"The eligible variants of this association's product, the set `list_variants` pages, so a follow-up list returns this many. Absent when the product has no eligible variant.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"declared\":{\"type\":\"object\",\"properties\":{\"basis\":{\"type\":\"string\",\"const\":\"manufacturer_declared\",\"description\":\"The manufacturer enumerated this association in their own catalog data.\"},\"confidence\":{\"type\":\"number\",\"description\":\"The stored confidence for this edge. A FIXED convention value (0.9) for warehouse-declared associations, not a measurement — never present it as a per-edge score or use it to rank.\"},\"source\":{\"type\":\"string\",\"const\":\"warehouse\",\"description\":\"The provenance recorded on the edge: the manufacturer catalog warehouse feed.\"}},\"required\":[\"basis\",\"confidence\",\"source\"]},\"imageUrl\":{\"description\":\"Canonical thumbnail (same policy as siblings/pairings); null when there is none.\",\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productTypeReceipt\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"proposedProductTypes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"confidence\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"displayName\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"minLength\":1},\"isPrimary\":{\"type\":\"boolean\"},\"scope\":{\"type\":\"string\",\"enum\":[\"variant\",\"product\"]},\"sourceUrl\":{\"type\":[\"string\",\"null\"]}},\"required\":[",
78
78
  "\"confidence\",\"displayName\",\"id\",\"isPrimary\",\"scope\",\"sourceUrl\"]}},\"state\":{\"type\":\"string\",\"const\":\"accepted\"}},\"required\":[\"proposedProductTypes\",\"state\"]},{\"type\":\"object\",\"properties\":{\"proposedProductTypes\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"confidence\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"displayName\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"minLength\":1},\"isPrimary\":{\"type\":\"boolean\"},\"scope\":{\"type\":\"string\",\"enum\":[\"variant\",\"product\"]},\"sourceUrl\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"confidence\",\"displayName\",\"id\",\"isPrimary\",\"scope\",\"sourceUrl\"]}},\"state\":{\"type\":\"string\",\"const\":\"proposed\"}},\"required\":[\"proposedProductTypes\",\"state\"]},{\"type\":\"object\",\"properties\":{\"proposedProductTypes\":{\"minItems\":0,\"maxItems\":0,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"confidence\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"displayName\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"minLength\":1},\"isPrimary\":{\"type\":\"boolean\"},\"scope\":{\"type\":\"string\",\"enum\":[\"variant\",\"product\"]},\"sourceUrl\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"confidence\",\"displayName\",\"id\",\"isPrimary\",\"scope\",\"sourceUrl\"]}},\"state\":{\"type\":\"string\",\"const\":\"unknown\"}},\"required\":[\"proposedProductTypes\",\"state\"]}]},\"kindLabel\":{\"description\":\"The accepted display category (the variant's primary product type), for a card's kind pill. Null when none is accepted; never a proposal.\",\"type\":[\"string\",\"null\"]},\"priceTier\":{\"description\":\"The variant's accepted `price_tier` term (`$` to `$$$$$`). Absent means unknown, never cheap.\",\"type\":\"string\"},\"relation\":{\"type\":\"string\",\"const\":\"applicable_finish\"},\"role\":{\"type\":\"string\",\"enum\":[\"finish\",\"product\"]},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"declared\",\"imageUrl\",\"product\",\"productTypeReceipt\",\"kindLabel\",\"relation\",\"role\",\"variantId\",\"variantName\"]}},\"kind\":{\"type\":\"string\",\"const\":\"declared_association\",\"description\":\"Constant discriminator. These are manufacturer-declared facts; `/pairings` items are inferred companionship. Never merge the two sets.\"},\"nextCursor\":{\"description\":\"Opaque continuation for the same subject, direction and corpus scope; absent on the last page.\",\"type\":\"string\"},\"returnedCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"How many associations this page carries.\"},\"subject\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"product\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"product\",\"variantId\",\"variantName\"]},\"totalAssociations\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"The TRUE number of declared associations for this subject and direction under the requested corpus scope, not the size of this page. Safe to render as \\\"Compatible Finishes (N)\\\"; `associations` is one page of that set, so walk `nextCursor` before making any claim about the whole set.\"}},\"required\":[\"associations\",\"kind\",\"returnedCount\",\"subject\",\"totalAssociations\"]},\"ExtractPaletteResponse\":{\"type\":\"object\",\"properties\":{\"palette\":{\"description\":\"The extracted palette, or null when extraction found no usable colour.\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"colors\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"proportion\":{\"type\":\"number\"}},\"required\":[\"hex\",\"name\",\"proportion\"]},\"description\":\"Named palette swatches, most dominant first.\"},\"dominant\":{\"description\":\"The dominant colour, or null when none could be derived.\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"family\":{\"type\":\"string\",\"description\":\"Coarse hue family, e.g. 'green'.\"},\"hex\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"oklch\":{\"type\":\"string\",\"description\":\"OKLCH string, e.g. 'oklch(",
79
- "72% 0.040 145)'.\"}},\"required\":[\"family\",\"hex\",\"name\",\"oklch\"]},{\"type\":\"null\"}]},\"mood\":{\"type\":\"string\",\"description\":\"A one-word read of the palette, e.g. \\\"muted\\\", \\\"vibrant\\\", \\\"dark\\\".\"}},\"required\":[\"colors\",\"dominant\",\"mood\"]},{\"type\":\"null\"}]}},\"required\":[\"palette\"]},\"FindVariantsByColourResponse\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"gatedOut\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Colour-matched candidates dropped by list_variants' hard filters or eligibility.\"},\"matches\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandId\":{\"type\":\"string\"},\"category\":{\"type\":\"string\"},\"code\":{\"type\":[\"string\",\"null\"]},\"colours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"distance\":{\"type\":\"number\",\"description\":\"OKLab distance to the matched swatch. Never a probability.\"},\"hex\":{\"type\":\"string\"},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Position in the request's `colours[]`.\"},\"proportion\":{\"type\":\"number\",\"description\":\"The matched swatch's share of its image, 0 to 1.\"},\"target\":{\"description\":\"Requested target share, palette only; null otherwise. Ranked by, not filtered.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"distance\",\"hex\",\"index\",\"proportion\",\"target\"]}},\"coverage\":{\"type\":\"number\",\"description\":\"Share of the request's colours this variant matched, 0 to 1. Never a probability.\"},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":\"string\"}},\"required\":[\"brand\",\"brandId\",\"category\",\"code\",\"colours\",\"coverage\",\"imageUrl\",\"product\",\"productId\",\"variantId\",\"variantName\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"endCursor\":{\"type\":[\"string\",\"null\"]},\"hasNextPage\":{\"type\":\"boolean\"},\"poolTruncated\":{\"type\":\"boolean\",\"description\":\"True when matches exist past the checked pool: add productTypeIds or brands.\"}},\"required\":[\"endCursor\",\"hasNextPage\",\"poolTruncated\"]},\"resolvedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"catalogueVariant\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"color\",\"imageUrl\",\"product\",\"variantId\",\"variantName\"]},{\"type\":\"null\"}]},\"hex\":{\"type\":\"string\"},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"enum\":[\"point\",\"region\"],\"description\":\"region: a named meaning's own OKLCh bounds, kept — never collapsed to one hex.\"},\"share\":{\"description\":\"Renormalised share, image-extracted colours only; else null.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"catalogueVariant\",\"hex\",\"index\",\"kind\",\"share\"]}},\"unresolvedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"alternatives\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"libraryId\":{\"type\":\"string\"},\"libraryName\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"query\":{\"type\":\"string\"}},\"required\":[\"hex\",\"libraryId\",\"libraryName\",\"name\",\"query\"]}},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"input\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"alternatives\",\"index\",\"input\"]}},\"mode\":{\"type\":\"string\",\"const\":\"contains\"}},\"required\":[\"gatedOut\",\"matches\",\"pageInfo\",\"resolvedColours\",\"unresolvedColours\",\"mode\"]},{\"type\":\"object\",\"properties\":{\"gatedOut\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Colour-matched candidates dropped by list_variants' hard filters or eligibility.\"},\"matches\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandId\":{\"type\":\"string\"},\"category\":{\"type\":\"string\"},\"code\":{\"type\":[\"string\",\"null\"]},\"colours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"distance\":{\"type\":\"number\",\"description\":\"O",
80
- "KLab distance to the matched swatch. Never a probability.\"},\"hex\":{\"type\":\"string\"},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Position in the request's `colours[]`.\"},\"proportion\":{\"type\":\"number\",\"description\":\"The matched swatch's share of its image, 0 to 1.\"},\"target\":{\"description\":\"Requested target share, palette only; null otherwise. Ranked by, not filtered.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"distance\",\"hex\",\"index\",\"proportion\",\"target\"]}},\"coverage\":{\"type\":\"number\",\"description\":\"Share of the request's colours this variant matched, 0 to 1. Never a probability.\"},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":\"string\"}},\"required\":[\"brand\",\"brandId\",\"category\",\"code\",\"colours\",\"coverage\",\"imageUrl\",\"product\",\"productId\",\"variantId\",\"variantName\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"endCursor\":{\"type\":[\"string\",\"null\"]},\"hasNextPage\":{\"type\":\"boolean\"},\"poolTruncated\":{\"type\":\"boolean\",\"description\":\"True when matches exist past the checked pool: add productTypeIds or brands.\"}},\"required\":[\"endCursor\",\"hasNextPage\",\"poolTruncated\"]},\"resolvedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"catalogueVariant\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"color\",\"imageUrl\",\"product\",\"variantId\",\"variantName\"]},{\"type\":\"null\"}]},\"hex\":{\"type\":\"string\"},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"enum\":[\"point\",\"region\"],\"description\":\"region: a named meaning's own OKLCh bounds, kept — never collapsed to one hex.\"},\"share\":{\"description\":\"Renormalised share, image-extracted colours only; else null.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"catalogueVariant\",\"hex\",\"index\",\"kind\",\"share\"]}},\"unresolvedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"alternatives\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"libraryId\":{\"type\":\"string\"},\"libraryName\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"query\":{\"type\":\"string\"}},\"required\":[\"hex\",\"libraryId\",\"libraryName\",\"name\",\"query\"]}},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"input\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"alternatives\",\"index\",\"input\"]}},\"mode\":{\"type\":\"string\",\"const\":\"palette\"}},\"required\":[\"gatedOut\",\"matches\",\"pageInfo\",\"resolvedColours\",\"unresolvedColours\",\"mode\"]},{\"type\":\"object\",\"properties\":{\"corpusScope\":{\"description\":\"The corpus the ranked candidates were drawn from — present ONLY when the request narrowed it. ABSENT means the whole graph. The reference is resolved unscoped either way.\",\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\",\"description\":\"What the scope admits, in one sentence, for a human reader.\"},\"scope\":{\"type\":\"string\",\"enum\":[\"all\",\"samplizeCatalogue\",\"materialBankOrderable\",\"materialBankNaOrderable\",\"materialBankNaAndCatalogue\",\"materialBankEuOrderable\",\"designShopOrderable\"],\"description\":\"Which corpus to answer from. samplizeCatalogue admits published US paint colours regardless of stock. ABSENT (or 'all') means the WHOLE GRAPH — every material MaterialGraph knows, orderable or not; absence is never a narrower default. Three transaction-oriented scopes gate on governed CHANNEL membership: 'materialBankNaOrderable' (Material Bank North America, ~277,000 materials), 'materialBankEuOrderable' (Material Bank Europe, ~65,000) and 'designShopOrderable' (DesignShop, ~34,000, with the products DesignShop hides from browse excluded). 'materialBankNaAndCatalogue' is the one-query union of Material Bank North America and the governed Catalogue editorial discovery corpus; that union does not by itself claim every member is transactable. 'materialBankOrderabl",
81
- "e' is NOT one of them: it selects materials carrying a Material Bank identity, which is a provenance signal rather than a channel one, and it admits 98.4% of the graph — use it to exclude crawl-sourced brands, not to mean orderable. A scope answers membership in its named governed corpus, never suitability: scope on channel, then refine on sector. Every scope is applied INSIDE the query: `limit` fills with eligible rows and `counts` describe the scoped corpus, which post-filtering a page cannot give you. An unknown value is a 400 naming it, never a silent fall back to the whole graph.\"}},\"required\":[\"description\",\"scope\"]},\"excludedByCorpusScope\":{\"description\":\"Real variant ids outside `corpusScope` or the materials catalogue.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"reference\":{\"type\":\"object\",\"properties\":{\"candidates\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandSlug\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"brandSlug\",\"color\",\"imageUrl\",\"product\",\"productId\",\"variantId\",\"variantName\"]}},\"colour\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"name\":{\"type\":[\"string\",\"null\"]},\"ref\":{\"type\":\"string\"}},\"required\":[\"hex\",\"name\",\"ref\"]},{\"type\":\"null\"}]},\"input\":{\"type\":\"object\",\"properties\":{\"colour\":{\"type\":\"string\"},\"material\":{\"type\":\"string\"},\"oklab\":{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"}},\"required\":[\"L\",\"a\",\"b\"]},\"variantId\":{\"type\":\"string\"}}},\"resolution\":{\"type\":\"string\",\"enum\":[\"resolved\",\"ambiguous\"]},\"seed\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandSlug\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"brandSlug\",\"color\",\"imageUrl\",\"product\",\"productId\",\"variantId\",\"variantName\"]},{\"type\":\"null\"}]}},\"required\":[\"candidates\",\"colour\",\"input\",\"resolution\",\"seed\"]},\"unresolved\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"matches\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandId\":{\"type\":\"string\"},\"code\":{\"type\":[\"string\",\"null\"]},\"colourSimilarity\":{\"type\":[\"number\",\"null\"]},\"distance\":{\"type\":[\"number\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"brandId\",\"code\",\"colourSimilarity\",\"distance\",\"imageUrl\",\"product\",\"productId\",\"variantId\",\"variantName\"]}},\"mode\":{\"type\":\"string\",\"const\":\"rerank\"},\"resolvedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"catalogueVariant\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"color\",\"imageUrl\",\"product\",\"variantId\",\"variantName\"]},{\"type\":\"null\"}]},\"hex\":{\"type\":\"string\"},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"enum\":[\"point\",\"region\"],\"description\":\"region: a named meaning's own OKLCh bounds, kept — never collapsed to one hex.\"},\"share\":{\"description\":\"Renormalised share, image-extracted colours only; else null.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"catalogueVariant\",\"hex\",\"index\",\"kind\",\"share\"]}}},\"required\":[\"reference\",\"unresolved\",\"matches\",\"mode\",\"resolvedColours\"]}]},\"FindVariantsByVectorResponse\":{\"type\":\"object\",\"properties\":{\"excludedByCorpusScope\":{\"description\":\"Filtered variant ids outside the materials catalogue.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"category\":{\"type\":\"",
82
- "string\"},\"code\":{\"type\":[\"string\",\"null\"]},\"image\":{\"type\":[\"string\",\"null\"]},\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"materialBankId\":{\"type\":[\"string\",\"null\"]},\"name\":{\"type\":\"string\"},\"notApplicable\":{\"type\":\"object\",\"properties\":{\"attributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"description\":\"Requested blocks or attributes this product type does not carry.\"},\"preference\":{\"type\":\"object\",\"properties\":{\"matched\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"score\":{\"type\":\"number\"}},\"required\":[\"matched\",\"score\"]},\"product\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"specifications\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema0\"}}},\"url\":{\"type\":[\"string\",\"null\"]},\"variantCount\":{\"description\":\"Eligible variants of this product. Absent: none counted.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"variantId\":{\"type\":\"string\"},\"similarity\":{\"type\":\"number\",\"description\":\"Voyage cosine to the query. Ranks only; not a probability.\"}},\"required\":[\"category\",\"code\",\"brand\",\"materialBankId\",\"name\",\"product\",\"variantId\",\"similarity\"]}},\"mode\":{\"type\":\"string\",\"enum\":[\"text\",\"image\",\"text_and_image\"]},\"reference\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"url\",\"assetId\",\"variantId\",\"sourceId\"]}},\"required\":[\"id\",\"kind\"]},{\"type\":\"null\"}]},\"scan\":{\"type\":\"object\",\"properties\":{\"exhausted\":{\"type\":\"boolean\",\"description\":\"True when no further candidates match; false means more may exist.\"},\"read\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"rejected\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"route\":{\"type\":\"string\",\"enum\":[\"lane\",\"metadata\",\"allowlist\"]}},\"required\":[\"exhausted\",\"read\",\"rejected\",\"route\"]},\"timings\":{\"type\":\"object\",\"properties\":{\"embedMs\":{\"type\":\"number\"},\"filterMs\":{\"type\":\"number\"},\"referenceMs\":{\"type\":\"number\"},\"totalMs\":{\"type\":\"number\"},\"vectorMs\":{\"type\":\"number\"},\"verifyMs\":{\"type\":\"number\"}},\"required\":[\"embedMs\",\"filterMs\",\"referenceMs\",\"totalMs\",\"vectorMs\",\"verifyMs\"]},\"unresolvedVariantIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"unstated\":{\"description\":\"Filtered attributes no variant in scope states at all.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"items\",\"mode\",\"reference\",\"scan\",\"timings\"]},\"GetCategoryResponse\":{\"type\":\"object\",\"properties\":{\"aliases\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"ancestors\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]}},\"children\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]}},\"description\":{\"type\":[\"string\",\"null\"]},\"formerNames\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"id\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"group\",\"product_type\"]},\"name\":{\"type\":\"string\"},\"productCategory\":{\"type\":\"object\",\"properties\":{\"concepts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"label\":{\"type\":\"string\"},\"match\":{\"description\":\"How the concept relates to this product type; absent for groups.\",\"type\":\"string\",\"enum\":[\"exact\",\"close\",\"broad\",\"narrow\"]},\"termId\":{\"type\":\"string\"},\"uri\":{\"type\":\"string\"}},\"required\":[\"label\",\"termId\",\"uri\"]}},\"recordValue\":{\"description\":\"The product_category a record holds when the category fixes it.\",\"type\":[\"string\",\"null\"]},\"status\":{\"type\":\"string\",\"enum\":[\"mapped\",\"conditional\",\"unmapped\"],\"description\":\"mapped: fixed by category; conditional: per record; unmapped: none.\"}},\"required\":[\"concepts\",\"recordValue\",\"status\"]}},\"required\":[\"aliases\",\"ancestors\",\"children\",\"description\",\"formerNames\",\"id\",\"kind\",\"name\",\"productCategory\"]},\"GetVariantResponse\":{\"type\":\"object\",\"properties",
83
- "\":{\"category\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"],\"description\":\"The primary product type.\"},\"code\":{\"description\":\"The brand's item code.\",\"type\":[\"string\",\"null\"]},\"image\":{\"description\":\"The primary product image, or null when there is none.\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"alt\":{\"type\":\"string\"},\"url\":{\"type\":\"string\"}},\"required\":[\"alt\",\"url\"]},{\"type\":\"null\"}]},\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"],\"description\":\"The brand. `id` is the slug get_brand takes.\"},\"name\":{\"type\":\"string\",\"description\":\"The variant's own name.\"},\"product\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"url\":{\"description\":\"The brand's page for it, or null when none is known.\",\"type\":[\"string\",\"null\"]},\"variantId\":{\"type\":\"string\"},\"materialBankId\":{\"description\":\"The variant's Material Bank SKU. Absent: none recorded.\",\"type\":\"string\"},\"notApplicable\":{\"type\":\"object\",\"properties\":{\"attributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"description\":\"Requested blocks or attributes this product type does not carry.\"},\"specifications\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema0\"}}}},\"required\":[\"category\",\"code\",\"image\",\"brand\",\"name\",\"product\",\"url\",\"variantId\"]},\"ListAttributesResponse\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"blockIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"description\":{\"type\":\"string\"},\"dictionaryId\":{\"type\":[\"string\",\"null\"]},\"filterOps\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"in\",\"not_in\",\"all\",\"exists\",\"missing\",\"eq\",\"gt\",\"gte\",\"lt\",\"lte\"]},\"description\":\"list_variants ops; empty when it cannot filter on it.\"},\"filterable\":{\"type\":\"boolean\"},\"id\":{\"type\":\"string\"},\"match\":{\"description\":\"Present only when the page answers a query.\",\"type\":\"object\",\"properties\":{\"distance\":{\"description\":\"Fuse distance, 0 best.\",\"type\":\"number\"},\"matchedText\":{\"type\":[\"string\",\"null\"]},\"method\":{\"type\":\"string\",\"enum\":[\"exact\",\"alias\",\"fuzzy\",\"vector\"]},\"similarity\":{\"description\":\"Cosine similarity, 1 best.\",\"type\":\"number\"},\"valueId\":{\"description\":\"The dictionary term matchedText named exactly or by alias; present only for a value-tier match.\",\"type\":\"string\"}},\"required\":[\"matchedText\",\"method\"]},\"name\":{\"type\":\"string\"},\"statedBy\":{\"description\":\"Live variants in the categories stating this; absent without categoryIds.\",\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"unitId\":{\"type\":[\"string\",\"null\"]},\"valueKind\":{\"type\":\"string\"}},\"required\":[\"blockIds\",\"description\",\"dictionaryId\",\"filterOps\",\"filterable\",\"id\",\"name\",\"unitId\",\"valueKind\"]}},\"liveVariants\":{\"description\":\"Live variants across the requested categories; absent without categoryIds.\",\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"outsideScope\":{\"description\":\"Page one only: matches outside blockIds ranking above the best item.\",\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"blockIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"blockIds\",\"id\",\"name\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"endCursor\":{\"type\":[\"string\",\"null\"]},\"hasNextPage\":{\"type\":\"boolean\"}},\"required\":[\"endCursor\",\"hasNextPage\"]}},\"required\":[\"items\",\"pageInfo\"]},\"ListCategoriesResponse\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hasChildren\":{\"type\":\"boolean\"},\"id\":{\"type\":\"string\"},\"match\":{\"description\":\"Present only when the page answers a query.\",\"type\":\"object\",\"properties\":{\"matchedText\":{\"type\":[\"string\",\"null\"]},\"method\":{\"type\":\"string\",\"enum\":[\"exact\",\"alias\",\"fuzzy\",\"vector\"]}},\"required\":[\"matchedText\",\"method\"]},\"name\":{\"type\":\"string\"},\"parentId\":{\"type\":[\"string\",\"null\"]}},\"requ",
84
- "ired\":[\"hasChildren\",\"id\",\"name\",\"parentId\"]}},\"notice\":{\"description\":\"Present only when the query is refused as a category.\",\"type\":\"string\"},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"nextCursor\":{\"type\":[\"string\",\"null\"]},\"returnedCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"totalMatches\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"nextCursor\",\"returnedCount\",\"totalMatches\"]}},\"required\":[\"items\",\"pageInfo\"]},\"ListEnumValuesResponse\":{\"type\":\"object\",\"properties\":{\"dictionaryId\":{\"type\":[\"string\",\"null\"]},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"definition\":{\"type\":[\"string\",\"null\"]},\"dictionaryId\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"match\":{\"type\":\"object\",\"properties\":{\"distance\":{\"type\":\"number\"},\"matchedText\":{\"type\":[\"string\",\"null\"]},\"method\":{\"type\":\"string\",\"enum\":[\"exact\",\"alias\",\"fuzzy\",\"vector\"]},\"resolvedFrom\":{\"type\":\"string\"},\"similarity\":{\"type\":\"number\"}},\"required\":[\"matchedText\",\"method\"]},\"valueId\":{\"type\":\"string\"}},\"required\":[\"attributeIds\",\"definition\",\"dictionaryId\",\"label\",\"valueId\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"endCursor\":{\"type\":[\"string\",\"null\"]},\"hasNextPage\":{\"type\":\"boolean\"}},\"required\":[\"endCursor\",\"hasNextPage\"]}},\"required\":[\"dictionaryId\",\"items\",\"pageInfo\"]},\"ListVariantFacetsResponse\":{\"type\":\"object\",\"properties\":{\"matchedVariantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"facets\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"missingVariantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"const\":\"categorical\"},\"values\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"value\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"variantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991}},\"required\":[\"value\",\"label\",\"variantCount\"]}},\"hasMoreValues\":{\"type\":\"boolean\"}},\"required\":[\"attributeId\",\"name\",\"missingVariantCount\",\"kind\",\"values\",\"hasMoreValues\"]},{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"missingVariantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"const\":\"boolean\"},\"values\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"value\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"variantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991}},\"required\":[\"value\",\"label\",\"variantCount\"]}},\"hasMoreValues\":{\"type\":\"boolean\"}},\"required\":[\"attributeId\",\"name\",\"missingVariantCount\",\"kind\",\"values\",\"hasMoreValues\"]},{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"missingVariantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"const\":\"numeric\"},\"min\":{\"type\":[\"number\",\"null\"]},\"max\":{\"type\":[\"number\",\"null\"]},\"unitId\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"attributeId\",\"name\",\"missingVariantCount\",\"kind\",\"min\",\"max\",\"unitId\"]}]}}},\"required\":[\"matchedVariantCount\",\"facets\"]},\"ListVariantsResponse\":{\"type\":\"object\",\"properties\":{\"excludedByCorpusScope\":{\"description\":\"Filtered variant ids outside the materials catalogue.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"category\":{\"type\":\"string\"},\"code\":{\"type\":[\"string\",\"null\"]},\"image\":{\"type\":[\"string\",\"null\"]},\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"materialBankId\":{\"description\":\"The variant's Material Bank SKU. Absent: none recorded.\",\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"notApplicable\":{\"type\":\"object\",\"properties\":{\"attributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"description\":\"Requested blocks or attributes this product type does not carry.",
85
- "\"},\"preference\":{\"type\":\"object\",\"properties\":{\"matched\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"score\":{\"type\":\"number\"}},\"required\":[\"matched\",\"score\"]},\"product\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"specifications\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema0\"}}},\"url\":{\"type\":[\"string\",\"null\"]},\"variantCount\":{\"description\":\"Eligible variants of this product. Absent: none counted.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"variantId\":{\"type\":\"string\"}},\"required\":[\"category\",\"code\",\"brand\",\"name\",\"product\",\"variantId\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"endCursor\":{\"type\":[\"string\",\"null\"]},\"hasNextPage\":{\"type\":\"boolean\"}},\"required\":[\"endCursor\",\"hasNextPage\"]},\"preferenceMatchesRemain\":{\"description\":\"False: nothing from this page on meets any optionalFilter.\",\"type\":\"boolean\"},\"unresolvedVariantIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"unstated\":{\"description\":\"Filtered attributes no variant in scope states at all.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"items\",\"pageInfo\"]},\"MatchMaterialResponse\":{\"type\":\"object\",\"properties\":{\"results\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"resultId\":{\"type\":\"string\",\"description\":\"This exact hit's attribution key — `<responseId>:<rank>`, where rank is 1-based within THIS response. Unique across pages, because each page is its own response with its own id. Store it verbatim next to the outcome; it is opaque, and `attribution.responseId` is the field to group by.\"},\"variantId\":{\"type\":\"string\"},\"brand\":{\"type\":\"string\"},\"product\":{\"type\":\"string\"},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"productId\":{\"type\":[\"string\",\"null\"]},\"materialBankId\":{\"description\":\"The variant's Material Bank SKU — the ONE EXTERNAL identifier on a result, in contrast to the OPAQUE `variantId`: it is the id you are expected to match against Material Bank's own catalogue (carts, ordering and analytics all key on it), so a result list can be joined without a second lookup. Populated by the search and by Match alike. ABSENT means no MB identity is known for the variant, never that the SKU cannot be ordered; presence is the orderability tell, absence is silence.\",\"type\":\"string\"},\"manufacturerCode\":{\"description\":\"The governed manufacturer/source-native item code from `variants.code` (for example \\\"GADLC02\\\"). Populated when the full-result retrieval source carries that canonical field; Match always hydrates it from the variant row. ABSENT means unknown or an older external serving projection, never an invented code. Independent of materialBankId.\",\"type\":\"string\"},\"projectSaveCapability\":{\"description\":\"Explicit source-governed permission to save this exact source-coded variant to a Project. ABSENT means unknown/not allowed; it is never inferred from the brand or name.\",\"type\":\"string\",\"const\":\"allowed\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"sourceStatus\":{\"description\":\"The governed data status supporting Project capture. ABSENT means unknown. Provisional data remains source-backed but is not a verified catalogue claim.\",\"type\":\"string\",\"const\":\"provisional\"},\"productType\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"variantName\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"imageSha256\":{\"description\":\"SHA-256 of the displayed image `imageUrl` points at, as a hex digest. Lets a caller key a cache or dedupe on the asset rather than its URL. ABSENT means no hash is on record, never that there is no image.\",\"type\":\"string\"},\"hasImage\":{\"type\":\"boolean\"},\"variantCount\":{\"description\":\"How many eligible variants the row's product has, the same set `list_variants` pages, so a follow-up list of the product returns this many: the card's \\\"12 colourways\\\". ABSENT means the product is unknown or has ",
86
- "no eligible variant.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"palette\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"`#rrggbb` of the swatch, as extracted from the product image.\"},\"name\":{\"description\":\"Stored human colour name for the swatch, when one was extracted.\",\"type\":[\"string\",\"null\"]},\"proportion\":{\"type\":\"number\",\"description\":\"The swatch's share of the analysed image, in [0,1].\"}},\"required\":[\"hex\",\"proportion\"]},\"description\":\"The material's main-image palette — the FULL stored palette, uncapped and in stored order. Colours are EXTRACTED FROM PRODUCT IMAGERY (visual likeness, never a declared colour specification). A one-swatch palette means the extractor found one colour — solid-colour materials are genuinely monochrome — never that the list was trimmed. This array is always present: EMPTY means nothing is on record (unknown), not 'this material has no colours'.\"},\"colourMeta\":{\"type\":\"object\",\"properties\":{\"dominantFamily\":{\"type\":\"string\"},\"dominantHex\":{\"type\":\"string\"},\"mood\":{\"type\":\"string\"}}},\"colourChip\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"`#rrggbb` to fill the chip with. EXTRACTED FROM the product image (a visual likeness), never a manufacturer-declared colour specification — surfaces must not present it as one.\"}},\"required\":[\"hex\"],\"description\":\"Present when this material's product imagery carries nothing beyond one colour, so a surface should render that colour rather than the photograph. Set for COATINGS (paints, primers, stains, floor coatings) whose stored palette quantises to a single swatch — a paint's photo is a flat fill, and the colour we hold structured beats a JPEG of it. ABSENT means the question was not established (unknown product type, unextracted or multi-swatch palette) and the image should be rendered; it NEVER asserts 'this is not a coating'.\"},\"attributes\":{\"description\":\"Resolved attribute values for the ids sent in `returnAttributes`, keyed by attribute id. ABSENT entirely when `returnAttributes` was not sent. A key present with `null` means this variant carries no accepted value for that attribute — absent is not empty and neither is null: the three states are distinct on purpose. Values resolve with the normal variant-over-product precedence.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\",\"items\":{\"type\":\"string\"}},{\"type\":\"null\"}]}},\"colourBand\":{\"description\":\"`colourDistance` as a word (identical / very close / close / related / different), or null when unmeasurable. Absent when the colour stage did not run.\",\"type\":[\"string\",\"null\"]},\"colourDistance\":{\"description\":\"Match only. OKLab earth mover's distance between the query crop's palette and this material's, reading both palettes' proportions, so a colour that is a small share of the product cannot carry the match. Under 0.1 the colour AGREES, and the page lists agreeing rows first. `null` means the material carries no stored palette — UNKNOWN colour, never 'no colour' and never 'distant'. Absent when the colour stage did not run.\",\"type\":[\"number\",\"null\"]},\"confidence\":{\"description\":\"Match only (MG-1031). How close this material is to the query, as an ABSOLUTE image-space similarity in [0,1], not adjusted for colour — the same unit as `qualityFloor` and `comparison.bestRejected`, so all three can be drawn on one axis. Never normalised against the page, so the number means the same thing across runs. It is the TRUE value and may reach 1; rendering it so that no card claims '100%' is the consumer's job (round toward zero, or show '99%+'). Capping it here would put it on a different ceiling from `bestRejected`, which publishes the same unit uncapped. A Match page is ordered by colour agreement (`colourDistance` under 0.1, then unmeasured, then the rest) and then by this number, so inside each of those sets it never rises down the page. Distinct from `score`, which is the retrieval score on the `[0, maxScore]` scale and does not order a Match p",
87
- "age. Absent outside Match.\",\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"confidenceBand\":{\"description\":\"`confidence` as a word, banded on the engine's measured readings (strong >= 0.85, good >= 0.72, fair >= 0.55 = the default quality floor, weak below it and reachable only under `includeBelowFloor`). Present exactly when `confidence` is.\",\"type\":\"string\",\"enum\":[\"strong\",\"good\",\"fair\",\"weak\"]},\"score\":{\"type\":\"number\",\"description\":\"The selected mode's weighted primary score on the `[0, maxScore]` scale. On a Match page this is the retrieval score and does NOT order the page; the order is colour agreement, then `confidence`.\"},\"signals\":{\"description\":\"Match only: the measured image similarity the row carries.\",\"type\":\"object\",\"properties\":{\"image\":{\"description\":\"Image-space cosine between the query image and this row's image, in [0,1]. Null when it was not measured.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"image\"]},\"retired\":{\"description\":\"MB lists the SKU as not visible/retired; demoted in ranking. Omitted when false.\",\"type\":\"boolean\"},\"belowFloor\":{\"description\":\"Present (true) only on quality-floor rejects returned under includeBelowFloor — the item failed the match image-quality floor and would be dropped by default.\",\"type\":\"boolean\"},\"admittedOnColour\":{\"description\":\"Present (true) only on Match rows the colour probe admitted: this material is as close in colour as the catalogue gets, and its image similarity is BELOW the match quality floor by design. It is on the page because no image-retrieved row is nearer in colour, not because it cleared the floor — so a consumer can present it as a colour answer or suppress it knowingly, and a quality check can tell a designed admission from a genuine floor leak. Absent (never false) on rows that came through image retrieval. Distinct from `belowFloor`, which marks rejects returned only under `includeBelowFloor`.\",\"type\":\"boolean\"}},\"required\":[\"variantId\",\"brand\",\"product\",\"brandSlug\",\"productId\",\"color\",\"variantName\",\"imageUrl\",\"hasImage\",\"palette\",\"score\"]}},\"inferredCategories\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"productTypeId\":{\"type\":\"string\"},\"displayName\":{\"type\":\"string\"},\"boost\":{\"type\":\"number\"}},\"required\":[\"productTypeId\",\"displayName\",\"boost\"]}},\"qualityFloor\":{\"type\":\"number\",\"description\":\"Minimum image similarity a candidate had to clear, in [0,1]. Same unit as `bestRejected` and each result's `confidence`.\"},\"poolSize\":{\"type\":\"number\"},\"droppedBelowFloor\":{\"type\":\"number\"},\"droppedAsDuplicateProduct\":{\"type\":\"number\"},\"bestRejected\":{\"description\":\"The closest candidate the quality floor rejected, in the same unit as `qualityFloor`. Turns an empty result set into a finding: 'the closest thing we hold read 0.48 against a 0.55 bar'. Absent when nothing was rejected.\",\"type\":[\"number\",\"null\"]},\"maxScore\":{\"type\":\"number\",\"description\":\"The maximum score achievable under the weights this query ran — `score`'s denominator. NOT `confidence`'s scale.\"},\"colour\":{\"description\":\"Per-candidate colour readings against the query image, in `results` order. Null means the colour stage DID NOT RUN — never 'no colour'.\",\"anyOf\":[{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"variantId\":{\"type\":\"string\"},\"colourDistance\":{\"type\":[\"number\",\"null\"]},\"colourBand\":{\"type\":[\"string\",\"null\"]},\"measurable\":{\"type\":\"boolean\"}},\"required\":[\"variantId\",\"colourDistance\",\"colourBand\",\"measurable\"]}},{\"type\":\"null\"}]},\"segmentPalette\":{\"description\":\"The query image's own palette — what colour was compared against.\",\"anyOf\":[{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"proportion\":{\"type\":\"number\"}},\"required\":[\"hex\",\"proportion\"]}},{\"type\":\"null\"}]},\"note\":{\"type\":\"string\"}},\"required\":[\"results\",\"inferredCategories\",\"qualityFloor\",\"poolSize\",\"droppedBelowFloor\",\"droppedAsDuplicateProduct\",\"maxScore\"]},\"MatchWorkflowResponse\":{\"type\":\"object\",\"properties\":{\"imageType\":{\"type\":\"string\",\"enum\":[\"swatch\",\"installation\",\"flatplan\"],\"description\":\"What the image classifier read: a single material, a room, or a flatplan.\"},",
88
- "\"surfaces\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"surface\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"}},\"required\":[\"id\"],\"description\":\"Stable surface id within this response.\"},\"status\":{\"type\":\"string\",\"enum\":[\"pending\",\"matching\",\"complete\",\"error\",\"colour_fallback\"],\"description\":\"Terminal states only on a finished response; `colour_fallback` means the crop was too small to read texture and the rows were answered on colour plus category.\"},\"results\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"resultId\":{\"type\":\"string\",\"description\":\"This exact hit's attribution key — `<responseId>:<rank>`, where rank is 1-based within THIS response. Unique across pages, because each page is its own response with its own id. Store it verbatim next to the outcome; it is opaque, and `attribution.responseId` is the field to group by.\"},\"variantId\":{\"type\":\"string\"},\"brand\":{\"type\":\"string\"},\"product\":{\"type\":\"string\"},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"productId\":{\"type\":[\"string\",\"null\"]},\"materialBankId\":{\"description\":\"The variant's Material Bank SKU — the ONE EXTERNAL identifier on a result, in contrast to the OPAQUE `variantId`: it is the id you are expected to match against Material Bank's own catalogue (carts, ordering and analytics all key on it), so a result list can be joined without a second lookup. Populated by the search and by Match alike. ABSENT means no MB identity is known for the variant, never that the SKU cannot be ordered; presence is the orderability tell, absence is silence.\",\"type\":\"string\"},\"manufacturerCode\":{\"description\":\"The governed manufacturer/source-native item code from `variants.code` (for example \\\"GADLC02\\\"). Populated when the full-result retrieval source carries that canonical field; Match always hydrates it from the variant row. ABSENT means unknown or an older external serving projection, never an invented code. Independent of materialBankId.\",\"type\":\"string\"},\"projectSaveCapability\":{\"description\":\"Explicit source-governed permission to save this exact source-coded variant to a Project. ABSENT means unknown/not allowed; it is never inferred from the brand or name.\",\"type\":\"string\",\"const\":\"allowed\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"sourceStatus\":{\"description\":\"The governed data status supporting Project capture. ABSENT means unknown. Provisional data remains source-backed but is not a verified catalogue claim.\",\"type\":\"string\",\"const\":\"provisional\"},\"productType\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"variantName\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"imageSha256\":{\"description\":\"SHA-256 of the displayed image `imageUrl` points at, as a hex digest. Lets a caller key a cache or dedupe on the asset rather than its URL. ABSENT means no hash is on record, never that there is no image.\",\"type\":\"string\"},\"hasImage\":{\"type\":\"boolean\"},\"variantCount\":{\"description\":\"How many eligible variants the row's product has, the same set `list_variants` pages, so a follow-up list of the product returns this many: the card's \\\"12 colourways\\\". ABSENT means the product is unknown or has no eligible variant.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"palette\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"`#rrggbb` of the swatch, as extracted from the product image.\"},\"name\":{\"description\":\"Stored human colour name for the swatch, when one was extracted.\",\"type\":[\"string\",\"null\"]},\"proportion\":{\"type\":\"number\",\"description\":\"The swatch's share of the analysed image, in [0,1].\"}},\"required\":[\"hex\",\"proportion\"]},\"description\":\"The material's main-image palette — the FULL stored palette, uncapped and in stored order. Colours are EXTRACTED FROM PRODUCT IMAGERY (visual likeness, never a declared colour specification). A one-swatch palette means the extractor found one colour — solid-colour materials are genuinely monochrome — never that the list",
89
- " was trimmed. This array is always present: EMPTY means nothing is on record (unknown), not 'this material has no colours'.\"},\"colourMeta\":{\"type\":\"object\",\"properties\":{\"dominantFamily\":{\"type\":\"string\"},\"dominantHex\":{\"type\":\"string\"},\"mood\":{\"type\":\"string\"}}},\"colourChip\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"`#rrggbb` to fill the chip with. EXTRACTED FROM the product image (a visual likeness), never a manufacturer-declared colour specification — surfaces must not present it as one.\"}},\"required\":[\"hex\"],\"description\":\"Present when this material's product imagery carries nothing beyond one colour, so a surface should render that colour rather than the photograph. Set for COATINGS (paints, primers, stains, floor coatings) whose stored palette quantises to a single swatch — a paint's photo is a flat fill, and the colour we hold structured beats a JPEG of it. ABSENT means the question was not established (unknown product type, unextracted or multi-swatch palette) and the image should be rendered; it NEVER asserts 'this is not a coating'.\"},\"attributes\":{\"description\":\"Resolved attribute values for the ids sent in `returnAttributes`, keyed by attribute id. ABSENT entirely when `returnAttributes` was not sent. A key present with `null` means this variant carries no accepted value for that attribute — absent is not empty and neither is null: the three states are distinct on purpose. Values resolve with the normal variant-over-product precedence.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\",\"items\":{\"type\":\"string\"}},{\"type\":\"null\"}]}},\"colourBand\":{\"description\":\"`colourDistance` as a word (identical / very close / close / related / different), or null when unmeasurable. Absent when the colour stage did not run.\",\"type\":[\"string\",\"null\"]},\"colourDistance\":{\"description\":\"Match only. OKLab earth mover's distance between the query crop's palette and this material's, reading both palettes' proportions, so a colour that is a small share of the product cannot carry the match. Under 0.1 the colour AGREES, and the page lists agreeing rows first. `null` means the material carries no stored palette — UNKNOWN colour, never 'no colour' and never 'distant'. Absent when the colour stage did not run.\",\"type\":[\"number\",\"null\"]},\"confidence\":{\"description\":\"Match only (MG-1031). How close this material is to the query, as an ABSOLUTE image-space similarity in [0,1], not adjusted for colour — the same unit as `qualityFloor` and `comparison.bestRejected`, so all three can be drawn on one axis. Never normalised against the page, so the number means the same thing across runs. It is the TRUE value and may reach 1; rendering it so that no card claims '100%' is the consumer's job (round toward zero, or show '99%+'). Capping it here would put it on a different ceiling from `bestRejected`, which publishes the same unit uncapped. A Match page is ordered by colour agreement (`colourDistance` under 0.1, then unmeasured, then the rest) and then by this number, so inside each of those sets it never rises down the page. Distinct from `score`, which is the retrieval score on the `[0, maxScore]` scale and does not order a Match page. Absent outside Match.\",\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"confidenceBand\":{\"description\":\"`confidence` as a word, banded on the engine's measured readings (strong >= 0.85, good >= 0.72, fair >= 0.55 = the default quality floor, weak below it and reachable only under `includeBelowFloor`). Present exactly when `confidence` is.\",\"type\":\"string\",\"enum\":[\"strong\",\"good\",\"fair\",\"weak\"]},\"score\":{\"type\":\"number\",\"description\":\"The selected mode's weighted primary score on the `[0, maxScore]` scale. On a Match page this is the retrieval score and does NOT order the page; the order is colour agreement, then `confidence`.\"},\"signals\":{\"description\":\"Match only: the measured image similarity the row carries.\",\"type\":\"object\",\"properties\":{\"image\":{\"description\":\"Image-space cosine between the query image and this row's image, ",
90
- "in [0,1]. Null when it was not measured.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"image\"]},\"retired\":{\"description\":\"MB lists the SKU as not visible/retired; demoted in ranking. Omitted when false.\",\"type\":\"boolean\"},\"belowFloor\":{\"description\":\"Present (true) only on quality-floor rejects returned under includeBelowFloor — the item failed the match image-quality floor and would be dropped by default.\",\"type\":\"boolean\"},\"admittedOnColour\":{\"description\":\"Present (true) only on Match rows the colour probe admitted: this material is as close in colour as the catalogue gets, and its image similarity is BELOW the match quality floor by design. It is on the page because no image-retrieved row is nearer in colour, not because it cleared the floor — so a consumer can present it as a colour answer or suppress it knowingly, and a quality check can tell a designed admission from a genuine floor leak. Absent (never false) on rows that came through image retrieval. Distinct from `belowFloor`, which marks rejects returned only under `includeBelowFloor`.\",\"type\":\"boolean\"}},\"required\":[\"variantId\",\"brand\",\"product\",\"brandSlug\",\"productId\",\"color\",\"variantName\",\"imageUrl\",\"hasImage\",\"palette\",\"score\"]},\"description\":\"This surface's ranked hits, in the order shown.\"}},\"required\":[\"surface\",\"status\",\"results\"]},\"description\":\"One entry per detected surface, in detection order. Empty for a swatch run, which answers in top-level `results` instead.\"},\"results\":{\"description\":\"Top-level hits — present on the swatch shortcut, which detects no surfaces.\",\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"resultId\":{\"type\":\"string\",\"description\":\"This exact hit's attribution key — `<responseId>:<rank>`, where rank is 1-based within THIS response. Unique across pages, because each page is its own response with its own id. Store it verbatim next to the outcome; it is opaque, and `attribution.responseId` is the field to group by.\"},\"variantId\":{\"type\":\"string\"},\"brand\":{\"type\":\"string\"},\"product\":{\"type\":\"string\"},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"productId\":{\"type\":[\"string\",\"null\"]},\"materialBankId\":{\"description\":\"The variant's Material Bank SKU — the ONE EXTERNAL identifier on a result, in contrast to the OPAQUE `variantId`: it is the id you are expected to match against Material Bank's own catalogue (carts, ordering and analytics all key on it), so a result list can be joined without a second lookup. Populated by the search and by Match alike. ABSENT means no MB identity is known for the variant, never that the SKU cannot be ordered; presence is the orderability tell, absence is silence.\",\"type\":\"string\"},\"manufacturerCode\":{\"description\":\"The governed manufacturer/source-native item code from `variants.code` (for example \\\"GADLC02\\\"). Populated when the full-result retrieval source carries that canonical field; Match always hydrates it from the variant row. ABSENT means unknown or an older external serving projection, never an invented code. Independent of materialBankId.\",\"type\":\"string\"},\"projectSaveCapability\":{\"description\":\"Explicit source-governed permission to save this exact source-coded variant to a Project. ABSENT means unknown/not allowed; it is never inferred from the brand or name.\",\"type\":\"string\",\"const\":\"allowed\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"sourceStatus\":{\"description\":\"The governed data status supporting Project capture. ABSENT means unknown. Provisional data remains source-backed but is not a verified catalogue claim.\",\"type\":\"string\",\"const\":\"provisional\"},\"productType\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"variantName\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"imageSha256\":{\"description\":\"SHA-256 of the displayed image `imageUrl` points at, as a hex digest. Lets a caller key a cache or dedupe on the asset rather than its URL. ABSENT means no hash is on record, never that there is no image.\",\"type\":\"string\"},\"hasImage\":{\"type\":\"boolean\"},\"variantCoun",
91
- "t\":{\"description\":\"How many eligible variants the row's product has, the same set `list_variants` pages, so a follow-up list of the product returns this many: the card's \\\"12 colourways\\\". ABSENT means the product is unknown or has no eligible variant.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"palette\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"`#rrggbb` of the swatch, as extracted from the product image.\"},\"name\":{\"description\":\"Stored human colour name for the swatch, when one was extracted.\",\"type\":[\"string\",\"null\"]},\"proportion\":{\"type\":\"number\",\"description\":\"The swatch's share of the analysed image, in [0,1].\"}},\"required\":[\"hex\",\"proportion\"]},\"description\":\"The material's main-image palette — the FULL stored palette, uncapped and in stored order. Colours are EXTRACTED FROM PRODUCT IMAGERY (visual likeness, never a declared colour specification). A one-swatch palette means the extractor found one colour — solid-colour materials are genuinely monochrome — never that the list was trimmed. This array is always present: EMPTY means nothing is on record (unknown), not 'this material has no colours'.\"},\"colourMeta\":{\"type\":\"object\",\"properties\":{\"dominantFamily\":{\"type\":\"string\"},\"dominantHex\":{\"type\":\"string\"},\"mood\":{\"type\":\"string\"}}},\"colourChip\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"`#rrggbb` to fill the chip with. EXTRACTED FROM the product image (a visual likeness), never a manufacturer-declared colour specification — surfaces must not present it as one.\"}},\"required\":[\"hex\"],\"description\":\"Present when this material's product imagery carries nothing beyond one colour, so a surface should render that colour rather than the photograph. Set for COATINGS (paints, primers, stains, floor coatings) whose stored palette quantises to a single swatch — a paint's photo is a flat fill, and the colour we hold structured beats a JPEG of it. ABSENT means the question was not established (unknown product type, unextracted or multi-swatch palette) and the image should be rendered; it NEVER asserts 'this is not a coating'.\"},\"attributes\":{\"description\":\"Resolved attribute values for the ids sent in `returnAttributes`, keyed by attribute id. ABSENT entirely when `returnAttributes` was not sent. A key present with `null` means this variant carries no accepted value for that attribute — absent is not empty and neither is null: the three states are distinct on purpose. Values resolve with the normal variant-over-product precedence.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\",\"items\":{\"type\":\"string\"}},{\"type\":\"null\"}]}},\"colourBand\":{\"description\":\"`colourDistance` as a word (identical / very close / close / related / different), or null when unmeasurable. Absent when the colour stage did not run.\",\"type\":[\"string\",\"null\"]},\"colourDistance\":{\"description\":\"Match only. OKLab earth mover's distance between the query crop's palette and this material's, reading both palettes' proportions, so a colour that is a small share of the product cannot carry the match. Under 0.1 the colour AGREES, and the page lists agreeing rows first. `null` means the material carries no stored palette — UNKNOWN colour, never 'no colour' and never 'distant'. Absent when the colour stage did not run.\",\"type\":[\"number\",\"null\"]},\"confidence\":{\"description\":\"Match only (MG-1031). How close this material is to the query, as an ABSOLUTE image-space similarity in [0,1], not adjusted for colour — the same unit as `qualityFloor` and `comparison.bestRejected`, so all three can be drawn on one axis. Never normalised against the page, so the number means the same thing across runs. It is the TRUE value and may reach 1; rendering it so that no card claims '100%' is the consumer's job (round toward zero, or show '99%+'). Capping it here would put it on a different ceiling from `bestRejected`, which publishes the same unit uncapped. A Match page is ordered by colour agreement (`colourDistance` unde",
92
- "r 0.1, then unmeasured, then the rest) and then by this number, so inside each of those sets it never rises down the page. Distinct from `score`, which is the retrieval score on the `[0, maxScore]` scale and does not order a Match page. Absent outside Match.\",\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"confidenceBand\":{\"description\":\"`confidence` as a word, banded on the engine's measured readings (strong >= 0.85, good >= 0.72, fair >= 0.55 = the default quality floor, weak below it and reachable only under `includeBelowFloor`). Present exactly when `confidence` is.\",\"type\":\"string\",\"enum\":[\"strong\",\"good\",\"fair\",\"weak\"]},\"score\":{\"type\":\"number\",\"description\":\"The selected mode's weighted primary score on the `[0, maxScore]` scale. On a Match page this is the retrieval score and does NOT order the page; the order is colour agreement, then `confidence`.\"},\"signals\":{\"description\":\"Match only: the measured image similarity the row carries.\",\"type\":\"object\",\"properties\":{\"image\":{\"description\":\"Image-space cosine between the query image and this row's image, in [0,1]. Null when it was not measured.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"image\"]},\"retired\":{\"description\":\"MB lists the SKU as not visible/retired; demoted in ranking. Omitted when false.\",\"type\":\"boolean\"},\"belowFloor\":{\"description\":\"Present (true) only on quality-floor rejects returned under includeBelowFloor — the item failed the match image-quality floor and would be dropped by default.\",\"type\":\"boolean\"},\"admittedOnColour\":{\"description\":\"Present (true) only on Match rows the colour probe admitted: this material is as close in colour as the catalogue gets, and its image similarity is BELOW the match quality floor by design. It is on the page because no image-retrieved row is nearer in colour, not because it cleared the floor — so a consumer can present it as a colour answer or suppress it knowingly, and a quality check can tell a designed admission from a genuine floor leak. Absent (never false) on rows that came through image retrieval. Distinct from `belowFloor`, which marks rejects returned only under `includeBelowFloor`.\",\"type\":\"boolean\"}},\"required\":[\"variantId\",\"brand\",\"product\",\"brandSlug\",\"productId\",\"color\",\"variantName\",\"imageUrl\",\"hasImage\",\"palette\",\"score\"]}},\"inferredCategories\":{\"description\":\"Product-type names inferred from the query image.\",\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"productTypeId\":{\"type\":\"string\"},\"displayName\":{\"type\":\"string\"},\"boost\":{\"type\":\"number\"}},\"required\":[\"productTypeId\",\"displayName\",\"boost\"]}},\"totals\":{\"type\":\"object\",\"properties\":{\"surfacesDetected\":{\"type\":\"number\"},\"surfacesResolved\":{\"type\":\"number\"},\"surfacesFailed\":{\"type\":\"number\"},\"matchesSoFar\":{\"type\":\"number\"}},\"required\":[\"surfacesDetected\",\"surfacesResolved\",\"surfacesFailed\",\"matchesSoFar\"],\"description\":\"The run's tally, counted rather than inferred: `surfacesFailed > 0` with no results is a broken run, zero failures with no results is a genuine empty answer.\"},\"comparison\":{\"description\":\"What a swatch run compared against — the single-surface equivalent of a surface comparison.\",\"type\":\"object\",\"properties\":{\"poolSize\":{\"type\":\"number\"},\"droppedBelowFloor\":{\"type\":\"number\"},\"qualityFloor\":{\"type\":\"number\"},\"bestRejected\":{\"type\":[\"number\",\"null\"]}},\"required\":[\"poolSize\",\"droppedBelowFloor\",\"qualityFloor\"]},\"outcome\":{\"description\":\"How the run ended. Absent means `matched`.\",\"type\":\"string\",\"enum\":[\"matched\",\"no_surfaces\"]}},\"required\":[\"imageType\",\"surfaces\",\"totals\"]},\"MaterialBlockProjection\":{\"type\":\"object\",\"properties\":{\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"canonicalBlockId\":{\"type\":\"string\"},\"canonicalBlockName\":{\"type\":\"string\"},\"fields\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"confidence\":{\"type\":\"number\"},\"displayValue\":{\"description\":\"The value dictionary's label for a single-term `value`. Absent when no label is on record; `value` stays the canonical token.\",\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"sourceBasis\":{\"type\":\"string\"},\"status\":",
93
- "{\"type\":\"string\",\"enum\":[\"verified\",\"partial\",\"missing\",\"not_applicable\"]},\"unit\":{\"type\":\"string\"},\"value\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"number\"},{\"type\":\"boolean\"},{\"type\":\"array\",\"items\":{}},{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]}},\"required\":[\"attributeId\",\"label\",\"status\",\"value\"]}},\"missingAttributeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"status\":{\"type\":\"string\",\"enum\":[\"verified\",\"partial\",\"missing\",\"not_applicable\"]}},\"required\":[\"canonicalBlockId\",\"canonicalBlockName\",\"fields\",\"missingAttributeIds\",\"status\"]}},\"variantId\":{\"type\":\"string\"}},\"required\":[\"blocks\",\"variantId\"]},\"MaterialQueryPlanResponse\":{\"type\":\"object\",\"properties\":{\"cached\":{\"type\":\"boolean\",\"description\":\"True when the plan came from the plan cache.\"},\"correction\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"from\":{\"type\":\"string\",\"description\":\"The query as typed, normalised.\"},\"to\":{\"type\":\"string\",\"description\":\"The phrasing that was read: showing results for.\"},\"words\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"correction\":{\"type\":\"string\",\"minLength\":1},\"word\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"correction\",\"word\"]}}},\"required\":[\"from\",\"to\",\"words\"]},{\"type\":\"null\"}]},\"normalisedQuery\":{\"type\":\"string\"},\"plan\":{\"type\":\"object\",\"properties\":{\"brands\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"ids\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}},\"names\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}},\"phrase\":{\"type\":\"string\"}},\"required\":[\"ids\",\"names\",\"phrase\"]},{\"type\":\"null\"}]},\"category\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"label\":{\"type\":\"string\"},\"phrase\":{\"type\":\"string\"},\"productTypeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}}},\"required\":[\"label\",\"phrase\",\"productTypeIds\"]},{\"type\":\"null\"}]},\"colour\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"family12\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}},\"familyId\":{\"type\":\"string\",\"minLength\":1},\"hex\":{\"type\":\"string\",\"minLength\":1},\"oklab\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":3,\"maxItems\":3},\"phrase\":{\"type\":\"string\"}},\"required\":[\"family12\",\"familyId\",\"hex\",\"oklab\",\"phrase\"]},{\"type\":\"null\"}]},\"excludeBrands\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}},\"excludes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\",\"minLength\":1},\"phrase\":{\"type\":\"string\"},\"term\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"attributeId\",\"phrase\",\"term\"]}},\"leftover\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"Words left for the text query, in query order.\"},\"normalised\":{\"type\":\"string\"},\"softAlone\":{\"type\":\"boolean\",\"description\":\"True when nothing hard was read and no word was left, so the soft wants' words also go to text.\"},\"vendorColourNames\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"wants\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\",\"minLength\":1},\"fill\":{\"type\":\"number\",\"minimum\":0,\"description\":\"Share of the category's Variants that state this attribute.\"},\"phrase\":{\"type\":\"string\"},\"strength\":{\"type\":\"string\",\"enum\":[\"hard\",\"soft\"],\"description\":\"hard filters the page; soft only orders it, because too few Variants state the attribute.\"},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}}},\"required\":[\"attributeId\",\"fill\",\"phrase\",\"strength\",\"terms\"]}}},\"required\":[\"brands\",\"category\",\"colour\",\"excludeBrands\",\"excludes\",\"leftover\",\"normalised\",\"softAlone\",\"vendorColourNames\",\"wants\"]},\"rawQuery\":{\"type\":\"string\",\"minLength\":1},\"readingVersion\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The dictionaries' version the plan was read against.\"},\"requests\":{\"minItems\":1,\"maxItems\":1,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"cursor\":{\"description\":\"Opaque pagination token from the previous page of the same text. Pass it verbatim, or omit it for the first page.\",\"type\":\"string\",\"minLength\":1},\"limit\":{\"description\":\"Results in one page, at most 24. The search",
94
- "'s own page size when omitted.\",\"type\":\"integer\",\"minimum\":1,\"maximum\":24},\"text\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":500,\"description\":\"The ask to search, as the planner phrased it.\"},\"view\":{\"description\":\"\\\"card\\\" (default) for the lean projection, \\\"full\\\" for every result field.\",\"type\":\"string\",\"enum\":[\"card\",\"full\"]}},\"required\":[\"text\"]}},\"source\":{\"type\":\"string\",\"enum\":[\"dictionary\",\"jev\"],\"description\":\"Who read the plan: the dictionaries, or the background Jev reading.\"},\"version\":{\"type\":\"string\",\"const\":\"2\"}},\"required\":[\"cached\",\"correction\",\"normalisedQuery\",\"plan\",\"rawQuery\",\"readingVersion\",\"requests\",\"source\",\"version\"]},\"MaterialTile\":{\"type\":\"object\",\"properties\":{\"availability\":{\"type\":\"string\",\"enum\":[\"available\",\"discontinued\",\"superseded\",\"unknown\"],\"description\":\"Orderability: 'available' (listed in the catalog of record), 'discontinued' (withdrawn from that catalog — not a reviewed manufacturer-discontinuation claim), 'superseded' (a reviewed successor relationship exists and the material is no longer listed), 'unknown' (never checked).\"},\"brand\":{\"type\":\"string\"},\"category\":{\"type\":[\"string\",\"null\"]},\"colour\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":[\"number\",\"null\"]},\"dominantHex\":{\"type\":[\"string\",\"null\"]},\"hsl\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"h\":{\"type\":\"number\",\"minimum\":0,\"exclusiveMaximum\":360},\"l\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"s\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1}},\"required\":[\"h\",\"l\",\"s\"]},{\"type\":\"null\"}]},\"oklab\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"l\":{\"type\":\"number\"}},\"required\":[\"a\",\"b\",\"l\"]},{\"type\":\"null\"}]},\"sourceBasis\":{\"description\":\"Where `dominantHex` — and the `hsl` derived from it — came from: 'declared' is the brand's own published colour, 'derived' was read out of product imagery. It does NOT cover `oklab`, `chroma` or `vibrancy`: those are statistics of the IMAGE and stay measured whatever the hex says. Only the record read resolves this; a tile omits the key, and absent means unresolved, never 'declared'.\",\"type\":\"string\",\"enum\":[\"catalog_feed\",\"declared\",\"derived\"]},\"vibrancy\":{\"type\":[\"number\",\"null\"]}},\"required\":[\"chroma\",\"dominantHex\",\"hsl\",\"oklab\",\"vibrancy\"]},\"colourName\":{\"description\":\"The accepted Colour Name attribute — the colourway's true name where variants.name collapsed to the product's; absent means the attribute is absent (MG-940).\",\"type\":\"string\"},\"imageSource\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"r2\",\"origin\"]},{\"type\":\"null\"}]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"availability\",\"brand\",\"category\",\"colour\",\"imageSource\",\"imageUrl\",\"product\",\"variantId\",\"variantName\"]},\"PairingItem\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"inScope\":{\"type\":[\"boolean\",\"null\"]},\"brandSlug\":{\"type\":\"string\"},\"category\":{\"type\":[\"string\",\"null\"]},\"color\":{\"type\":[\"string\",\"null\"]},\"customerCount\":{\"type\":\"number\"},\"demand\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"momentum\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"percentChange\":{\"type\":[\"number\",\"null\"]},\"priorSpecCount\":{\"type\":\"number\"},\"state\":{\"type\":\"string\",\"enum\":[\"rising\",\"fading\",\"stable\",\"emerging\",\"insufficient_volume\"]},\"trailingSpecCount\":{\"type\":\"number\"}},\"required\":[\"percentChange\",\"priorSpecCount\",\"state\",\"trailingSpecCount\"]},{\"type\":\"null\"}]},\"projectCount\":{\"type\":\"number\"},\"specCount\":{\"type\":\"number\"}},\"required\":[\"momentum\",\"projectCount\",\"specCount\"]},{\"type\":\"null\"}]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"lift\":{\"type\":\"number\"},\"liftLabel\":{\"type\":\"string\"},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"projectCount\":{\"type\":\"number\"},\"relation\":{\"type\":\"string\",\"enum\":[\"companion\",\"brand_sibling\",\"colourway\"]},\"topProjectTypes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{",
95
- "\"projectCount\":{\"type\":\"number\"},\"projectType\":{\"type\":\"string\"}},\"required\":[\"projectCount\",\"projectType\"]}},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]},\"ranking\":{\"type\":\"object\",\"properties\":{\"anchorColourSimilarity\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"anchorColourSimilarityMeasurable\":{\"type\":\"boolean\"},\"basis\":{\"type\":\"string\",\"const\":\"dominant_colour_oklab\"},\"lightness\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"lightnessMeasurable\":{\"type\":\"boolean\"}},\"required\":[\"anchorColourSimilarity\",\"anchorColourSimilarityMeasurable\",\"basis\",\"lightness\",\"lightnessMeasurable\"]},\"source\":{\"type\":\"string\",\"const\":\"cospec\"}},\"required\":[\"brand\",\"brandSlug\",\"category\",\"color\",\"customerCount\",\"demand\",\"imageUrl\",\"lift\",\"liftLabel\",\"product\",\"productId\",\"projectCount\",\"topProjectTypes\",\"variantId\",\"variantName\",\"source\"]},{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"inScope\":{\"type\":[\"boolean\",\"null\"]},\"brandSlug\":{\"type\":\"string\"},\"category\":{\"type\":[\"string\",\"null\"]},\"color\":{\"type\":[\"string\",\"null\"]},\"customerCount\":{\"type\":\"number\"},\"demand\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"momentum\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"percentChange\":{\"type\":[\"number\",\"null\"]},\"priorSpecCount\":{\"type\":\"number\"},\"state\":{\"type\":\"string\",\"enum\":[\"rising\",\"fading\",\"stable\",\"emerging\",\"insufficient_volume\"]},\"trailingSpecCount\":{\"type\":\"number\"}},\"required\":[\"percentChange\",\"priorSpecCount\",\"state\",\"trailingSpecCount\"]},{\"type\":\"null\"}]},\"projectCount\":{\"type\":\"number\"},\"specCount\":{\"type\":\"number\"}},\"required\":[\"momentum\",\"projectCount\",\"specCount\"]},{\"type\":\"null\"}]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"lift\":{\"type\":\"number\"},\"liftLabel\":{\"type\":\"string\"},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"projectCount\":{\"type\":\"number\"},\"relation\":{\"type\":\"string\",\"enum\":[\"companion\",\"brand_sibling\",\"colourway\"]},\"topProjectTypes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"projectCount\":{\"type\":\"number\"},\"projectType\":{\"type\":\"string\"}},\"required\":[\"projectCount\",\"projectType\"]}},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]},\"ranking\":{\"type\":\"object\",\"properties\":{\"anchorColourSimilarity\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"anchorColourSimilarityMeasurable\":{\"type\":\"boolean\"},\"basis\":{\"type\":\"string\",\"const\":\"dominant_colour_oklab\"},\"lightness\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"lightnessMeasurable\":{\"type\":\"boolean\"}},\"required\":[\"anchorColourSimilarity\",\"anchorColourSimilarityMeasurable\",\"basis\",\"lightness\",\"lightnessMeasurable\"]},\"source\":{\"type\":\"string\",\"const\":\"considered\"}},\"required\":[\"brand\",\"brandSlug\",\"category\",\"color\",\"customerCount\",\"demand\",\"imageUrl\",\"lift\",\"liftLabel\",\"product\",\"productId\",\"projectCount\",\"topProjectTypes\",\"variantId\",\"variantName\",\"source\"]},{\"type\":\"object\",\"properties\":{\"availability\":{\"type\":\"string\",\"enum\":[\"available\",\"discontinued\",\"superseded\",\"unknown\"],\"description\":\"Orderability: 'available' (listed in the catalog of record), 'discontinued' (withdrawn from that catalog — not a reviewed manufacturer-discontinuation claim), 'superseded' (a reviewed successor relationship exists and the material is no longer listed), 'unknown' (never checked).\"},\"brand\":{\"type\":\"string\"},\"category\":{\"type\":[\"string\",\"null\"]},\"colour\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":[\"number\",\"null\"]},\"dominantHex\":{\"type\":[\"string\",\"null\"]},\"hsl\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"h\":{\"type\":\"number\",\"minimum\":0,\"exclusiveMaximum\":360},\"l\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"s\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1}},\"required\":[\"h\",\"l\",\"s\"]},{\"type\":\"null\"}]},\"oklab\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"l\":{\"type\":\"number\"}},\"required\":[\"a\",\"b\",\"l\"]},{\"type\":\"null\"}]},\"sourceBasis\":{\"description\":\"Where `dominantHex` — and the `hsl` derived from it — came from: 'declared' is the brand's own published colour, 'derived' was re",
96
- "ad out of product imagery. It does NOT cover `oklab`, `chroma` or `vibrancy`: those are statistics of the IMAGE and stay measured whatever the hex says. Only the record read resolves this; a tile omits the key, and absent means unresolved, never 'declared'.\",\"type\":\"string\",\"enum\":[\"catalog_feed\",\"declared\",\"derived\"]},\"vibrancy\":{\"type\":[\"number\",\"null\"]}},\"required\":[\"chroma\",\"dominantHex\",\"hsl\",\"oklab\",\"vibrancy\"]},\"colourName\":{\"description\":\"The accepted Colour Name attribute — the colourway's true name where variants.name collapsed to the product's; absent means the attribute is absent (MG-940).\",\"type\":\"string\"},\"imageSource\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"r2\",\"origin\"]},{\"type\":\"null\"}]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]},\"inScope\":{\"type\":[\"boolean\",\"null\"]},\"ranking\":{\"type\":\"object\",\"properties\":{\"anchorColourSimilarity\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"anchorColourSimilarityMeasurable\":{\"type\":\"boolean\"},\"basis\":{\"type\":\"string\",\"const\":\"dominant_colour_oklab\"},\"lightness\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"lightnessMeasurable\":{\"type\":\"boolean\"}},\"required\":[\"anchorColourSimilarity\",\"anchorColourSimilarityMeasurable\",\"basis\",\"lightness\",\"lightnessMeasurable\"]},\"score\":{\"type\":\"number\"},\"source\":{\"type\":\"string\",\"const\":\"colour\"}},\"required\":[\"availability\",\"brand\",\"category\",\"colour\",\"imageSource\",\"imageUrl\",\"product\",\"variantId\",\"variantName\",\"score\",\"source\"]}]},\"PairingOrdering\":{\"type\":\"object\",\"properties\":{\"anchorColourBasis\":{\"type\":\"string\",\"const\":\"one_minus_oklab_euclidean_distance\"},\"applied\":{\"type\":\"string\",\"enum\":[\"relevance\",\"lightness_asc\",\"lightness_desc\"]},\"colourSpace\":{\"type\":\"string\",\"const\":\"oklab\"},\"direction\":{\"type\":\"string\",\"enum\":[\"ascending\",\"descending\"]},\"lightnessRange\":{\"type\":\"object\",\"properties\":{\"max\":{\"type\":\"number\",\"const\":1},\"min\":{\"type\":\"number\",\"const\":0}},\"required\":[\"max\",\"min\"]},\"missingValues\":{\"type\":\"string\",\"const\":\"last\"},\"requested\":{\"type\":\"string\",\"enum\":[\"relevance\",\"lightness_asc\",\"lightness_desc\"]},\"tieBreak\":{\"type\":\"string\",\"const\":\"variantId_asc\"}},\"required\":[\"anchorColourBasis\",\"applied\",\"colourSpace\",\"direction\",\"lightnessRange\",\"missingValues\",\"requested\",\"tieBreak\"]},\"ProductDocumentPage\":{\"type\":\"object\",\"properties\":{\"coverage\":{\"type\":\"object\",\"properties\":{\"productUnion\":{\"type\":\"object\",\"properties\":{\"declaredCount\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},{\"type\":\"null\"}]},\"exact\":{\"type\":\"boolean\"},\"readableCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"state\":{\"type\":\"string\",\"enum\":[\"available\",\"none_declared\",\"not_ingested\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]}},\"required\":[\"declaredCount\",\"exact\",\"readableCount\",\"state\"]},\"requestedVariant\":{\"type\":\"object\",\"properties\":{\"declaredCount\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},{\"type\":\"null\"}]},\"exact\":{\"type\":\"boolean\"},\"readableCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"state\":{\"type\":\"string\",\"enum\":[\"available\",\"none_declared\",\"not_ingested\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]}},\"required\":[\"declaredCount\",\"exact\",\"readableCount\",\"state\"]},\"sources\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"declaredCount\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},{\"type\":\"null\"}]},\"exact\":{\"type\":\"boolean\"},\"readableCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"scope\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"product\"}},\"required\":[\"id\",\"kind\"]},{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"variant\"}},\"required\":[\"id\",\"kind\"]}]},\"source\":{\"type\":\"object",
97
- "\",\"properties\":{\"authority\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"minLength\":1},\"revision\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"authority\",\"id\",\"revision\"]},\"state\":{\"type\":\"string\",\"enum\":[\"available\",\"none_declared\",\"not_ingested\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]}},\"required\":[\"declaredCount\",\"exact\",\"readableCount\",\"scope\",\"source\",\"state\"]}}},\"required\":[\"productUnion\",\"requestedVariant\",\"sources\"]},\"documents\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"appliesToRequestedVariant\":{\"type\":\"boolean\"},\"contentType\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"declarations\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"readable\":{\"type\":\"boolean\"},\"scope\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"product\"}},\"required\":[\"id\",\"kind\"]},{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"variant\"}},\"required\":[\"id\",\"kind\"]}]},\"source\":{\"type\":\"object\",\"properties\":{\"authority\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"minLength\":1},\"revision\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"authority\",\"id\",\"revision\"]},\"status\":{\"type\":\"string\",\"enum\":[\"downloaded\",\"linked_not_downloaded\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]}},\"required\":[\"readable\",\"scope\",\"source\",\"status\"]}},\"declaredScopes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"product\"}},\"required\":[\"id\",\"kind\"]},{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"variant\"}},\"required\":[\"id\",\"kind\"]}]}},\"documentTypes\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"technical_data_sheet\",\"product_sheet\",\"technical_bulletin\",\"sustainability_report\",\"specification\",\"installation_guide\",\"care_maintenance_guide\",\"operation_manual\",\"warranty\",\"parts_list\",\"technical_drawing\",\"test_report\",\"certificate\",\"declaration_of_performance\",\"environmental_product_declaration\",\"health_product_declaration\",\"ingredient_disclosure\",\"safety_data_sheet\",\"brochure\",\"catalogue\",\"colour_finish_chart\",\"other\",\"unknown\"]}},\"fileExtension\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"id\":{\"type\":\"string\",\"minLength\":1},\"originalName\":{\"type\":\"string\",\"minLength\":1},\"scope\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"inherited\":{\"type\":\"boolean\"},\"kind\":{\"type\":\"string\",\"enum\":[\"product\",\"variant\"]}},\"required\":[\"id\",\"inherited\",\"kind\"]},\"source\":{\"type\":\"object\",\"properties\":{\"authority\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"minLength\":1},\"revision\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"authority\",\"id\",\"revision\"]},\"status\":{\"type\":\"string\",\"enum\":[\"downloaded\",\"linked_not_downloaded\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]},\"url\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"variantAttribution\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}}},\"required\":[\"appliesToRequestedVariant\",\"contentType\",\"declarations\",\"declaredScopes\",\"fileExtension\",\"id\",\"originalName\",\"scope\",\"source\",\"status\",\"url\",\"variantAttribution\"]}},\"nextCursor\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"totalDocuments\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"variantId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"coverage\",\"documents\",\"nextCursor\",\"totalDocuments\",\"variantId\"]},\"PublicRun\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"workflowId\":{\"type\":\"string\",\"description\":\"The workflow this run belongs to, the same id its path names.\"},\"clientReference\":{\"type\":[\"string\",\"null\"]},\"status\":{\"type\":\"string\",\"enum\":[\"queued\",\"claimed\",\"running\",\"suspended\",\"succeeded\",\"failed\",\"canceled\"]},\"redactedInputJson\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"redactedOutputJson\":{\"anyOf\":[{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"addit",
98
- "ionalProperties\":{}},{\"type\":\"null\"}]},\"usageJson\":{\"anyOf\":[{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]},\"artifactRefs\":{\"anyOf\":[{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\"},\"ref\":{\"type\":\"string\"}},\"required\":[\"kind\",\"ref\"]}},{\"type\":\"null\"}]},\"failureJson\":{\"anyOf\":[{\"$ref\":\"#/$defs/PublicRunFailure\"},{\"type\":\"null\"}]},\"suspensionPayload\":{\"description\":\"The current typed question payload while `status` is `suspended`; null otherwise. The same exact payload is retained on the `suspended` ledger event.\",\"anyOf\":[{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]},\"suspensionStepId\":{\"description\":\"The step awaiting input while `status` is `suspended` — pass it back as `stepId` when resuming, so a stale client cannot resume a step the run has already moved past. Read `suspensionPayload` for the current typed question. The same exact payload is retained on the `suspended` ledger event for event-stream consumers.\",\"type\":[\"string\",\"null\"]},\"eventCursor\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"attempts\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"startedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"},{\"type\":\"null\"}]},\"cancellationRequestedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"},{\"type\":\"null\"}]},\"completedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"},{\"type\":\"null\"}]},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"},\"updatedAt\":{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"}},\"required\":[\"id\",\"workflowId\",\"clientReference\",\"status\",\"redactedInputJson\",\"redactedOutputJson\",\"usageJson\",\"artifactRefs\",\"failureJson\",\"suspensionPayload\",\"suspensionStepId\",\"eventCursor\",\"attempts\",\"startedAt\",\"cancellationRequestedAt\",\"completedAt\",\"createdAt\",\"updatedAt\"]},\"PublicRunFailure\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"retryable\":{\"type\":\"boolean\"},\"detail\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}}},\"required\":[\"code\",\"message\",\"retryable\"]},\"PublicRunResponse\":{\"type\":\"object\",\"properties\":{\"run\":{\"$ref\":\"#/$defs/PublicRun\"}},\"required\":[\"run\"]},\"ResolveColourResponse\":{\"type\":\"object\",\"properties\":{\"alternatives\":{\"description\":\"Explicit manufacturer choices when a paint name is ambiguous; never selected automatically.\",\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"libraryId\":{\"type\":\"string\"},\"libraryName\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"query\":{\"type\":\"string\"}},\"required\":[\"hex\",\"libraryId\",\"libraryName\",\"n",
99
- "ame\",\"query\"]}},\"genericResolution\":{\"description\":\"Generic colour meaning only; paint identity is reported by match.\",\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"confidence\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"input\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"const\":\"resolved\"},\"others\":{\"maxItems\":4,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"band\":{\"type\":\"string\",\"enum\":[\"inside\",\"near\",\"far\"]},\"family\":{\"type\":\"string\",\"enum\":[\"white\",\"cream\",\"gray\",\"black\",\"beige\",\"taupe\",\"brown\",\"red\",\"orange\",\"yellow\",\"green\",\"teal\",\"blue\",\"purple\",\"pink\"]},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\",\"minLength\":1},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"band\",\"family\",\"hex\",\"id\",\"name\",\"range\"]}},\"principal\":{\"type\":\"object\",\"properties\":{\"band\":{\"type\":\"string\",\"enum\":[\"inside\",\"near\",\"far\"]},\"family\":{\"type\":\"string\",\"enum\":[\"white\",\"cream\",\"gray\",\"black\",\"beige\",\"taupe\",\"brown\",\"red\",\"orange\",\"yellow\",\"green\",\"teal\",\"blue\",\"purple\",\"pink\"]},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\",\"minLength\":1},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"band\",\"family\",\"hex\",\"id\",\"name\",\"range\"]},\"source\":{\"type\":\"string\",\"enum\":[\"name\",\"family\",\"composed\",\"hex\",\"reference\",\"semantic\"]}},\"required\":[\"confidence\",\"input\",\"kind\",\"others\",\"principal\",\"source\"]},{\"type\":\"object\",\"properties\":{\"input\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"const\":\"unresolved\"},\"reason\":{\"type\":\"string\",\"enum\":[\"unknown-term\",\"ambiguous-modifier\",\"contradictory-modifiers\",\"unsupported-base\",\"empty-range\",\"unrepresentable-color\"]},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"input\",\"kind\",\"reason\",\"terms\"]}]},\"match\":{\"description\":\"The resolved colour, or null when nothing resolved.\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"The resolved `#rrggbb` hex.\"},\"name\":{\"type\":\"string\",\"description\":\"The resolved display name (echoes the query when unnamed).\"},\"code\":{\"description\":\"The code the library gives the colour (e.g. \\\"OC-17\\\", \\\"7016\\\"). Present only on a library hit.\",\"type\":\"string\"},\"libraryId\":{\"description\":\"The ColorScope library the colour resolved in (e.g. \\\"benjamin-moore\\\", \\\"ral\\\"). A library is not necessarily a brand: read `libraryType`. Absent for a hex, and for a colour word or semantic match that resolved without a library.\",\"type\":\"string\"},\"libraryType\":{\"description\":\"The type ColorScope declares for `libraryId`: `brand` is a paint brand's paint, `reference` a colour standard (RAL, Pantone, HKS), `core` ColorScope's descriptive vocabulary. Present exactly when `libraryId` is. Only a `brand` hit is looked up in the catalogue.\",\"type\":\"string\",\"enum\":[\"brand\",\"consumer\",\"core\",\"reference\"]},\"matchTarget\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"hasSelection\":{\"type\":\"boolean\",\"const\":false},\"type\":{\"type\":\"",
100
- "string\",\"const\":\"none\"}},\"required\":[\"hasSelection\",\"type\"]},{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"hasSelection\":{\"type\":\"boolean\",\"const\":true},\"label\":{\"type\":\"string\"},\"previewColors\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"type\":{\"type\":\"string\",\"const\":\"oklab\"}},\"required\":[\"L\",\"a\",\"b\",\"hasSelection\",\"label\",\"previewColors\",\"type\"]},{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"hasSelection\":{\"type\":\"boolean\",\"const\":true},\"label\":{\"type\":\"string\"},\"previewColors\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"range\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"representative\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"}},\"required\":[\"hex\"]},\"type\":{\"type\":\"string\",\"const\":\"range\"}},\"required\":[\"L\",\"a\",\"b\",\"hasSelection\",\"label\",\"previewColors\",\"range\",\"representative\",\"type\"]}]},\"variant\":{\"description\":\"Whether the named paint is a variant in the catalogue. Only a colour that resolved in a `brand` library is looked up. The lookup is exact (brand paint names and codes), global, and independent of `corpusScope`, which only sets each variant's `inScope`.\",\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\",\"slug\"],\"description\":\"The variant's brand exactly as stored, suspect or not.\"},\"inScope\":{\"description\":\"Whether this variant is in the requested `corpusScope`. Null when no `corpusScope` was passed. The lookup itself is never narrowed by scope.\",\"type\":[\"boolean\",\"null\"]},\"parentageSuspect\":{\"type\":\"boolean\",\"description\":\"True when the stored brand is Samplize, a sampling channel, and the listing is not Samplize's own merchandise: the colour is another brand's, so do not report `brand` as who made it. The variant is still returned and still the right one for the name.\"},\"variantId\":{\"type\":\"string\",\"description\":\"The variant id. Opaque; never parse it.\"},\"status\":{\"type\":\"string\",\"const\":\"matched\",\"description\":\"The name is one brand's paint and one variant carries it.\"}},\"required\":[\"brand\",\"inScope\",\"parentageSuspect\",\"variantId\",\"status\"]},{\"type\":\"object\",\"properties\":{\"candidates\":{\"minItems\":2,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\",\"slug\"],\"description\":\"The variant's brand exactly as stored, suspect or not.\"},\"inScope\":{\"description\":\"Whether this variant is in the requested `corpusScope`. Null when no `corpusScope` was passed. The lookup itself is never narrowed by scope.\",\"type\":[\"boolean\",\"null\"]},\"parentageSuspect\":{\"type\":\"boolean\",\"description\":\"True when the stored brand is Samplize, a sampling channel, and the listing is not Samplize's own merchandise: the colour is another brand's, so do not report `brand` as who made it. The variant is still returned and still the right one for the name.\"},\"variantId\":{\"type\":\"string\",\"description\":\"The variant id. Opaque; never parse it.\"}},\"required\":[\"brand\",\"inScope\",\"parentageSuspect\",\"variantId\"]},\"description\":\"Every variant that carries the paint, catalogue order.\"},\"status\":{\"type\":\"string\",\"const\":\"ambiguous\",\"description\":\"The name is one brand's paint and more than one variant carries it, typically once per product line. Never picked between.\"}},\"required\":[\"candidat",
101
- "es\",\"status\"]},{\"type\":\"object\",\"properties\":{\"status\":{\"type\":\"string\",\"const\":\"not-in-catalogue\",\"description\":\"The name is one brand's paint and no variant in the catalogue carries it. A looked-up absence, distinct from `not-looked-up`.\"}},\"required\":[\"status\"]},{\"type\":\"object\",\"properties\":{\"reason\":{\"type\":\"string\",\"enum\":[\"reference-colour\",\"descriptive-colour\",\"no-paint-identity\",\"generic-colour\",\"several-paints\"],\"description\":\"`reference-colour`: the name resolved to a colour standard (RAL, Pantone, HKS), which no brand's variant carries. `descriptive-colour`: the name resolved to a descriptive colour (\\\"sage\\\", \\\"warm terracotta\\\"), not a paint. `no-paint-identity`: the name is not exactly any brand's paint name or code, or it is a hex. `generic-colour`: the name is a colour word brands also use as a paint name; qualify it with a brand. `several-paints`: the name is more than one brand's paint; qualify it with a brand.\"},\"status\":{\"type\":\"string\",\"const\":\"not-looked-up\",\"description\":\"The catalogue was not searched; there was no one brand's paint to find.\"}},\"required\":[\"reason\",\"status\"]}]}},\"required\":[\"hex\",\"name\",\"matchTarget\",\"variant\"]},{\"type\":\"null\"}]},\"rangeSamples\":{\"description\":\"The range drawn as a lightness ramp at the resolved colour's own hue and chroma, dark to light. Illustrative members of the range, never additional target colours.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"genericResolution\",\"match\"]},\"ResolveVariantResponse\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"evidence\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"detail\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"brand-url\",\"brand-homepage\",\"brand-code\",\"visible-label\"]},\"url\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"detail\",\"kind\"]}},\"receipt\":{\"type\":\"object\",\"properties\":{\"normalizationSteps\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalizedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"},\"submittedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"normalizationSteps\",\"normalizedUrl\",\"submittedUrl\"]},\"outcome\":{\"type\":\"string\",\"const\":\"identified\"},\"subject\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"code\":{\"type\":\"string\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"variant\"},\"name\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"kind\",\"name\"]}},\"required\":[\"evidence\",\"outcome\",\"subject\"]},{\"type\":\"object\",\"properties\":{\"evidence\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"detail\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"brand-url\",\"brand-homepage\",\"brand-code\",\"visible-label\"]},\"url\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"detail\",\"kind\"]}},\"receipt\":{\"type\":\"object\",\"properties\":{\"normalizationSteps\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalizedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"},\"submittedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"normalizationSteps\",\"normalizedUrl\",\"submittedUrl\"]},\"outcome\":{\"type\":\"string\",\"const\":\"placed\"},\"subject\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"code\":{\"type\":\"string\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"brand\"},\"name\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"kind\",\"name\"]}},\"required\":[\"evidence\",\"outcome\",\"subject\"]},{\"type\":\"object\",\"properties\":{\"evidence\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"detail\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"brand-url\",\"brand-homepage\",\"brand-code\",\"visible-label\"]},\"url\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"detail\",\"kind\"]}},\"receipt\":{\"type\":\"object\",\"properties\":{\"normalizationSteps\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalizedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"},\"submit",
102
- "tedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"normalizationSteps\",\"normalizedUrl\",\"submittedUrl\"]},\"candidates\":{\"minItems\":1,\"maxItems\":20,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"code\":{\"type\":\"string\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"enum\":[\"variant\",\"brand\"]},\"name\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"kind\",\"name\"]}},\"outcome\":{\"type\":\"string\",\"const\":\"ambiguous\"},\"truncated\":{\"type\":\"boolean\"}},\"required\":[\"evidence\",\"candidates\",\"outcome\",\"truncated\"]},{\"type\":\"object\",\"properties\":{\"evidence\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"detail\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"brand-url\",\"brand-homepage\",\"brand-code\",\"visible-label\"]},\"url\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"detail\",\"kind\"]}},\"receipt\":{\"type\":\"object\",\"properties\":{\"normalizationSteps\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalizedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"},\"submittedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"normalizationSteps\",\"normalizedUrl\",\"submittedUrl\"]},\"outcome\":{\"type\":\"string\",\"const\":\"unresolved\"},\"reason\":{\"type\":\"string\",\"enum\":[\"no-stored-url\",\"no-code-match\"]}},\"required\":[\"evidence\",\"outcome\",\"reason\"]}]},\"SamplizeCataloguePage\":{\"type\":\"object\",\"properties\":{\"complete\":{\"type\":\"boolean\"},\"corpusScope\":{\"type\":\"string\",\"const\":\"samplizeCatalogue\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"}},\"required\":[\"name\",\"slug\"]},\"code\":{\"type\":\"string\"},\"collectionMemberships\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"handle\":{\"type\":\"string\"},\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"algolia_shopify_products\"},\"sourceCollectionId\":{\"type\":\"string\"},\"url\":{\"type\":\"string\"}},\"required\":[\"handle\",\"observedAt\",\"publisher\",\"source\",\"sourceCollectionId\",\"url\"]}},\"colourAnalysis\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"demand\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"algolia_shopify_products\"},\"sourceUrl\":{\"type\":\"string\"},\"field\":{\"type\":\"string\",\"const\":\"recently_ordered_count\"},\"grain\":{\"type\":\"string\",\"const\":\"shopify_variant\"},\"recentlyOrderedCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"sourceVariantId\":{\"type\":\"string\"},\"window\":{\"type\":\"null\"}},\"required\":[\"observedAt\",\"publisher\",\"source\",\"sourceUrl\",\"field\",\"grain\",\"recentlyOrderedCount\",\"sourceVariantId\",\"window\"]},{\"type\":\"null\"}]},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9A-F]{6}$\"},\"hexObservations\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"differsFromSelected\":{\"type\":\"boolean\"},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9A-F]{6}$\"},\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\"},\"source\":{\"type\":\"string\"},\"sourceBasis\":{\"type\":\"string\"},\"sourceUrl\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"differsFromSelected\",\"hex\",\"observedAt\",\"publisher\",\"source\",\"sourceBasis\",\"sourceUrl\"]}},\"hexSource\":{\"type\":\"object\",\"properties\":{\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"snowflake_product_tags\"},\"url\":{\"type\":\"string\"}},\"required\":[\"publisher\",\"source\",\"url\"]},\"lrv\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":100},{\"type\":\"null\"}]},\"lrvObservations\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"algolia_shopify_products\"},\"sourceUrl\":{\"type\":\"string\"},\"field\":{\"type\":\"string\"},\"value\":{\"type\":\"number\",\"minimum\":0,\"maximum\":100}},\"required\":[\"observedAt\",\"publisher\",\"source\",\"sour",
103
- "ceUrl\",\"field\",\"value\"]}},\"lrvSource\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"algolia_shopify_products\"},\"sourceUrl\":{\"type\":\"string\"},\"field\":{\"type\":\"string\"},\"value\":{\"type\":\"number\",\"minimum\":0,\"maximum\":100}},\"required\":[\"observedAt\",\"publisher\",\"source\",\"sourceUrl\",\"field\",\"value\"]},{\"type\":\"null\"}]},\"name\":{\"type\":\"string\"},\"oklab\":{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"}},\"required\":[\"L\",\"a\",\"b\"]},\"productId\":{\"type\":\"string\"},\"publishedHexes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"differsFromSelected\":{\"type\":\"boolean\"},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9A-F]{6}$\"},\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\"},\"source\":{\"type\":\"string\"},\"sourceBasis\":{\"type\":\"string\"},\"sourceUrl\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"differsFromSelected\",\"hex\",\"observedAt\",\"publisher\",\"source\",\"sourceBasis\",\"sourceUrl\"]}},\"sizeVariants\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"demand\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"algolia_shopify_products\"},\"sourceUrl\":{\"type\":\"string\"},\"field\":{\"type\":\"string\",\"const\":\"recently_ordered_count\"},\"grain\":{\"type\":\"string\",\"const\":\"shopify_variant\"},\"recentlyOrderedCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"sourceVariantId\":{\"type\":\"string\"},\"window\":{\"type\":\"null\"}},\"required\":[\"observedAt\",\"publisher\",\"source\",\"sourceUrl\",\"field\",\"grain\",\"recentlyOrderedCount\",\"sourceVariantId\",\"window\"]},{\"type\":\"null\"}]},\"inventoryAvailable\":{\"type\":\"boolean\"},\"price\":{\"type\":[\"number\",\"null\"]},\"sku\":{\"type\":[\"string\",\"null\"]},\"sourceVariantId\":{\"type\":\"string\"},\"title\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"demand\",\"inventoryAvailable\",\"price\",\"sku\",\"sourceVariantId\",\"title\"]}},\"sourceProductId\":{\"type\":\"string\"},\"url\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"}},\"required\":[\"brand\",\"code\",\"collectionMemberships\",\"colourAnalysis\",\"demand\",\"hex\",\"hexObservations\",\"hexSource\",\"lrv\",\"lrvObservations\",\"lrvSource\",\"name\",\"oklab\",\"productId\",\"publishedHexes\",\"sizeVariants\",\"sourceProductId\",\"url\",\"variantId\"]}},\"nextCursor\":{\"type\":[\"string\",\"null\"]},\"schemaVersion\":{\"type\":\"number\",\"const\":2},\"source\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"sourceVersion\":{\"type\":\"string\"},\"total\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991}},\"required\":[\"complete\",\"corpusScope\",\"items\",\"nextCursor\",\"schemaVersion\",\"source\",\"sourceVersion\",\"total\"]},\"SamplizeCatalogueSearchResponse\":{\"type\":\"object\",\"properties\":{\"basis\":{\"type\":\"string\",\"enum\":[\"published-colour-similarity\",\"description-retrieval\",\"image-colour-distribution\",\"named-colour-similarity\"]},\"countBasis\":{\"type\":\"string\",\"enum\":[\"complete-catalogue\",\"retrieved-pool\"]},\"counts\":{\"type\":\"object\",\"properties\":{\"family\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"lightness\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"intensity\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"brand\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}}},\"required\":[\"family\",\"lightness\",\"intensity\",\"brand\"]},\"dictionaryVersion\":{\"type\":\"string\"},\"eligibleCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"embeddingVersion\":{\"type\":\"string\"},\"groups\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"proportion\":{\"type\":\"number\"},\"quota\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"ids\":{\"type\":\"array\",\"items\":{\"type",
104
- "\":\"string\"}},\"shortfall\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991}},\"required\":[\"hex\",\"proportion\",\"quota\",\"ids\",\"shortfall\"]}},\"ids\":{\"maxItems\":100,\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"limited\":{\"type\":\"boolean\"},\"rankingVersion\":{\"type\":\"string\"},\"sourceVersion\":{\"type\":\"string\"},\"target\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"confidence\":{\"type\":\"number\"},\"hex\":{\"type\":\"string\"},\"libraryId\":{\"type\":\"string\"},\"matchTarget\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"hasSelection\":{\"type\":\"boolean\",\"const\":false},\"type\":{\"type\":\"string\",\"const\":\"none\"}},\"required\":[\"hasSelection\",\"type\"]},{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"hasSelection\":{\"type\":\"boolean\",\"const\":true},\"label\":{\"type\":\"string\"},\"previewColors\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"type\":{\"type\":\"string\",\"const\":\"oklab\"}},\"required\":[\"L\",\"a\",\"b\",\"hasSelection\",\"label\",\"previewColors\",\"type\"]},{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"hasSelection\":{\"type\":\"boolean\",\"const\":true},\"label\":{\"type\":\"string\"},\"previewColors\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"range\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"representative\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"}},\"required\":[\"hex\"]},\"type\":{\"type\":\"string\",\"const\":\"range\"}},\"required\":[\"L\",\"a\",\"b\",\"hasSelection\",\"label\",\"previewColors\",\"range\",\"representative\",\"type\"]}]},\"name\":{\"type\":\"string\"},\"ref\":{\"type\":\"string\"},\"resolution\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"confidence\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"input\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"const\":\"resolved\"},\"others\":{\"maxItems\":4,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"band\":{\"type\":\"string\",\"enum\":[\"inside\",\"near\",\"far\"]},\"family\":{\"type\":\"string\",\"enum\":[\"white\",\"cream\",\"gray\",\"black\",\"beige\",\"taupe\",\"brown\",\"red\",\"orange\",\"yellow\",\"green\",\"teal\",\"blue\",\"purple\",\"pink\"]},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\",\"minLength\":1},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"band\",\"family\",\"hex\",\"id\",\"name\",\"range\"]}},\"principal\":{\"type\":\"object\",\"properties\":{\"band\":{\"type\":\"string\",\"enum\":[\"inside\",\"near\",\"far\"]},\"family\":{\"type\":\"string\",\"enum\":[\"white\",\"cream\",\"gray\",\"black\",\"beige\",\"taupe\",\"brown\",\"red\",\"orange\",\"yellow\",\"green\",\"teal\",\"blue\",\"purple\",\"pink\"]},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\",\"minLength\":1},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"",
105
- "maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"band\",\"family\",\"hex\",\"id\",\"name\",\"range\"]},\"source\":{\"type\":\"string\",\"enum\":[\"name\",\"family\",\"composed\",\"hex\",\"reference\",\"semantic\"]}},\"required\":[\"confidence\",\"input\",\"kind\",\"others\",\"principal\",\"source\"]},{\"type\":\"object\",\"properties\":{\"input\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"const\":\"unresolved\"},\"reason\":{\"type\":\"string\",\"enum\":[\"unknown-term\",\"ambiguous-modifier\",\"contradictory-modifiers\",\"unsupported-base\",\"empty-range\",\"unrepresentable-color\"]},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"input\",\"kind\",\"reason\",\"terms\"]}]},\"source\":{\"type\":\"string\",\"enum\":[\"hex\",\"lexical-exact\"]}},\"required\":[\"hex\",\"ref\",\"source\"]}},\"required\":[\"basis\",\"countBasis\",\"counts\",\"ids\",\"limited\",\"sourceVersion\"]},\"SamplizeColorVecCache\":{\"type\":\"object\",\"properties\":{\"dictionaryVersion\":{\"type\":\"string\"},\"embeddingVersion\":{\"type\":\"string\",\"const\":\"oklch-anchor-quantiles-v12\"},\"generatedAt\":{\"type\":\"string\"},\"paints\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"family\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"intensity\":{\"type\":\"string\"},\"lightness\":{\"type\":\"string\"},\"oklab\":{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"}},\"required\":[\"L\",\"a\",\"b\"]},\"variantId\":{\"type\":\"string\"},\"vector\":{\"type\":\"string\",\"description\":\"128 IEEE754 float32 values, little endian, base64 encoded. Decode through the SDK index.\"}},\"required\":[\"brand\",\"family\",\"hex\",\"intensity\",\"lightness\",\"oklab\",\"variantId\",\"vector\"]}},\"rankingVersion\":{\"type\":\"string\",\"const\":\"solid-colorvec-cosine-v2\"},\"sourceVersion\":{\"type\":\"string\"}},\"required\":[\"dictionaryVersion\",\"embeddingVersion\",\"generatedAt\",\"paints\",\"rankingVersion\",\"sourceVersion\"]},\"SchemaValueDictionariesResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"valueDictionaries\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"authority\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"taxonomy\"},\"system\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"kind\",\"system\"]},{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"colorscope\"},\"system\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"kind\",\"system\"]},{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"materialgraph\"},\"system\":{\"type\":\"string\",\"const\":\"@materialgraph/schema\"}},\"required\":[\"kind\",\"system\"]},{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"external-standard\"},\"system\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"kind\",\"system\"]}]},\"description\":{\"type\":\"string\"},\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"name\":{\"type\":\"string\"},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"label\":{\"type\":\"string\"},\"aliases\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"broaderTermId\":{\"type\":\"string\",\"minLength\":1},\"definition\":{\"type\":\"string\",\"minLength\":1},\"externalMappings\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"mappingType\":{\"type\":\"string\",\"enum\":[\"direct\",\"transform\",\"derived\",\"classification\",\"semantic\"]},\"matchStrength\":{\"type\":\"string\",\"enum\":[\"exact\",\"close\",\"broad\",\"narrow\",\"related\"]},\"notes\":{\"type\":\"string\"},\"target\":{\"type\":\"string\",\"enum\":[\"schema_org\",\"ifc_pset\",\"bsdd\",\"iso_23387\",\"eclass\",\"gs1_gdm\",\"gdsn\",\"etim\",\"uniclass\"]},\"targetPath\":{\"type\":\"string\"}},\"required\":[\"mappingType\",\"target\",\"targetPath\"]}},\"metadata\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":[\"string\",\"number\",\"boolean\",\"null\"]}},\"lifecycle\":{\"type\":\"object\",\"properties\":{\"deprecatedIn\":{\"type\":\"string\"},\"introducedIn\":{\"type\":\"string\"},\"status\":{\"type\":\"string\",\"enum\":[\"draft\",\"active\",\"de",
106
- "precated\"]},\"supersededBy\":{\"type\":\"string\"}},\"required\":[\"introducedIn\",\"status\"]},\"semanticId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"label\",\"lifecycle\",\"semanticId\"]}},\"lifecycle\":{\"type\":\"object\",\"properties\":{\"deprecatedIn\":{\"type\":\"string\"},\"introducedIn\":{\"type\":\"string\"},\"status\":{\"type\":\"string\",\"enum\":[\"draft\",\"active\",\"deprecated\"]},\"supersededBy\":{\"type\":\"string\"}},\"required\":[\"introducedIn\",\"status\"]},\"semanticId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"authority\",\"description\",\"id\",\"name\",\"terms\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SearchByPaletteResponse\":{\"type\":\"object\",\"properties\":{\"categoryGate\":{\"description\":\"The category gate the page ran under: the caller's `category`, or the surface-material default (`defaulted: true`). ABSENT only on responses stored before the one search.\",\"type\":\"object\",\"properties\":{\"defaulted\":{\"description\":\"Present when the caller named no category: a colour page then holds surface materials only (the `materials` product-type groups, listed in `requested`), so lights, taps and furniture do not answer a colour question. Send `?category=` to search other groups.\",\"type\":\"boolean\",\"const\":true},\"requested\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"Category names or keys the caller asked the hard gate to keep.\"},\"requiresAcceptedPrimaryProductType\":{\"type\":\"boolean\",\"const\":true,\"description\":\"The gate admits a variant only through an accepted primary product type.\"},\"unclassifiedVariantsExcluded\":{\"type\":\"boolean\",\"const\":true,\"description\":\"Variants without an accepted primary product type were ineligible, not proven to belong outside the requested category.\"}},\"required\":[\"requested\",\"requiresAcceptedPrimaryProductType\",\"unclassifiedVariantsExcluded\"]},\"corpusScope\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\",\"description\":\"What the scope admits, in one sentence, for a human reader.\"},\"scope\":{\"type\":\"string\",\"enum\":[\"all\",\"samplizeCatalogue\",\"materialBankOrderable\",\"materialBankNaOrderable\",\"materialBankNaAndCatalogue\",\"materialBankEuOrderable\",\"designShopOrderable\"],\"description\":\"Which corpus to answer from. samplizeCatalogue admits published US paint colours regardless of stock. ABSENT (or 'all') means the WHOLE GRAPH — every material MaterialGraph knows, orderable or not; absence is never a narrower default. Three transaction-oriented scopes gate on governed CHANNEL membership: 'materialBankNaOrderable' (Material Bank North America, ~277,000 materials), 'materialBankEuOrderable' (Material Bank Europe, ~65,000) and 'designShopOrderable' (DesignShop, ~34,000, with the products DesignShop hides from browse excluded). 'materialBankNaAndCatalogue' is the one-query union of Material Bank North America and the governed Catalogue editorial discovery corpus; that union does not by itself claim every member is transactable. 'materialBankOrderable' is NOT one of them: it selects materials carrying a Material Bank identity, which is a provenance signal rather than a channel one, and it admits 98.4% of the graph — use it to exclude crawl-sourced brands, not to mean orderable. A scope answers membership in its named governed corpus, never suitability: scope on channel, then refine on sector. Every scope is applied INSIDE the query: `limit` fills with eligible rows and `counts` describe the scoped corpus, which post-filtering a page cannot give you. An unknown value is a 400 naming it, never a silent fall back to the whole graph.\"}},\"required\":[\"description\",\"scope\"],\"description\":\"The corpus this page AND its `counts` were drawn from. Present only when a narrowing scope applied — absence means the whole graph. Read it alongside `counts`: a short page under a scope is a small SCOPED corpus, not a truncated one.\"},\"count\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"hueGate\":{\"description\":\"The thresholds behind each receipt's `hueCompatible`. ABSENT only on responses st",
107
- "ored before MG-2295.\",\"type\":\"object\",\"properties\":{\"achromaticQueryChroma\":{\"type\":\"number\",\"description\":\"Below this query chroma the colour is treated as achromatic and any hue is admitted.\"},\"minChromaRatio\":{\"type\":\"number\",\"description\":\"A swatch must carry at least this share of the query colour's chroma.\"},\"minHueCosine\":{\"type\":\"number\",\"description\":\"Floor on the cosine agreement between the two hue vectors.\"}},\"required\":[\"achromaticQueryChroma\",\"minChromaRatio\",\"minHueCosine\"]},\"matches\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"category\":{\"description\":\"The catalog GROUP this material belongs to — Flooring, Textile Materials, Coatings — or null when it has no accepted primary product type. A palette query is cross-category BY INTENT (a scheme, not one aisle), so the category is what says whether a result answers the question at all: 30 of 40 results for one real palette were Coatings while every one of the 14 groups held something closer. Null means UNKNOWN, not uncategorised, and it is not rare — group by it, but keep null as its own bucket rather than dropping it.\",\"type\":[\"string\",\"null\"]},\"color\":{\"type\":[\"string\",\"null\"]},\"imageSha256\":{\"description\":\"SHA-256 of the displayed image `imageUrl` points at, as a hex digest. ABSENT means no hash is on record, never that there is no image.\",\"type\":\"string\"},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"palette\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"name\":{\"description\":\"colorscope's name for the swatch.\",\"type\":[\"string\",\"null\"]},\"proportion\":{\"type\":\"number\",\"description\":\"Share of the image this swatch occupies.\"}},\"required\":[\"hex\",\"name\",\"proportion\"]},\"description\":\"The candidate's FULL extracted palette — every stored swatch, uncapped and in stored order, the same list the material's own record reports. This is the whole evidence set scored against; the per-colour `matched` swatch is one entry drawn from it. A ONE-swatch palette means the candidate's image is genuinely monochrome, NOT that the list was trimmed — and it is the common case here, because a page ordered by nearest swatch favours flat images, whose one swatch can land arbitrarily close to any colour.\"},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":[\"string\",\"null\"]},\"retired\":{\"type\":\"boolean\",\"description\":\"MB has retired or hidden this SKU.\"},\"score\":{\"type\":\"number\",\"description\":\"Closeness in [0,1] of the material's own colour on the search index to the searched colour, the page's order. It falls from 1 to 0 across a fixed OKLab span; not a confidence or a percentage.\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]},\"colours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"colourScore\":{\"type\":\"number\",\"description\":\"Closeness in [0,1] of the matched swatch to the queried colour, from plain OKLab distance with lightness counted in full: 1 is the same colour, 0 is 0.3 or more apart. Not a confidence or a percentage.\"},\"matched\":{\"description\":\"The ONE swatch of the candidate's `palette` that produced this score — evidence for THIS queried colour, not the candidate's colours as a whole (that is `palette`). Null when no swatch produced a score.\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"name\":{\"description\":\"colorscope's name for the swatch.\",\"type\":[\"string\",\"null\"]},\"proportion\":{\"type\":\"number\",\"description\":\"Share of the image this swatch occupies.\"}},\"required\":[\"hex\",\"name\",\"proportion\"]},{\"type\":\"null\"}]},\"proportionScore\":{\"type\":\"number\",\"description\":\"Proportion agreement in [0,1]. Always 1 on the one search: no proportion is applied.\"},\"hueCompatible\":{\"description\":\"Whether `matched` has a hue compatible with the queried colour, by colorscope's `isHueCompatible` at the response's `hueGate` thresholds. A flag, never a gate: an incompatible swatch still scores and still ranks. ABSENT when there is no `matched` swatch.\",\"type\":\"boolean\"},\"queryHex\":{\"type\":\"string\",\"description\":\"The queried colour, normalised to ",
108
- "`#rrggbb`.\"},\"score\":{\"type\":\"number\",\"description\":\"The receipt's score: `colourScore` × `proportionScore`, so `colourScore` on the one search.\"}},\"required\":[\"colourScore\",\"matched\",\"proportionScore\",\"queryHex\",\"score\"]},\"description\":\"One receipt per queried colour, in query order.\"}},\"required\":[\"brand\",\"brandSlug\",\"category\",\"color\",\"imageUrl\",\"palette\",\"product\",\"productId\",\"retired\",\"score\",\"variantId\",\"variantName\",\"colours\"]},\"description\":\"Matches, best score first.\"},\"query\":{\"type\":\"object\",\"properties\":{\"colours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"proportion\":{\"type\":\"number\"},\"weight\":{\"type\":\"number\"}},\"required\":[\"hex\"]}},\"droppedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"proportion\":{\"type\":\"number\"},\"weight\":{\"type\":\"number\"}},\"required\":[\"hex\"]},\"description\":\"Colours not searched: every colour after the first, since a palette is ordered by its first colour alone, and any colour whose stated share is below 5%. These colours were not retrieved or scored.\"},\"logic\":{\"type\":\"string\",\"enum\":[\"all\",\"any\"]},\"outcome\":{\"type\":\"string\",\"enum\":[\"matches\",\"no_effective_colours\"],\"description\":\"`no_effective_colours` means every colour was omitted for a stated share below 5%, so no search ran.\"}},\"required\":[\"colours\",\"droppedColours\",\"logic\",\"outcome\"],\"description\":\"Echo of the resolved query — every colour normalised to `#rrggbb`.\"}},\"required\":[\"count\",\"matches\",\"query\"]},\"SearchResponse\":{\"type\":\"object\",\"properties\":{\"data\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"results\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"resultId\":{\"type\":\"string\",\"description\":\"This exact hit's attribution key — `<responseId>:<rank>`, where rank is 1-based within THIS response. Unique across pages, because each page is its own response with its own id. Store it verbatim next to the outcome; it is opaque, and `attribution.responseId` is the field to group by.\"},\"variantId\":{\"type\":\"string\"},\"brand\":{\"type\":\"string\"},\"product\":{\"type\":\"string\"},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"productId\":{\"type\":[\"string\",\"null\"]},\"materialBankId\":{\"description\":\"The variant's Material Bank SKU — the ONE EXTERNAL identifier on a result, in contrast to the OPAQUE `variantId`: it is the id you are expected to match against Material Bank's own catalogue (carts, ordering and analytics all key on it), so a result list can be joined without a second lookup. Populated by the search and by Match alike. ABSENT means no MB identity is known for the variant, never that the SKU cannot be ordered; presence is the orderability tell, absence is silence.\",\"type\":\"string\"},\"manufacturerCode\":{\"description\":\"The governed manufacturer/source-native item code from `variants.code` (for example \\\"GADLC02\\\"). Populated when the full-result retrieval source carries that canonical field; Match always hydrates it from the variant row. ABSENT means unknown or an older external serving projection, never an invented code. Independent of materialBankId.\",\"type\":\"string\"},\"projectSaveCapability\":{\"description\":\"Explicit source-governed permission to save this exact source-coded variant to a Project. ABSENT means unknown/not allowed; it is never inferred from the brand or name.\",\"type\":\"string\",\"const\":\"allowed\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"sourceStatus\":{\"description\":\"The governed data status supporting Project capture. ABSENT means unknown. Provisional data remains source-backed but is not a verified catalogue claim.\",\"type\":\"string\",\"const\":\"provisional\"},\"productType\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"variantName\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"imageSha256\":{\"description\":\"SHA-256 of the displayed image `imageUrl` points at, as a hex digest. Lets a caller key a cache or dedupe on the asset rather than its URL. ABSENT means no hash is on record, never that there is no imag",
109
- "e.\",\"type\":\"string\"},\"hasImage\":{\"type\":\"boolean\"},\"variantCount\":{\"description\":\"How many eligible variants the row's product has, the same set `list_variants` pages, so a follow-up list of the product returns this many: the card's \\\"12 colourways\\\". ABSENT means the product is unknown or has no eligible variant.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"palette\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"`#rrggbb` of the swatch, as extracted from the product image.\"},\"name\":{\"description\":\"Stored human colour name for the swatch, when one was extracted.\",\"type\":[\"string\",\"null\"]},\"proportion\":{\"type\":\"number\",\"description\":\"The swatch's share of the analysed image, in [0,1].\"}},\"required\":[\"hex\",\"proportion\"]},\"description\":\"The material's main-image palette — the FULL stored palette, uncapped and in stored order. Colours are EXTRACTED FROM PRODUCT IMAGERY (visual likeness, never a declared colour specification). A one-swatch palette means the extractor found one colour — solid-colour materials are genuinely monochrome — never that the list was trimmed. This array is always present: EMPTY means nothing is on record (unknown), not 'this material has no colours'.\"},\"colourMeta\":{\"type\":\"object\",\"properties\":{\"dominantFamily\":{\"type\":\"string\"},\"dominantHex\":{\"type\":\"string\"},\"mood\":{\"type\":\"string\"}}},\"colourChip\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"`#rrggbb` to fill the chip with. EXTRACTED FROM the product image (a visual likeness), never a manufacturer-declared colour specification — surfaces must not present it as one.\"}},\"required\":[\"hex\"],\"description\":\"Present when this material's product imagery carries nothing beyond one colour, so a surface should render that colour rather than the photograph. Set for COATINGS (paints, primers, stains, floor coatings) whose stored palette quantises to a single swatch — a paint's photo is a flat fill, and the colour we hold structured beats a JPEG of it. ABSENT means the question was not established (unknown product type, unextracted or multi-swatch palette) and the image should be rendered; it NEVER asserts 'this is not a coating'.\"},\"attributes\":{\"description\":\"Resolved attribute values for the ids sent in `returnAttributes`, keyed by attribute id. ABSENT entirely when `returnAttributes` was not sent. A key present with `null` means this variant carries no accepted value for that attribute — absent is not empty and neither is null: the three states are distinct on purpose. Values resolve with the normal variant-over-product precedence.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\",\"items\":{\"type\":\"string\"}},{\"type\":\"null\"}]}},\"colourBand\":{\"description\":\"`colourDistance` as a word (identical / very close / close / related / different), or null when unmeasurable. Absent when the colour stage did not run.\",\"type\":[\"string\",\"null\"]},\"colourDistance\":{\"description\":\"Match only. OKLab earth mover's distance between the query crop's palette and this material's, reading both palettes' proportions, so a colour that is a small share of the product cannot carry the match. Under 0.1 the colour AGREES, and the page lists agreeing rows first. `null` means the material carries no stored palette — UNKNOWN colour, never 'no colour' and never 'distant'. Absent when the colour stage did not run.\",\"type\":[\"number\",\"null\"]},\"confidence\":{\"description\":\"Match only (MG-1031). How close this material is to the query, as an ABSOLUTE image-space similarity in [0,1], not adjusted for colour — the same unit as `qualityFloor` and `comparison.bestRejected`, so all three can be drawn on one axis. Never normalised against the page, so the number means the same thing across runs. It is the TRUE value and may reach 1; rendering it so that no card claims '100%' is the consumer's job (round toward zero, or show '99%+'). Capping it here would put it on a different ceiling from `bestRejected`, which publishes the same unit uncapped. A M",
110
- "atch page is ordered by colour agreement (`colourDistance` under 0.1, then unmeasured, then the rest) and then by this number, so inside each of those sets it never rises down the page. Distinct from `score`, which is the retrieval score on the `[0, maxScore]` scale and does not order a Match page. Absent outside Match.\",\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"confidenceBand\":{\"description\":\"`confidence` as a word, banded on the engine's measured readings (strong >= 0.85, good >= 0.72, fair >= 0.55 = the default quality floor, weak below it and reachable only under `includeBelowFloor`). Present exactly when `confidence` is.\",\"type\":\"string\",\"enum\":[\"strong\",\"good\",\"fair\",\"weak\"]},\"score\":{\"type\":\"number\",\"description\":\"The selected mode's weighted primary score on the `[0, maxScore]` scale. On a Match page this is the retrieval score and does NOT order the page; the order is colour agreement, then `confidence`.\"},\"signals\":{\"description\":\"Match only: the measured image similarity the row carries.\",\"type\":\"object\",\"properties\":{\"image\":{\"description\":\"Image-space cosine between the query image and this row's image, in [0,1]. Null when it was not measured.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"image\"]},\"retired\":{\"description\":\"MB lists the SKU as not visible/retired; demoted in ranking. Omitted when false.\",\"type\":\"boolean\"},\"belowFloor\":{\"description\":\"Present (true) only on quality-floor rejects returned under includeBelowFloor — the item failed the match image-quality floor and would be dropped by default.\",\"type\":\"boolean\"},\"admittedOnColour\":{\"description\":\"Present (true) only on Match rows the colour probe admitted: this material is as close in colour as the catalogue gets, and its image similarity is BELOW the match quality floor by design. It is on the page because no image-retrieved row is nearer in colour, not because it cleared the floor — so a consumer can present it as a colour answer or suppress it knowingly, and a quality check can tell a designed admission from a genuine floor leak. Absent (never false) on rows that came through image retrieval. Distinct from `belowFloor`, which marks rejects returned only under `includeBelowFloor`.\",\"type\":\"boolean\"}},\"required\":[\"variantId\",\"brand\",\"product\",\"brandSlug\",\"productId\",\"color\",\"variantName\",\"imageUrl\",\"hasImage\",\"palette\",\"score\"]}},\"view\":{\"default\":\"full\",\"description\":\"Projection echo — always 'full' on this envelope variant.\",\"type\":\"string\",\"const\":\"full\"},\"correctedQuery\":{\"description\":\"Present when a word no material carries was corrected before the search ran: `from` is the query as typed (normalised), `to` the phrasing the page shows results for.\",\"type\":\"object\",\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"type\":\"string\"}},\"required\":[\"from\",\"to\"]},\"attribution\":{\"type\":\"object\",\"properties\":{\"basis\":{\"type\":\"string\",\"enum\":[\"image\",\"colour\",\"lexical\",\"agent\",\"attribute\",\"match\"],\"description\":\"The ranking basis, groupable across both ranked routes. On /api/v1/search this is the envelope's `mode` verbatim; /api/v1/search/match reports 'match'. Group your stored outcomes by this field.\"},\"issuedAt\":{\"type\":\"string\",\"description\":\"ISO-8601 timestamp of when this response was assembled, so a stored outcome carries its own age without a second lookup.\"},\"responseId\":{\"type\":\"string\",\"description\":\"This response's stable id — the same value as the `X-Request-Id` header. Store it next to the outcome (an order, a save, a click) to join that outcome back to the ranking that produced it. Opaque: round-trip it verbatim, never parse it.\"}},\"required\":[\"basis\",\"issuedAt\",\"responseId\"],\"description\":\"Result attribution receipt. Present on every successful ranked response. Nothing on our side retains it — what you store IS the record.\"},\"suggestions\":{\"default\":[],\"description\":\"Always empty: the one search offers no refinements. Read nothing from it.\",\"maxItems\":0,\"type\":\"array\",\"items\":{\"not\":{}}},\"mode\":{\"type\":\"string\",\"enum\":[\"image\",\"colour\",\"lexical\",\"agent\",\"attribute\"],\"description\":\"What ordered the page: 'image' (a look-alike: image similarity ",
111
- "to the seed), 'colour' (the words or the caller named a colour: colour distance inside that colour's family), 'lexical' (the query's words, ranked by text rank on the index), 'attribute' (no words left to rank on: the category and filters define the page), or 'agent' (the search agent chose these variants and their order; scores are rank-based, 1 for the first result falling linearly, and `maxScore` is 1).\"},\"maxScore\":{\"type\":\"number\"},\"note\":{\"type\":\"string\"},\"cursor\":{\"type\":\"string\"},\"timings\":{\"description\":\"Wall-clock milliseconds per step of the search, keyed by step id. The key set is open and depends on the path a query took, so read it by iterating rather than by naming a key. Present only when `explain` is set: diagnostic, not part of the ranking contract.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"number\"}},\"explain\":{\"description\":\"Present only under `explain`: the receipt of the plan the search ran on. Diagnostic, like `timings`.\",\"type\":\"object\",\"properties\":{\"plan\":{\"type\":\"object\",\"properties\":{\"cached\":{\"type\":\"boolean\"},\"plan\":{\"type\":\"object\",\"properties\":{\"brands\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"ids\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"names\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"phrase\":{\"type\":\"string\"}},\"required\":[\"ids\",\"names\",\"phrase\"]},{\"type\":\"null\"}]},\"category\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"label\":{\"type\":\"string\"},\"phrase\":{\"type\":\"string\"},\"productTypeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"label\",\"phrase\",\"productTypeIds\"]},{\"type\":\"null\"}]},\"colour\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"family12\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"familyId\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"oklab\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":3,\"maxItems\":3},\"phrase\":{\"type\":\"string\"},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"family12\",\"familyId\",\"hex\",\"oklab\",\"phrase\"]},{\"type\":\"null\"}]},\"corpusScope\":{\"type\":\"string\",\"enum\":[\"samplizeCatalogue\",\"materialBankOrderable\",\"materialBankNaOrderable\",\"materialBankNaAndCatalogue\",\"materialBankEuOrderable\",\"designShopOrderable\"]},\"excludeBrands\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"excludes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"phrase\":{\"type\":\"string\"},\"term\":{\"type\":\"string\"}},\"required\":[\"attributeId\",\"phrase\",\"term\"]}},\"leftover\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalised\":{\"type\":\"string\"},\"softAlone\":{\"type\":\"boolean\"},\"vendorColourNames\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"wants\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"fill\":{\"type\":\"number\"},\"phrase\":{\"type\":\"string\"},\"presence\":{\"type\":\"boolean\",\"const\":true},\"strength\":{\"type\":\"string\",\"enum\":[\"hard\",\"soft\"]},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"attributeId\",\"fill\",\"phrase\",\"strength\",\"terms\"]}}},\"required\":[\"brands\",\"category\",\"colour\",\"excludeBrands\",\"excludes\",\"leftover\",\"normalised\",\"softAlone\",\"vendorColourNames\",\"wants\"],\"description\":\"The plan the search ran on: the category, brands, wanted and excluded attribute terms (each hard or soft, with its fill), the colour, the words left for text, and the caller's corpus scope when one was sent.\"},\"signature\":{\"type\":\"string\"},\"source\":{\"type\":\"string\",\"enum\":[\"dictionary\",\"jev\"]},\"version\":{\"type\":\"string\"}},\"required\":[\"cached\",\"plan\",\"signature\",\"source\",\"version\"]}},\"required\":[\"plan\"]},\"query\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"seed\":{\"type\":\"",
112
- "object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}}},\"required\":[\"results\",\"view\",\"suggestions\",\"mode\",\"maxScore\",\"query\"]},{\"type\":\"object\",\"properties\":{\"results\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributes\":{\"description\":\"Resolved attribute values for the ids sent in `returnAttributes`, keyed by attribute id. ABSENT entirely when `returnAttributes` was not sent. A key present with `null` means this variant carries no accepted value for that attribute — absent is not empty and neither is null: the three states are distinct on purpose. Values resolve with the normal variant-over-product precedence.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\",\"items\":{\"type\":\"string\"}},{\"type\":\"null\"}]}},\"brand\":{\"type\":\"string\"},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"imageSha256\":{\"description\":\"SHA-256 of the displayed image `imageUrl` points at, as a hex digest. Lets a caller key a cache or dedupe on the asset rather than its URL. ABSENT means no hash is on record, never that there is no image.\",\"type\":\"string\"},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"manufacturerCode\":{\"description\":\"The governed manufacturer/source-native item code from `variants.code` (for example \\\"K-7265-BV\\\") — the same key and the same value the full item publishes. It is what separates two cards a reader cannot otherwise tell apart: brand, product name and variant name are shared by 280,334 of 371,515 cardable variants, because `name` is the PRODUCT name and a paint product is a whole collection. ABSENT means no code is recorded for the variant, never an invented one.\",\"type\":\"string\"},\"name\":{\"type\":\"string\",\"description\":\"Product name (the full item's `product`).\"},\"productId\":{\"type\":[\"string\",\"null\"]},\"projectSaveCapability\":{\"type\":\"string\",\"const\":\"allowed\"},\"resultId\":{\"type\":\"string\",\"description\":\"This exact hit's attribution key — `<responseId>:<rank>`, where rank is 1-based within THIS response. Unique across pages, because each page is its own response with its own id. Store it verbatim next to the outcome; it is opaque, and `attribution.responseId` is the field to group by.\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"score\":{\"type\":\"number\"},\"sourceStatus\":{\"type\":\"string\",\"const\":\"provisional\"},\"variantCount\":{\"description\":\"How many eligible variants the row's product has, the same set `list_variants` pages, so a follow-up list of the product returns this many: the card's \\\"12 colourways\\\". ABSENT means the product is unknown or has no eligible variant.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"brandSlug\",\"imageUrl\",\"name\",\"productId\",\"score\",\"variantId\",\"variantName\"]}},\"view\":{\"type\":\"string\",\"const\":\"card\",\"description\":\"Projection echo — always 'card' on this envelope variant.\"},\"correctedQuery\":{\"description\":\"Present when a word no material carries was corrected before the search ran: `from` is the query as typed (normalised), `to` the phrasing the page shows results for.\",\"type\":\"object\",\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"type\":\"string\"}},\"required\":[\"from\",\"to\"]},\"attribution\":{\"type\":\"object\",\"properties\":{\"basis\":{\"type\":\"string\",\"enum\":[\"image\",\"colour\",\"lexical\",\"agent\",\"attribute\",\"match\"],\"description\":\"The ranking basis, groupable across both ranked routes. On /api/v1/search this is the envelope's `mode` verbatim; /api/v1/search/match reports 'match'. Group your stored outcomes by this field.\"},\"issuedAt\":{\"type\":\"string\",\"description\":\"ISO-8601 timestamp of when this response was assembled, so a stored outcome carries its own age without a second lookup.\"},\"responseId\":{\"type\":\"string\",\"description\":\"This response's stable id — the same value as the `X-Request-Id` header. Store it next to the outcome (an order, a save, a click) to join that outcome back to the ranking that produced",
113
- " it. Opaque: round-trip it verbatim, never parse it.\"}},\"required\":[\"basis\",\"issuedAt\",\"responseId\"],\"description\":\"Result attribution receipt. Present on every successful ranked response. Nothing on our side retains it — what you store IS the record.\"},\"suggestions\":{\"default\":[],\"description\":\"Always empty: the one search offers no refinements. Read nothing from it.\",\"maxItems\":0,\"type\":\"array\",\"items\":{\"not\":{}}},\"mode\":{\"type\":\"string\",\"enum\":[\"image\",\"colour\",\"lexical\",\"agent\",\"attribute\"],\"description\":\"What ordered the page: 'image' (a look-alike: image similarity to the seed), 'colour' (the words or the caller named a colour: colour distance inside that colour's family), 'lexical' (the query's words, ranked by text rank on the index), 'attribute' (no words left to rank on: the category and filters define the page), or 'agent' (the search agent chose these variants and their order; scores are rank-based, 1 for the first result falling linearly, and `maxScore` is 1).\"},\"maxScore\":{\"type\":\"number\"},\"note\":{\"type\":\"string\"},\"cursor\":{\"type\":\"string\"},\"timings\":{\"description\":\"Wall-clock milliseconds per step of the search, keyed by step id. The key set is open and depends on the path a query took, so read it by iterating rather than by naming a key. Present only when `explain` is set: diagnostic, not part of the ranking contract.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"number\"}},\"explain\":{\"description\":\"Present only under `explain`: the receipt of the plan the search ran on. Diagnostic, like `timings`.\",\"type\":\"object\",\"properties\":{\"plan\":{\"type\":\"object\",\"properties\":{\"cached\":{\"type\":\"boolean\"},\"plan\":{\"type\":\"object\",\"properties\":{\"brands\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"ids\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"names\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"phrase\":{\"type\":\"string\"}},\"required\":[\"ids\",\"names\",\"phrase\"]},{\"type\":\"null\"}]},\"category\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"label\":{\"type\":\"string\"},\"phrase\":{\"type\":\"string\"},\"productTypeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"label\",\"phrase\",\"productTypeIds\"]},{\"type\":\"null\"}]},\"colour\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"family12\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"familyId\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"oklab\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":3,\"maxItems\":3},\"phrase\":{\"type\":\"string\"},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"family12\",\"familyId\",\"hex\",\"oklab\",\"phrase\"]},{\"type\":\"null\"}]},\"corpusScope\":{\"type\":\"string\",\"enum\":[\"samplizeCatalogue\",\"materialBankOrderable\",\"materialBankNaOrderable\",\"materialBankNaAndCatalogue\",\"materialBankEuOrderable\",\"designShopOrderable\"]},\"excludeBrands\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"excludes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"phrase\":{\"type\":\"string\"},\"term\":{\"type\":\"string\"}},\"required\":[\"attributeId\",\"phrase\",\"term\"]}},\"leftover\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalised\":{\"type\":\"string\"},\"softAlone\":{\"type\":\"boolean\"},\"vendorColourNames\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"wants\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"fill\":{\"type\":\"number\"},\"phrase\":{\"type\":\"string\"},\"presence\":{\"type\":\"boolean\",\"const\":true},\"strength\":{\"type\":\"string\",\"enum\":[\"hard\",\"soft\"]},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"attributeId\",\"fill\",\"phrase\",\"strength\",\"terms\"]}}},\"required\":[\"brands\",\"category\",\"colour\",\"excludeBrands\",\"excludes\",\"leftover\",",
114
- "\"normalised\",\"softAlone\",\"vendorColourNames\",\"wants\"],\"description\":\"The plan the search ran on: the category, brands, wanted and excluded attribute terms (each hard or soft, with its fill), the colour, the words left for text, and the caller's corpus scope when one was sent.\"},\"signature\":{\"type\":\"string\"},\"source\":{\"type\":\"string\",\"enum\":[\"dictionary\",\"jev\"]},\"version\":{\"type\":\"string\"}},\"required\":[\"cached\",\"plan\",\"signature\",\"source\",\"version\"]}},\"required\":[\"plan\"]},\"query\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"seed\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}}},\"required\":[\"results\",\"view\",\"suggestions\",\"mode\",\"maxScore\",\"query\"]}]},\"links\":{\"type\":\"object\",\"properties\":{}},\"meta\":{\"type\":\"object\",\"properties\":{\"operationId\":{\"type\":\"string\",\"enum\":[\"search_materials_post\",\"search_materials_get\"]},\"requestId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"operationId\",\"requestId\"]},\"warnings\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}}},\"required\":[\"data\",\"links\",\"meta\",\"warnings\"]},\"SourceMaterialBatchReceipt\":{\"type\":\"object\",\"properties\":{\"batchId\":{\"type\":\"string\",\"description\":\"The stored batch id (`smb_…`).\"},\"sources\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"sourceId\":{\"type\":\"string\",\"description\":\"The stored file id (`smf_…`).\"},\"role\":{\"type\":\"string\",\"enum\":[\"brief\",\"reference_image\",\"document\",\"document_image\",\"inspiration_image\",\"unclassified\"],\"description\":\"The pipeline-assigned role. `unclassified` is a legitimate terminal value when the file could not be placed; clients should tolerate new values.\"},\"filename\":{\"type\":\"string\"},\"mediaType\":{\"type\":\"string\"},\"sha256\":{\"type\":\"string\",\"description\":\"Lowercase hex SHA-256 of the stored bytes.\"},\"bytes\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"pages\":{\"description\":\"PDF page count; null for images.\",\"anyOf\":[{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},{\"type\":\"null\"}]}},\"required\":[\"sourceId\",\"role\",\"filename\",\"mediaType\",\"sha256\",\"bytes\",\"pages\"]}}},\"required\":[\"batchId\",\"sources\"]},\"VariantAssetPage\":{\"type\":\"object\",\"properties\":{\"documentCoverage\":{\"description\":\"Brand document list state. Absent when documents are filtered out.\",\"type\":\"string\",\"enum\":[\"available\",\"none_declared\",\"not_ingested\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"appliesTo\":{\"description\":\"Only 'product': a product-wide document. Absent: this variant's own.\",\"type\":\"string\",\"const\":\"product\"},\"assetId\":{\"type\":\"string\",\"minLength\":1},\"availability\":{\"type\":\"string\",\"enum\":[\"available\",\"unknown\",\"unavailable\"],\"description\":\"available: MaterialGraph serves url. unknown: brand's link, unchecked.\"},\"byteSize\":{\"description\":\"Not on images; absent when unknown.\",\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"documentTypes\":{\"description\":\"Documents only; absent when unknown.\",\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"technical_data_sheet\",\"product_sheet\",\"technical_bulletin\",\"sustainability_report\",\"specification\",\"installation_guide\",\"care_maintenance_guide\",\"operation_manual\",\"warranty\",\"parts_list\",\"technical_drawing\",\"test_report\",\"certificate\",\"declaration_of_performance\",\"environmental_product_declaration\",\"health_product_declaration\",\"ingredient_disclosure\",\"safety_data_sheet\",\"brochure\",\"catalogue\",\"colour_finish_chart\",\"other\",\"unknown\"]}},\"height\":{\"description\":\"Images only; absent when unknown.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"imageRole\":{\"description\":\"Images only; absent when unknown.\",\"type\":\"string\",\"enum\":[\"product\",\"swatch\",\"detail\",\"scene\",\"technical\",\"colour_chart\",\"sample_collection\",\"other\",\"unknown\"]},\"kind\":{\"type\":\"string\",\"enum\":[\"image\",\"document\",\"cad\",\"bim\",\"model_3d\",\"texture\",\"archive\",\"other\",\"unknown\"]},\"name\":{\"description\":\"Not on images; absent when unknown.\",\"type\":\"string\"},\"presentation\":{\"description\":\"Images only; absent when unknown.\",\"typ",
115
- "e\":\"string\",\"enum\":[\"edge_to_edge\",\"packshot\",\"cutout_margin\",\"montage\",\"unknown\"]},\"url\":{\"description\":\"Absent when availability is unavailable.\",\"type\":\"string\"},\"width\":{\"description\":\"Images only; absent when unknown.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991}},\"required\":[\"assetId\",\"availability\",\"kind\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"nextCursor\":{\"type\":[\"string\",\"null\"]},\"returnedCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"totalMatches\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"nextCursor\",\"returnedCount\",\"totalMatches\"]},\"primaryAssetId\":{\"description\":\"The variant's primary image. Absent when it has none.\",\"type\":\"string\",\"minLength\":1}},\"required\":[\"items\",\"pageInfo\"]},\"WhoamiResponse\":{\"type\":\"object\",\"properties\":{\"principal\":{\"type\":\"string\",\"description\":\"The resolved principal for the credential (e.g. `apikey:read`).\"},\"scopes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"The scopes granted to this credential (e.g. `mg:read`).\"}},\"required\":[\"principal\",\"scopes\"]},\"__schema0\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"number\"},{\"type\":\"boolean\"},{\"type\":\"null\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/__schema0\"}},{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema0\"}}]}},\"operations\":{\"samplize_colorvec_cache\":{\"$ref\":\"#/$defs/SamplizeColorVecCache\"},\"samplize_catalogue_search\":{\"$ref\":\"#/$defs/SamplizeCatalogueSearchResponse\"},\"list_catalog_documents\":{\"$ref\":\"#/$defs/CatalogDocumentList\"},\"list_catalog_pages\":{\"$ref\":\"#/$defs/CatalogPageListResult\"},\"get_catalog_page_representation\":{\"$ref\":\"#/$defs/CataloguePageRepresentationReadResult\"},\"list_catalog_product_references\":{\"$ref\":\"#/$defs/CatalogProductReferenceReadResult\"},\"search_materials_post\":{\"$ref\":\"#/$defs/SearchResponse\"},\"match_material\":{\"anyOf\":[{\"$ref\":\"#/$defs/MatchMaterialResponse\"},{\"$ref\":\"#/$defs/MatchWorkflowResponse\"}]},\"plan_material_query\":{\"$ref\":\"#/$defs/MaterialQueryPlanResponse\"},\"samplize_catalogue_products\":{\"$ref\":\"#/$defs/SamplizeCataloguePage\"},\"search_materials_get\":{\"$ref\":\"#/$defs/SearchResponse\"},\"search_by_colour\":{\"$ref\":\"#/$defs/ByColourResponse\"},\"get_catalogue_references_batch\":{\"$ref\":\"#/$defs/CatalogueReferenceBatchResponse\"},\"list_catalogue_channel_collections\":{\"$ref\":\"#/$defs/CatalogueChannelCollectionsResponse\"},\"get_catalogue_document_access\":{\"$ref\":\"#/$defs/CatalogueDocumentAccessResult\"},\"list_material_blocks\":{\"$ref\":\"#/$defs/MaterialBlockProjection\"},\"list_variant_assets\":{\"$ref\":\"#/$defs/VariantAssetPage\"},\"list_material_documents\":{\"$ref\":\"#/$defs/ProductDocumentPage\"},\"list_schema_value_dictionaries\":{\"$ref\":\"#/$defs/SchemaValueDictionariesResponse\"},\"get_material_pairings\":{\"type\":\"object\",\"properties\":{\"seed\":{\"$ref\":\"#/$defs/MaterialTile\"},\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/PairingItem\"}},\"cospecCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"How many items came from real order evidence (the cospec arm).\"},\"skippedCandidates\":{\"description\":\"Candidates dropped at hydration for violating the material contract; present only when > 0. A malformed row costs itself, never the rail (MG-985).\",\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"ordering\":{\"description\":\"Graph-owned ranking contract; present only when `order` was requested.\",\"$ref\":\"#/$defs/PairingOrdering\"},\"nextCursor\":{\"description\":\"Opaque continuation when another ordered page exists.\",\"type\":\"string\"}},\"required\":[\"seed\",\"items\",\"cospecCount\"]},\"list_associated_finishes\":{\"$ref\":\"#/$defs/DeclaredAssociations\"},\"list_associated_products\":{\"$ref\":\"#/$defs/DeclaredAssociations\"},\"get_applicability\":{\"$ref\":\"#/$defs/ApplicabilityCollection\"},\"list_variants\":{\"$ref\":\"#/$defs/ListVariantsResponse\"},\"list_variant_facets\":{\"$ref\":\"#/$defs/ListVariantFacetsResponse\"},\"find_variants_by_colour\":{\"$ref\":\"#/$defs/FindVariantsByColourResponse\"},\"find_variants_by_vector\":{\"$ref\":\"#/$defs/FindVariantsByVectorResponse\"},\"res",
116
- "olve_variant\":{\"$ref\":\"#/$defs/ResolveVariantResponse\"},\"get_variant\":{\"$ref\":\"#/$defs/GetVariantResponse\"},\"resolve_colour_name\":{\"$ref\":\"#/$defs/ResolveColourResponse\"},\"catalog_list_attributes\":{\"$ref\":\"#/$defs/ListAttributesResponse\"},\"catalog_list_enum_values\":{\"$ref\":\"#/$defs/ListEnumValuesResponse\"},\"list_categories\":{\"$ref\":\"#/$defs/ListCategoriesResponse\"},\"get_category\":{\"$ref\":\"#/$defs/GetCategoryResponse\"},\"whoami\":{\"$ref\":\"#/$defs/WhoamiResponse\"},\"search_by_palette\":{\"$ref\":\"#/$defs/SearchByPaletteResponse\"},\"extract_image_palette\":{\"$ref\":\"#/$defs/ExtractPaletteResponse\"},\"list_brands\":{\"$ref\":\"#/$defs/BrandCatalogListPage\"},\"upload_source_material\":{\"$ref\":\"#/$defs/SourceMaterialBatchReceipt\"},\"create_public_run\":{\"$ref\":\"#/$defs/CreatePublicRunResponse\"},\"get_public_run\":{\"$ref\":\"#/$defs/PublicRunResponse\"},\"get_verdict_citation\":{\"type\":\"object\",\"properties\":{\"citationId\":{\"type\":\"string\",\"minLength\":1},\"source\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"enum\":[\"source_record\",\"source_material\",\"source_fact\",\"url\",\"asset\",\"download\",\"manual_note\",\"agent_output\"]},\"locator\":{\"type\":\"object\",\"properties\":{\"imageBox\":{\"type\":\"object\",\"properties\":{\"height\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"width\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"x\":{\"type\":\"number\"},\"y\":{\"type\":\"number\"}},\"required\":[\"height\",\"width\",\"x\",\"y\"]},\"page\":{\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"selector\":{\"type\":\"string\",\"minLength\":1},\"xPath\":{\"type\":\"string\",\"minLength\":1}}},\"publicPath\":{\"type\":\"string\",\"format\":\"starts_with\",\"pattern\":\"^\\\\/api\\\\/assets\\\\/.*\"},\"ref\":{\"type\":\"string\",\"minLength\":1},\"sourceAssetId\":{\"type\":\"string\",\"minLength\":1},\"sourceDownloadId\":{\"type\":\"string\",\"minLength\":1},\"sourceFactId\":{\"type\":\"string\",\"minLength\":1},\"sourceId\":{\"type\":\"string\",\"minLength\":1},\"title\":{\"type\":\"string\",\"minLength\":1},\"url\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"kind\",\"ref\"]},\"sourceType\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"citationId\",\"source\",\"sourceType\"]}}}",
79
+ "72% 0.040 145)'.\"}},\"required\":[\"family\",\"hex\",\"name\",\"oklch\"]},{\"type\":\"null\"}]},\"mood\":{\"type\":\"string\",\"description\":\"A one-word read of the palette, e.g. \\\"muted\\\", \\\"vibrant\\\", \\\"dark\\\".\"}},\"required\":[\"colors\",\"dominant\",\"mood\"]},{\"type\":\"null\"}]}},\"required\":[\"palette\"]},\"FindCompanionsResponse\":{\"type\":\"object\",\"properties\":{\"companions\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"colourFit\":{\"description\":\"Palette likeness to the seeds. Never reorders.\",\"type\":[\"number\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"lift\":{\"type\":\"number\",\"description\":\"Mean lift over the seeds it pairs with; above 1 is above average.\"},\"product\":{\"type\":\"string\"},\"reason\":{\"type\":\"string\",\"description\":\"Why it was suggested, in one line.\"},\"relation\":{\"type\":\"string\",\"enum\":[\"companion\",\"brand_sibling\",\"colourway\"],\"description\":\"companion is another brand; brand_sibling and colourway share the seed's.\"},\"seedMatchCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"How many seeds it was sampled with.\"},\"swatches\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"proportion\":{\"type\":\"number\"}},\"required\":[\"hex\",\"proportion\"]}},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"lift\",\"product\",\"reason\",\"relation\",\"seedMatchCount\",\"variantId\",\"variantName\"]}},\"excludedByCorpusScope\":{\"description\":\"Seed ids outside the materials catalogue.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"seeds\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"resolvedFrom\":{\"type\":\"string\",\"description\":\"The id or name this seed came from.\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"product\",\"resolvedFrom\",\"variantId\",\"variantName\"]}},\"unresolved\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"References that matched no variant.\"}},\"required\":[\"companions\",\"seeds\",\"unresolved\"]},\"FindVariantsByColourResponse\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"gatedOut\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Colour-matched candidates dropped by list_variants' hard filters or eligibility.\"},\"matches\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandId\":{\"type\":\"string\"},\"category\":{\"type\":\"string\"},\"code\":{\"type\":[\"string\",\"null\"]},\"colours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"distance\":{\"type\":\"number\",\"description\":\"OKLab distance to the matched swatch. Never a probability.\"},\"hex\":{\"type\":\"string\"},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Position in the request's `colours[]`.\"},\"proportion\":{\"type\":\"number\",\"description\":\"The matched swatch's share of its image, 0 to 1.\"},\"target\":{\"description\":\"Requested target share, palette only; null otherwise. Ranked by, not filtered.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"distance\",\"hex\",\"index\",\"proportion\",\"target\"]}},\"coverage\":{\"type\":\"number\",\"description\":\"Share of the request's colours this variant matched, 0 to 1. Never a probability.\"},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":\"string\"}},\"required\":[\"brand\",\"brandId\",\"category\",\"code\",\"colours\",\"coverage\",\"imageUrl\",\"product\",\"productId\",\"variantId\",\"variantName\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"endCursor\":{\"type\":[\"string\",\"null\"]},\"hasNextPage\":{\"type\":\"boolean\"},\"poolTruncated\":{\"type\":\"boolean\",\"description\":\"True when matches exist past the checked pool: add productTypeIds or brands.\"}},\"required\":[\"endCursor\",\"hasNextPage\",\"poolTruncated\"]},\"resolvedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"catalogueVariant\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"s",
80
+ "tring\",\"null\"]},\"product\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"color\",\"imageUrl\",\"product\",\"variantId\",\"variantName\"]},{\"type\":\"null\"}]},\"hex\":{\"type\":\"string\"},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"enum\":[\"point\",\"region\"],\"description\":\"region: a named meaning's own OKLCh bounds, kept — never collapsed to one hex.\"},\"share\":{\"description\":\"Renormalised share, image-extracted colours only; else null.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"catalogueVariant\",\"hex\",\"index\",\"kind\",\"share\"]}},\"unresolvedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"alternatives\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"libraryId\":{\"type\":\"string\"},\"libraryName\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"query\":{\"type\":\"string\"}},\"required\":[\"hex\",\"libraryId\",\"libraryName\",\"name\",\"query\"]}},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"input\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"alternatives\",\"index\",\"input\"]}},\"mode\":{\"type\":\"string\",\"const\":\"contains\"}},\"required\":[\"gatedOut\",\"matches\",\"pageInfo\",\"resolvedColours\",\"unresolvedColours\",\"mode\"]},{\"type\":\"object\",\"properties\":{\"gatedOut\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Colour-matched candidates dropped by list_variants' hard filters or eligibility.\"},\"matches\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandId\":{\"type\":\"string\"},\"category\":{\"type\":\"string\"},\"code\":{\"type\":[\"string\",\"null\"]},\"colours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"distance\":{\"type\":\"number\",\"description\":\"OKLab distance to the matched swatch. Never a probability.\"},\"hex\":{\"type\":\"string\"},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Position in the request's `colours[]`.\"},\"proportion\":{\"type\":\"number\",\"description\":\"The matched swatch's share of its image, 0 to 1.\"},\"target\":{\"description\":\"Requested target share, palette only; null otherwise. Ranked by, not filtered.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"distance\",\"hex\",\"index\",\"proportion\",\"target\"]}},\"coverage\":{\"type\":\"number\",\"description\":\"Share of the request's colours this variant matched, 0 to 1. Never a probability.\"},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":\"string\"}},\"required\":[\"brand\",\"brandId\",\"category\",\"code\",\"colours\",\"coverage\",\"imageUrl\",\"product\",\"productId\",\"variantId\",\"variantName\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"endCursor\":{\"type\":[\"string\",\"null\"]},\"hasNextPage\":{\"type\":\"boolean\"},\"poolTruncated\":{\"type\":\"boolean\",\"description\":\"True when matches exist past the checked pool: add productTypeIds or brands.\"}},\"required\":[\"endCursor\",\"hasNextPage\",\"poolTruncated\"]},\"resolvedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"catalogueVariant\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"color\",\"imageUrl\",\"product\",\"variantId\",\"variantName\"]},{\"type\":\"null\"}]},\"hex\":{\"type\":\"string\"},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"enum\":[\"point\",\"region\"],\"description\":\"region: a named meaning's own OKLCh bounds, kept — never collapsed to one hex.\"},\"share\":{\"description\":\"Renormalised share, image-extracted colours only; else null.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"catalogueVariant\",\"hex\",\"index\",\"kind\",\"share\"]}},\"unresolvedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"alternatives\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"librar",
81
+ "yId\":{\"type\":\"string\"},\"libraryName\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"query\":{\"type\":\"string\"}},\"required\":[\"hex\",\"libraryId\",\"libraryName\",\"name\",\"query\"]}},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"input\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"alternatives\",\"index\",\"input\"]}},\"mode\":{\"type\":\"string\",\"const\":\"palette\"}},\"required\":[\"gatedOut\",\"matches\",\"pageInfo\",\"resolvedColours\",\"unresolvedColours\",\"mode\"]},{\"type\":\"object\",\"properties\":{\"corpusScope\":{\"description\":\"The corpus the ranked candidates were drawn from — present ONLY when the request narrowed it. ABSENT means the whole graph. The reference is resolved unscoped either way.\",\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\",\"description\":\"What the scope admits, in one sentence, for a human reader.\"},\"scope\":{\"type\":\"string\",\"enum\":[\"all\",\"samplizeCatalogue\",\"materialBankOrderable\",\"materialBankNaOrderable\",\"materialBankNaAndCatalogue\",\"materialBankEuOrderable\",\"designShopOrderable\"],\"description\":\"Which corpus to answer from. samplizeCatalogue admits published US paint colours regardless of stock. ABSENT (or 'all') means the WHOLE GRAPH — every material MaterialGraph knows, orderable or not; absence is never a narrower default. Three transaction-oriented scopes gate on governed CHANNEL membership: 'materialBankNaOrderable' (Material Bank North America, ~277,000 materials), 'materialBankEuOrderable' (Material Bank Europe, ~65,000) and 'designShopOrderable' (DesignShop, ~34,000, with the products DesignShop hides from browse excluded). 'materialBankNaAndCatalogue' is the one-query union of Material Bank North America and the governed Catalogue editorial discovery corpus; that union does not by itself claim every member is transactable. 'materialBankOrderable' is NOT one of them: it selects materials carrying a Material Bank identity, which is a provenance signal rather than a channel one, and it admits 98.4% of the graph — use it to exclude crawl-sourced brands, not to mean orderable. A scope answers membership in its named governed corpus, never suitability: scope on channel, then refine on sector. Every scope is applied INSIDE the query: `limit` fills with eligible rows and `counts` describe the scoped corpus, which post-filtering a page cannot give you. An unknown value is a 400 naming it, never a silent fall back to the whole graph.\"}},\"required\":[\"description\",\"scope\"]},\"excludedByCorpusScope\":{\"description\":\"Real variant ids outside `corpusScope` or the materials catalogue.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"reference\":{\"type\":\"object\",\"properties\":{\"candidates\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandSlug\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"brandSlug\",\"color\",\"imageUrl\",\"product\",\"productId\",\"variantId\",\"variantName\"]}},\"colour\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"name\":{\"type\":[\"string\",\"null\"]},\"ref\":{\"type\":\"string\"}},\"required\":[\"hex\",\"name\",\"ref\"]},{\"type\":\"null\"}]},\"input\":{\"type\":\"object\",\"properties\":{\"colour\":{\"type\":\"string\"},\"material\":{\"type\":\"string\"},\"oklab\":{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"}},\"required\":[\"L\",\"a\",\"b\"]},\"variantId\":{\"type\":\"string\"}}},\"resolution\":{\"type\":\"string\",\"enum\":[\"resolved\",\"ambiguous\"]},\"seed\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandSlug\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"brandSlug\",\"color\",\"imageUrl\",\"product\",\"productId\",\"variantId\",\"variantName\"]},{\"type\":\"null\"}]}},\"required\":[\"candidates\",\"colour\",\"input\",\"resolution\",\"seed\"]},\"unresolved\":{\"type\":\"array\",\"ite",
82
+ "ms\":{\"type\":\"string\"}},\"matches\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandId\":{\"type\":\"string\"},\"code\":{\"type\":[\"string\",\"null\"]},\"colourSimilarity\":{\"type\":[\"number\",\"null\"]},\"distance\":{\"type\":[\"number\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"brandId\",\"code\",\"colourSimilarity\",\"distance\",\"imageUrl\",\"product\",\"productId\",\"variantId\",\"variantName\"]}},\"mode\":{\"type\":\"string\",\"const\":\"rerank\"},\"resolvedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"catalogueVariant\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"color\",\"imageUrl\",\"product\",\"variantId\",\"variantName\"]},{\"type\":\"null\"}]},\"hex\":{\"type\":\"string\"},\"index\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"enum\":[\"point\",\"region\"],\"description\":\"region: a named meaning's own OKLCh bounds, kept — never collapsed to one hex.\"},\"share\":{\"description\":\"Renormalised share, image-extracted colours only; else null.\",\"type\":[\"number\",\"null\"]}},\"required\":[\"catalogueVariant\",\"hex\",\"index\",\"kind\",\"share\"]}}},\"required\":[\"reference\",\"unresolved\",\"matches\",\"mode\",\"resolvedColours\"]}]},\"FindVariantsByVectorResponse\":{\"type\":\"object\",\"properties\":{\"excludedByCorpusScope\":{\"description\":\"Filtered variant ids outside the materials catalogue.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"category\":{\"type\":\"string\"},\"code\":{\"type\":[\"string\",\"null\"]},\"image\":{\"type\":[\"string\",\"null\"]},\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"materialBankId\":{\"type\":[\"string\",\"null\"]},\"name\":{\"type\":\"string\"},\"notApplicable\":{\"type\":\"object\",\"properties\":{\"attributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"description\":\"Requested blocks or attributes this product type does not carry.\"},\"preference\":{\"type\":\"object\",\"properties\":{\"matched\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"score\":{\"type\":\"number\"}},\"required\":[\"matched\",\"score\"]},\"product\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"specifications\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema0\"}}},\"url\":{\"type\":[\"string\",\"null\"]},\"variantCount\":{\"description\":\"Eligible variants of this product. Absent: none counted.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"variantId\":{\"type\":\"string\"},\"similarity\":{\"type\":\"number\",\"description\":\"Voyage cosine to the query. Ranks only; not a probability.\"}},\"required\":[\"category\",\"code\",\"brand\",\"materialBankId\",\"name\",\"product\",\"variantId\",\"similarity\"]}},\"mode\":{\"type\":\"string\",\"enum\":[\"text\",\"image\",\"text_and_image\"]},\"reference\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"url\",\"assetId\",\"variantId\",\"sourceId\"]}},\"required\":[\"id\",\"kind\"]},{\"type\":\"null\"}]},\"scan\":{\"type\":\"object\",\"properties\":{\"exhausted\":{\"type\":\"boolean\",\"description\":\"True when no further candidates match; false means more may exist.\"},\"read\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"rejected\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"route\":{\"type\":\"string\",\"enum\":[\"lane\",\"metadata\",\"allowlist\"]}},\"required\":[\"exhausted\",\"read\",\"rejected\",\"route\"]},\"timings\":{\"type\":\"object\",\"properties\":{\"embedMs\":{\"type\":\"number\"},\"filterMs\":{\"type\":\"number\"},\"referenceMs\":{\"type\":\"number\"},\"totalMs\":{\"type\":\"number\"},\"vectorMs\":{\"type\":\"number\"},\"verifyM",
83
+ "s\":{\"type\":\"number\"}},\"required\":[\"embedMs\",\"filterMs\",\"referenceMs\",\"totalMs\",\"vectorMs\",\"verifyMs\"]},\"unresolvedVariantIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"unstated\":{\"description\":\"Filtered attributes no variant in scope states at all.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"items\",\"mode\",\"reference\",\"scan\",\"timings\"]},\"GetCategoryResponse\":{\"type\":\"object\",\"properties\":{\"aliases\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"ancestors\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]}},\"children\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]}},\"description\":{\"type\":[\"string\",\"null\"]},\"formerNames\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"id\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"group\",\"product_type\"]},\"name\":{\"type\":\"string\"},\"productCategory\":{\"type\":\"object\",\"properties\":{\"concepts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"label\":{\"type\":\"string\"},\"match\":{\"description\":\"How the concept relates to this product type; absent for groups.\",\"type\":\"string\",\"enum\":[\"exact\",\"close\",\"broad\",\"narrow\"]},\"termId\":{\"type\":\"string\"},\"uri\":{\"type\":\"string\"}},\"required\":[\"label\",\"termId\",\"uri\"]}},\"recordValue\":{\"description\":\"The product_category a record holds when the category fixes it.\",\"type\":[\"string\",\"null\"]},\"status\":{\"type\":\"string\",\"enum\":[\"mapped\",\"conditional\",\"unmapped\"],\"description\":\"mapped: fixed by category; conditional: per record; unmapped: none.\"}},\"required\":[\"concepts\",\"recordValue\",\"status\"]}},\"required\":[\"aliases\",\"ancestors\",\"children\",\"description\",\"formerNames\",\"id\",\"kind\",\"name\",\"productCategory\"]},\"GetVariantResponse\":{\"type\":\"object\",\"properties\":{\"category\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"],\"description\":\"The primary product type.\"},\"code\":{\"description\":\"The brand's item code.\",\"type\":[\"string\",\"null\"]},\"image\":{\"description\":\"The primary product image, or null when there is none.\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"alt\":{\"type\":\"string\"},\"url\":{\"type\":\"string\"}},\"required\":[\"alt\",\"url\"]},{\"type\":\"null\"}]},\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"],\"description\":\"The brand. `id` is the slug get_brand takes.\"},\"name\":{\"type\":\"string\",\"description\":\"The variant's own name.\"},\"product\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"url\":{\"description\":\"The brand's page for it, or null when none is known.\",\"type\":[\"string\",\"null\"]},\"variantId\":{\"type\":\"string\"},\"materialBankId\":{\"description\":\"The variant's Material Bank SKU. Absent: none recorded.\",\"type\":\"string\"},\"notApplicable\":{\"type\":\"object\",\"properties\":{\"attributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"description\":\"Requested blocks or attributes this product type does not carry.\"},\"specifications\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema0\"}}}},\"required\":[\"category\",\"code\",\"image\",\"brand\",\"name\",\"product\",\"url\",\"variantId\"]},\"ListAttributesResponse\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"blockIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"description\":{\"type\":\"string\"},\"dictionaryId\":{\"type\":[\"string\",\"null\"]},\"filterOps\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"in\",\"not_in\",\"all\",\"exists\",\"missing\",\"eq\",\"gt\",\"gte\",\"lt\",\"lte\"]},\"description\":\"list_variants ops; empty when it cannot filter on it.\"},\"filterable\":{\"type\":\"boolean\"},\"id\":{\"type\":\"string\"},\"match\":{\"description\":\"Present only when the page answers a query.\",\"type\":\"object\",\"properties\":{\"distance\":{\"description\":\"Fuse distance, 0 best.\",\"type\":\"number\"},\"matchedText\":{\"type\":[\"string\",\"null\"]},\"method\":{\"t",
84
+ "ype\":\"string\",\"enum\":[\"exact\",\"alias\",\"fuzzy\",\"vector\"]},\"similarity\":{\"description\":\"Cosine similarity, 1 best.\",\"type\":\"number\"},\"valueId\":{\"description\":\"The dictionary term matchedText named exactly or by alias; present only for a value-tier match.\",\"type\":\"string\"}},\"required\":[\"matchedText\",\"method\"]},\"name\":{\"type\":\"string\"},\"statedBy\":{\"description\":\"Live variants in the categories stating this; absent without categoryIds.\",\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"unitId\":{\"type\":[\"string\",\"null\"]},\"valueKind\":{\"type\":\"string\"}},\"required\":[\"blockIds\",\"description\",\"dictionaryId\",\"filterOps\",\"filterable\",\"id\",\"name\",\"unitId\",\"valueKind\"]}},\"liveVariants\":{\"description\":\"Live variants across the requested categories; absent without categoryIds.\",\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"outsideScope\":{\"description\":\"Page one only: matches outside blockIds ranking above the best item.\",\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"blockIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"blockIds\",\"id\",\"name\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"endCursor\":{\"type\":[\"string\",\"null\"]},\"hasNextPage\":{\"type\":\"boolean\"}},\"required\":[\"endCursor\",\"hasNextPage\"]}},\"required\":[\"items\",\"pageInfo\"]},\"ListCategoriesResponse\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hasChildren\":{\"type\":\"boolean\"},\"id\":{\"type\":\"string\"},\"match\":{\"description\":\"Present only when the page answers a query.\",\"type\":\"object\",\"properties\":{\"matchedText\":{\"type\":[\"string\",\"null\"]},\"method\":{\"type\":\"string\",\"enum\":[\"exact\",\"alias\",\"fuzzy\",\"vector\"]}},\"required\":[\"matchedText\",\"method\"]},\"name\":{\"type\":\"string\"},\"parentId\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"hasChildren\",\"id\",\"name\",\"parentId\"]}},\"notice\":{\"description\":\"Present only when the query is refused as a category.\",\"type\":\"string\"},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"nextCursor\":{\"type\":[\"string\",\"null\"]},\"returnedCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"totalMatches\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"nextCursor\",\"returnedCount\",\"totalMatches\"]}},\"required\":[\"items\",\"pageInfo\"]},\"ListEnumValuesResponse\":{\"type\":\"object\",\"properties\":{\"dictionaryId\":{\"type\":[\"string\",\"null\"]},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"definition\":{\"type\":[\"string\",\"null\"]},\"dictionaryId\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"match\":{\"type\":\"object\",\"properties\":{\"distance\":{\"type\":\"number\"},\"matchedText\":{\"type\":[\"string\",\"null\"]},\"method\":{\"type\":\"string\",\"enum\":[\"exact\",\"alias\",\"fuzzy\",\"vector\"]},\"resolvedFrom\":{\"type\":\"string\"},\"similarity\":{\"type\":\"number\"}},\"required\":[\"matchedText\",\"method\"]},\"valueId\":{\"type\":\"string\"}},\"required\":[\"attributeIds\",\"definition\",\"dictionaryId\",\"label\",\"valueId\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"endCursor\":{\"type\":[\"string\",\"null\"]},\"hasNextPage\":{\"type\":\"boolean\"}},\"required\":[\"endCursor\",\"hasNextPage\"]}},\"required\":[\"dictionaryId\",\"items\",\"pageInfo\"]},\"ListVariantFacetsResponse\":{\"type\":\"object\",\"properties\":{\"matchedVariantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"facets\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"missingVariantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"const\":\"categorical\"},\"values\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"value\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"variantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991}},\"required\":[\"value\",\"label\",\"variantCount\"]}},\"hasMoreValues\":{\"type\":\"boolean\"}},\"required\":[\"attributeId\",\"name\",\"missingVariantCount\",\"kind\",\"values\",\"hasMoreValues\"]},{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},",
85
+ "\"missingVariantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"const\":\"boolean\"},\"values\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"value\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"variantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991}},\"required\":[\"value\",\"label\",\"variantCount\"]}},\"hasMoreValues\":{\"type\":\"boolean\"}},\"required\":[\"attributeId\",\"name\",\"missingVariantCount\",\"kind\",\"values\",\"hasMoreValues\"]},{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"missingVariantCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"kind\":{\"type\":\"string\",\"const\":\"numeric\"},\"min\":{\"type\":[\"number\",\"null\"]},\"max\":{\"type\":[\"number\",\"null\"]},\"unitId\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"attributeId\",\"name\",\"missingVariantCount\",\"kind\",\"min\",\"max\",\"unitId\"]}]}}},\"required\":[\"matchedVariantCount\",\"facets\"]},\"ListVariantsResponse\":{\"type\":\"object\",\"properties\":{\"excludedByCorpusScope\":{\"description\":\"Filtered variant ids outside the materials catalogue.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"category\":{\"type\":\"string\"},\"code\":{\"type\":[\"string\",\"null\"]},\"image\":{\"type\":[\"string\",\"null\"]},\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"materialBankId\":{\"description\":\"The variant's Material Bank SKU. Absent: none recorded.\",\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"notApplicable\":{\"type\":\"object\",\"properties\":{\"attributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"description\":\"Requested blocks or attributes this product type does not carry.\"},\"preference\":{\"type\":\"object\",\"properties\":{\"matched\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"score\":{\"type\":\"number\"}},\"required\":[\"matched\",\"score\"]},\"product\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"specifications\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema0\"}}},\"url\":{\"type\":[\"string\",\"null\"]},\"variantCount\":{\"description\":\"Eligible variants of this product. Absent: none counted.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"variantId\":{\"type\":\"string\"}},\"required\":[\"category\",\"code\",\"brand\",\"name\",\"product\",\"variantId\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"endCursor\":{\"type\":[\"string\",\"null\"]},\"hasNextPage\":{\"type\":\"boolean\"}},\"required\":[\"endCursor\",\"hasNextPage\"]},\"preferenceMatchesRemain\":{\"description\":\"False: nothing from this page on meets any optionalFilter.\",\"type\":\"boolean\"},\"unresolvedVariantIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"unstated\":{\"description\":\"Filtered attributes no variant in scope states at all.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"items\",\"pageInfo\"]},\"MaterialBlockProjection\":{\"type\":\"object\",\"properties\":{\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"canonicalBlockId\":{\"type\":\"string\"},\"canonicalBlockName\":{\"type\":\"string\"},\"fields\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"confidence\":{\"type\":\"number\"},\"displayValue\":{\"description\":\"The value dictionary's label for a single-term `value`. Absent when no label is on record; `value` stays the canonical token.\",\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"sourceBasis\":{\"type\":\"string\"},\"status\":{\"type\":\"string\",\"enum\":[\"verified\",\"partial\",\"missing\",\"not_applicable\"]},\"unit\":{\"type\":\"string\"},\"value\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"number\"},{\"type\":\"boolean\"},{\"type\":\"array\",\"items\":{}},{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]}},\"required\":[\"attributeId\",\"label\",\"status\",\"value\"]}},\"missingAttributeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"status\":{\"type\":\"string\",\"enum\":[\"verif",
86
+ "ied\",\"partial\",\"missing\",\"not_applicable\"]}},\"required\":[\"canonicalBlockId\",\"canonicalBlockName\",\"fields\",\"missingAttributeIds\",\"status\"]}},\"variantId\":{\"type\":\"string\"}},\"required\":[\"blocks\",\"variantId\"]},\"MaterialQueryPlanResponse\":{\"type\":\"object\",\"properties\":{\"cached\":{\"type\":\"boolean\",\"description\":\"True when the plan came from the plan cache.\"},\"correction\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"from\":{\"type\":\"string\",\"description\":\"The query as typed, normalised.\"},\"to\":{\"type\":\"string\",\"description\":\"The phrasing that was read: showing results for.\"},\"words\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"correction\":{\"type\":\"string\",\"minLength\":1},\"word\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"correction\",\"word\"]}}},\"required\":[\"from\",\"to\",\"words\"]},{\"type\":\"null\"}]},\"normalisedQuery\":{\"type\":\"string\"},\"plan\":{\"type\":\"object\",\"properties\":{\"brands\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"ids\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}},\"names\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}},\"phrase\":{\"type\":\"string\"}},\"required\":[\"ids\",\"names\",\"phrase\"]},{\"type\":\"null\"}]},\"category\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"label\":{\"type\":\"string\"},\"phrase\":{\"type\":\"string\"},\"productTypeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}}},\"required\":[\"label\",\"phrase\",\"productTypeIds\"]},{\"type\":\"null\"}]},\"colour\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"family12\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}},\"familyId\":{\"type\":\"string\",\"minLength\":1},\"hex\":{\"type\":\"string\",\"minLength\":1},\"oklab\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":3,\"maxItems\":3},\"phrase\":{\"type\":\"string\"}},\"required\":[\"family12\",\"familyId\",\"hex\",\"oklab\",\"phrase\"]},{\"type\":\"null\"}]},\"excludeBrands\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}},\"excludes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\",\"minLength\":1},\"phrase\":{\"type\":\"string\"},\"term\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"attributeId\",\"phrase\",\"term\"]}},\"leftover\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"Words left for the text query, in query order.\"},\"normalised\":{\"type\":\"string\"},\"softAlone\":{\"type\":\"boolean\",\"description\":\"True when nothing hard was read and no word was left, so the soft wants' words also go to text.\"},\"vendorColourNames\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"wants\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\",\"minLength\":1},\"fill\":{\"type\":\"number\",\"minimum\":0,\"description\":\"Share of the category's Variants that state this attribute.\"},\"phrase\":{\"type\":\"string\"},\"strength\":{\"type\":\"string\",\"enum\":[\"hard\",\"soft\"],\"description\":\"hard filters the page; soft only orders it, because too few Variants state the attribute.\"},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}}},\"required\":[\"attributeId\",\"fill\",\"phrase\",\"strength\",\"terms\"]}}},\"required\":[\"brands\",\"category\",\"colour\",\"excludeBrands\",\"excludes\",\"leftover\",\"normalised\",\"softAlone\",\"vendorColourNames\",\"wants\"]},\"rawQuery\":{\"type\":\"string\",\"minLength\":1},\"readingVersion\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The dictionaries' version the plan was read against.\"},\"requests\":{\"minItems\":1,\"maxItems\":1,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"cursor\":{\"description\":\"Opaque pagination token from the previous page of the same text. Pass it verbatim, or omit it for the first page.\",\"type\":\"string\",\"minLength\":1},\"limit\":{\"description\":\"Results in one page, at most 24. The search's own page size when omitted.\",\"type\":\"integer\",\"minimum\":1,\"maximum\":24},\"text\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":500,\"description\":\"The ask to search, as the planner phrased it.\"},\"view\":{\"description\":\"\\\"card\\\" (default) for the lean projection, \\\"full\\\" for every result field.\",\"type\":\"string\",\"enum\":[\"card\",\"full\"]}},\"required\":[\"text\"]}},\"source\":{\"type\":\"string\",\"enum\":[\"dictionary\",\"jev\"],\"description\":\"Who read the plan: the dictionar",
87
+ "ies, or the background Jev reading.\"},\"version\":{\"type\":\"string\",\"const\":\"2\"}},\"required\":[\"cached\",\"correction\",\"normalisedQuery\",\"plan\",\"rawQuery\",\"readingVersion\",\"requests\",\"source\",\"version\"]},\"MaterialTile\":{\"type\":\"object\",\"properties\":{\"availability\":{\"type\":\"string\",\"enum\":[\"available\",\"discontinued\",\"superseded\",\"unknown\"],\"description\":\"Orderability: 'available' (listed in the catalog of record), 'discontinued' (withdrawn from that catalog — not a reviewed manufacturer-discontinuation claim), 'superseded' (a reviewed successor relationship exists and the material is no longer listed), 'unknown' (never checked).\"},\"brand\":{\"type\":\"string\"},\"category\":{\"type\":[\"string\",\"null\"]},\"colour\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":[\"number\",\"null\"]},\"dominantHex\":{\"type\":[\"string\",\"null\"]},\"hsl\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"h\":{\"type\":\"number\",\"minimum\":0,\"exclusiveMaximum\":360},\"l\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"s\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1}},\"required\":[\"h\",\"l\",\"s\"]},{\"type\":\"null\"}]},\"oklab\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"l\":{\"type\":\"number\"}},\"required\":[\"a\",\"b\",\"l\"]},{\"type\":\"null\"}]},\"sourceBasis\":{\"description\":\"Where `dominantHex` — and the `hsl` derived from it — came from: 'declared' is the brand's own published colour, 'derived' was read out of product imagery. It does NOT cover `oklab`, `chroma` or `vibrancy`: those are statistics of the IMAGE and stay measured whatever the hex says. Only the record read resolves this; a tile omits the key, and absent means unresolved, never 'declared'.\",\"type\":\"string\",\"enum\":[\"catalog_feed\",\"declared\",\"derived\"]},\"vibrancy\":{\"type\":[\"number\",\"null\"]}},\"required\":[\"chroma\",\"dominantHex\",\"hsl\",\"oklab\",\"vibrancy\"]},\"colourName\":{\"description\":\"The accepted Colour Name attribute — the colourway's true name where variants.name collapsed to the product's; absent means the attribute is absent (MG-940).\",\"type\":\"string\"},\"imageSource\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"r2\",\"origin\"]},{\"type\":\"null\"}]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"availability\",\"brand\",\"category\",\"colour\",\"imageSource\",\"imageUrl\",\"product\",\"variantId\",\"variantName\"]},\"PairingItem\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"inScope\":{\"type\":[\"boolean\",\"null\"]},\"brandSlug\":{\"type\":\"string\"},\"category\":{\"type\":[\"string\",\"null\"]},\"color\":{\"type\":[\"string\",\"null\"]},\"customerCount\":{\"type\":\"number\"},\"demand\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"momentum\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"percentChange\":{\"type\":[\"number\",\"null\"]},\"priorSpecCount\":{\"type\":\"number\"},\"state\":{\"type\":\"string\",\"enum\":[\"rising\",\"fading\",\"stable\",\"emerging\",\"insufficient_volume\"]},\"trailingSpecCount\":{\"type\":\"number\"}},\"required\":[\"percentChange\",\"priorSpecCount\",\"state\",\"trailingSpecCount\"]},{\"type\":\"null\"}]},\"projectCount\":{\"type\":\"number\"},\"specCount\":{\"type\":\"number\"}},\"required\":[\"momentum\",\"projectCount\",\"specCount\"]},{\"type\":\"null\"}]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"lift\":{\"type\":\"number\"},\"liftLabel\":{\"type\":\"string\"},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"projectCount\":{\"type\":\"number\"},\"relation\":{\"type\":\"string\",\"enum\":[\"companion\",\"brand_sibling\",\"colourway\"]},\"topProjectTypes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"projectCount\":{\"type\":\"number\"},\"projectType\":{\"type\":\"string\"}},\"required\":[\"projectCount\",\"projectType\"]}},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]},\"ranking\":{\"type\":\"object\",\"properties\":{\"anchorColourSimilarity\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"anchorColourSimilarityMeasurable\":{\"type\":\"boolean\"},\"basis\":{\"type\":\"string\",\"const\":\"dominant_colour_oklab\"},\"lightness\":{\"anyOf\":[{\"type",
88
+ "\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"lightnessMeasurable\":{\"type\":\"boolean\"}},\"required\":[\"anchorColourSimilarity\",\"anchorColourSimilarityMeasurable\",\"basis\",\"lightness\",\"lightnessMeasurable\"]},\"source\":{\"type\":\"string\",\"const\":\"cospec\"}},\"required\":[\"brand\",\"brandSlug\",\"category\",\"color\",\"customerCount\",\"demand\",\"imageUrl\",\"lift\",\"liftLabel\",\"product\",\"productId\",\"projectCount\",\"topProjectTypes\",\"variantId\",\"variantName\",\"source\"]},{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"inScope\":{\"type\":[\"boolean\",\"null\"]},\"brandSlug\":{\"type\":\"string\"},\"category\":{\"type\":[\"string\",\"null\"]},\"color\":{\"type\":[\"string\",\"null\"]},\"customerCount\":{\"type\":\"number\"},\"demand\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"momentum\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"percentChange\":{\"type\":[\"number\",\"null\"]},\"priorSpecCount\":{\"type\":\"number\"},\"state\":{\"type\":\"string\",\"enum\":[\"rising\",\"fading\",\"stable\",\"emerging\",\"insufficient_volume\"]},\"trailingSpecCount\":{\"type\":\"number\"}},\"required\":[\"percentChange\",\"priorSpecCount\",\"state\",\"trailingSpecCount\"]},{\"type\":\"null\"}]},\"projectCount\":{\"type\":\"number\"},\"specCount\":{\"type\":\"number\"}},\"required\":[\"momentum\",\"projectCount\",\"specCount\"]},{\"type\":\"null\"}]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"lift\":{\"type\":\"number\"},\"liftLabel\":{\"type\":\"string\"},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":\"string\"},\"projectCount\":{\"type\":\"number\"},\"relation\":{\"type\":\"string\",\"enum\":[\"companion\",\"brand_sibling\",\"colourway\"]},\"topProjectTypes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"projectCount\":{\"type\":\"number\"},\"projectType\":{\"type\":\"string\"}},\"required\":[\"projectCount\",\"projectType\"]}},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]},\"ranking\":{\"type\":\"object\",\"properties\":{\"anchorColourSimilarity\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"anchorColourSimilarityMeasurable\":{\"type\":\"boolean\"},\"basis\":{\"type\":\"string\",\"const\":\"dominant_colour_oklab\"},\"lightness\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"lightnessMeasurable\":{\"type\":\"boolean\"}},\"required\":[\"anchorColourSimilarity\",\"anchorColourSimilarityMeasurable\",\"basis\",\"lightness\",\"lightnessMeasurable\"]},\"source\":{\"type\":\"string\",\"const\":\"considered\"}},\"required\":[\"brand\",\"brandSlug\",\"category\",\"color\",\"customerCount\",\"demand\",\"imageUrl\",\"lift\",\"liftLabel\",\"product\",\"productId\",\"projectCount\",\"topProjectTypes\",\"variantId\",\"variantName\",\"source\"]},{\"type\":\"object\",\"properties\":{\"availability\":{\"type\":\"string\",\"enum\":[\"available\",\"discontinued\",\"superseded\",\"unknown\"],\"description\":\"Orderability: 'available' (listed in the catalog of record), 'discontinued' (withdrawn from that catalog — not a reviewed manufacturer-discontinuation claim), 'superseded' (a reviewed successor relationship exists and the material is no longer listed), 'unknown' (never checked).\"},\"brand\":{\"type\":\"string\"},\"category\":{\"type\":[\"string\",\"null\"]},\"colour\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":[\"number\",\"null\"]},\"dominantHex\":{\"type\":[\"string\",\"null\"]},\"hsl\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"h\":{\"type\":\"number\",\"minimum\":0,\"exclusiveMaximum\":360},\"l\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"s\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1}},\"required\":[\"h\",\"l\",\"s\"]},{\"type\":\"null\"}]},\"oklab\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"l\":{\"type\":\"number\"}},\"required\":[\"a\",\"b\",\"l\"]},{\"type\":\"null\"}]},\"sourceBasis\":{\"description\":\"Where `dominantHex` — and the `hsl` derived from it — came from: 'declared' is the brand's own published colour, 'derived' was read out of product imagery. It does NOT cover `oklab`, `chroma` or `vibrancy`: those are statistics of the IMAGE and stay measured whatever the hex says. Only the record read resolves this; a tile omits the key, and absent means unresolved, never 'declared'.\",\"type\":\"string\",\"enum\":[\"catalog_feed\",\"declared\",\"derived\"]},\"vibrancy\":{\"type\":[\"number\",\"null\"]}},\"required\":[\"chroma\",\"dominantHex\",\"hsl\",\"oklab\",\"vibrancy\"]},\"colourName\":{\"description\":\"The ac",
89
+ "cepted Colour Name attribute — the colourway's true name where variants.name collapsed to the product's; absent means the attribute is absent (MG-940).\",\"type\":\"string\"},\"imageSource\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"r2\",\"origin\"]},{\"type\":\"null\"}]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"product\":{\"type\":\"string\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]},\"inScope\":{\"type\":[\"boolean\",\"null\"]},\"ranking\":{\"type\":\"object\",\"properties\":{\"anchorColourSimilarity\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"anchorColourSimilarityMeasurable\":{\"type\":\"boolean\"},\"basis\":{\"type\":\"string\",\"const\":\"dominant_colour_oklab\"},\"lightness\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"null\"}]},\"lightnessMeasurable\":{\"type\":\"boolean\"}},\"required\":[\"anchorColourSimilarity\",\"anchorColourSimilarityMeasurable\",\"basis\",\"lightness\",\"lightnessMeasurable\"]},\"score\":{\"type\":\"number\"},\"source\":{\"type\":\"string\",\"const\":\"colour\"}},\"required\":[\"availability\",\"brand\",\"category\",\"colour\",\"imageSource\",\"imageUrl\",\"product\",\"variantId\",\"variantName\",\"score\",\"source\"]}]},\"PairingOrdering\":{\"type\":\"object\",\"properties\":{\"anchorColourBasis\":{\"type\":\"string\",\"const\":\"one_minus_oklab_euclidean_distance\"},\"applied\":{\"type\":\"string\",\"enum\":[\"relevance\",\"lightness_asc\",\"lightness_desc\"]},\"colourSpace\":{\"type\":\"string\",\"const\":\"oklab\"},\"direction\":{\"type\":\"string\",\"enum\":[\"ascending\",\"descending\"]},\"lightnessRange\":{\"type\":\"object\",\"properties\":{\"max\":{\"type\":\"number\",\"const\":1},\"min\":{\"type\":\"number\",\"const\":0}},\"required\":[\"max\",\"min\"]},\"missingValues\":{\"type\":\"string\",\"const\":\"last\"},\"requested\":{\"type\":\"string\",\"enum\":[\"relevance\",\"lightness_asc\",\"lightness_desc\"]},\"tieBreak\":{\"type\":\"string\",\"const\":\"variantId_asc\"}},\"required\":[\"anchorColourBasis\",\"applied\",\"colourSpace\",\"direction\",\"lightnessRange\",\"missingValues\",\"requested\",\"tieBreak\"]},\"ProductDocumentPage\":{\"type\":\"object\",\"properties\":{\"coverage\":{\"type\":\"object\",\"properties\":{\"productUnion\":{\"type\":\"object\",\"properties\":{\"declaredCount\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},{\"type\":\"null\"}]},\"exact\":{\"type\":\"boolean\"},\"readableCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"state\":{\"type\":\"string\",\"enum\":[\"available\",\"none_declared\",\"not_ingested\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]}},\"required\":[\"declaredCount\",\"exact\",\"readableCount\",\"state\"]},\"requestedVariant\":{\"type\":\"object\",\"properties\":{\"declaredCount\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},{\"type\":\"null\"}]},\"exact\":{\"type\":\"boolean\"},\"readableCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"state\":{\"type\":\"string\",\"enum\":[\"available\",\"none_declared\",\"not_ingested\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]}},\"required\":[\"declaredCount\",\"exact\",\"readableCount\",\"state\"]},\"sources\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"declaredCount\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},{\"type\":\"null\"}]},\"exact\":{\"type\":\"boolean\"},\"readableCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"scope\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"product\"}},\"required\":[\"id\",\"kind\"]},{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"variant\"}},\"required\":[\"id\",\"kind\"]}]},\"source\":{\"type\":\"object\",\"properties\":{\"authority\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"minLength\":1},\"revision\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"authority\",\"id\",\"revision\"]},\"state\":{\"type\":\"string\",\"enum\":[\"available\",\"none_declared\",\"not_ingested\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]}},\"required\":[\"declaredCount\",\"exact\",\"readableCount\",\"scope\",\"source\",\"state\"]}}},\"required\":[\"productUnion\",\"requestedVariant\",\"sources\"]},\"docume",
90
+ "nts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"appliesToRequestedVariant\":{\"type\":\"boolean\"},\"contentType\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"declarations\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"readable\":{\"type\":\"boolean\"},\"scope\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"product\"}},\"required\":[\"id\",\"kind\"]},{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"variant\"}},\"required\":[\"id\",\"kind\"]}]},\"source\":{\"type\":\"object\",\"properties\":{\"authority\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"minLength\":1},\"revision\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"authority\",\"id\",\"revision\"]},\"status\":{\"type\":\"string\",\"enum\":[\"downloaded\",\"linked_not_downloaded\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]}},\"required\":[\"readable\",\"scope\",\"source\",\"status\"]}},\"declaredScopes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"product\"}},\"required\":[\"id\",\"kind\"]},{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"variant\"}},\"required\":[\"id\",\"kind\"]}]}},\"documentTypes\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"technical_data_sheet\",\"product_sheet\",\"technical_bulletin\",\"sustainability_report\",\"specification\",\"installation_guide\",\"care_maintenance_guide\",\"operation_manual\",\"warranty\",\"parts_list\",\"technical_drawing\",\"test_report\",\"certificate\",\"declaration_of_performance\",\"environmental_product_declaration\",\"health_product_declaration\",\"ingredient_disclosure\",\"safety_data_sheet\",\"brochure\",\"catalogue\",\"colour_finish_chart\",\"other\",\"unknown\"]}},\"fileExtension\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"id\":{\"type\":\"string\",\"minLength\":1},\"originalName\":{\"type\":\"string\",\"minLength\":1},\"scope\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"inherited\":{\"type\":\"boolean\"},\"kind\":{\"type\":\"string\",\"enum\":[\"product\",\"variant\"]}},\"required\":[\"id\",\"inherited\",\"kind\"]},\"source\":{\"type\":\"object\",\"properties\":{\"authority\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"minLength\":1},\"revision\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"authority\",\"id\",\"revision\"]},\"status\":{\"type\":\"string\",\"enum\":[\"downloaded\",\"linked_not_downloaded\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]},\"url\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"variantAttribution\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}}},\"required\":[\"appliesToRequestedVariant\",\"contentType\",\"declarations\",\"declaredScopes\",\"fileExtension\",\"id\",\"originalName\",\"scope\",\"source\",\"status\",\"url\",\"variantAttribution\"]}},\"nextCursor\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"totalDocuments\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"variantId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"coverage\",\"documents\",\"nextCursor\",\"totalDocuments\",\"variantId\"]},\"PublicRun\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"workflowId\":{\"type\":\"string\",\"description\":\"The workflow this run belongs to, the same id its path names.\"},\"clientReference\":{\"type\":[\"string\",\"null\"]},\"status\":{\"type\":\"string\",\"enum\":[\"queued\",\"claimed\",\"running\",\"suspended\",\"succeeded\",\"failed\",\"canceled\"]},\"redactedInputJson\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"redactedOutputJson\":{\"anyOf\":[{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]},\"usageJson\":{\"anyOf\":[{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]},\"artifactRefs\":{\"anyOf\":[{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\"},\"ref\":{\"type\":\"string\"}},\"required\":[\"kind\",\"ref\"]}},{\"type\":\"null\"}]},\"failureJson\":{\"anyOf\":[{\"$ref\":\"#/$defs/PublicRunFailure\"},{\"type\":\"null\"}]},\"suspensionPayload\":{\"description\":\"The curren",
91
+ "t typed question payload while `status` is `suspended`; null otherwise. The same exact payload is retained on the `suspended` ledger event.\",\"anyOf\":[{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]},\"suspensionStepId\":{\"description\":\"The step awaiting input while `status` is `suspended` — pass it back as `stepId` when resuming, so a stale client cannot resume a step the run has already moved past. Read `suspensionPayload` for the current typed question. The same exact payload is retained on the `suspended` ledger event for event-stream consumers.\",\"type\":[\"string\",\"null\"]},\"eventCursor\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"attempts\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"startedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"},{\"type\":\"null\"}]},\"cancellationRequestedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"},{\"type\":\"null\"}]},\"completedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"},{\"type\":\"null\"}]},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"},\"updatedAt\":{\"type\":\"string\",\"format\":\"date-time\",\"pattern\":\"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d(?:\\\\.\\\\d+)?(?:Z))$\"}},\"required\":[\"id\",\"workflowId\",\"clientReference\",\"status\",\"redactedInputJson\",\"redactedOutputJson\",\"usageJson\",\"artifactRefs\",\"failureJson\",\"suspensionPayload\",\"suspensionStepId\",\"eventCursor\",\"attempts\",\"startedAt\",\"cancellationRequestedAt\",\"completedAt\",\"createdAt\",\"updatedAt\"]},\"PublicRunFailure\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"retryable\":{\"type\":\"boolean\"},\"detail\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}}},\"required\":[\"code\",\"message\",\"retryable\"]},\"PublicRunResponse\":{\"type\":\"object\",\"properties\":{\"run\":{\"$ref\":\"#/$defs/PublicRun\"}},\"required\":[\"run\"]},\"ResolveColourResponse\":{\"type\":\"object\",\"properties\":{\"alternatives\":{\"description\":\"Explicit manufacturer choices when a paint name is ambiguous; never selected automatically.\",\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"libraryId\":{\"type\":\"string\"},\"libraryName\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"query\":{\"type\":\"string\"}},\"required\":[\"hex\",\"libraryId\",\"libraryName\",\"name\",\"query\"]}},\"genericResolution\":{\"description\":\"Generic colour meaning only; paint identity is reported by match.\",\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"confidence\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"input\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"const\":\"resolved\"},\"others\":{\"maxItems\":4,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"band\":{\"type\":\"string\",\"enum\":[\"inside\",\"near\",\"far\"]},\"family\":{\"type\":\"string",
92
+ "\",\"enum\":[\"white\",\"cream\",\"gray\",\"black\",\"beige\",\"taupe\",\"brown\",\"red\",\"orange\",\"yellow\",\"green\",\"teal\",\"blue\",\"purple\",\"pink\"]},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\",\"minLength\":1},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"band\",\"family\",\"hex\",\"id\",\"name\",\"range\"]}},\"principal\":{\"type\":\"object\",\"properties\":{\"band\":{\"type\":\"string\",\"enum\":[\"inside\",\"near\",\"far\"]},\"family\":{\"type\":\"string\",\"enum\":[\"white\",\"cream\",\"gray\",\"black\",\"beige\",\"taupe\",\"brown\",\"red\",\"orange\",\"yellow\",\"green\",\"teal\",\"blue\",\"purple\",\"pink\"]},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\",\"minLength\":1},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"band\",\"family\",\"hex\",\"id\",\"name\",\"range\"]},\"source\":{\"type\":\"string\",\"enum\":[\"name\",\"family\",\"composed\",\"hex\",\"reference\",\"semantic\"]}},\"required\":[\"confidence\",\"input\",\"kind\",\"others\",\"principal\",\"source\"]},{\"type\":\"object\",\"properties\":{\"input\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"const\":\"unresolved\"},\"reason\":{\"type\":\"string\",\"enum\":[\"unknown-term\",\"ambiguous-modifier\",\"contradictory-modifiers\",\"unsupported-base\",\"empty-range\",\"unrepresentable-color\"]},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"input\",\"kind\",\"reason\",\"terms\"]}]},\"match\":{\"description\":\"The resolved colour, or null when nothing resolved.\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"The resolved `#rrggbb` hex.\"},\"name\":{\"type\":\"string\",\"description\":\"The resolved display name (echoes the query when unnamed).\"},\"code\":{\"description\":\"The code the library gives the colour (e.g. \\\"OC-17\\\", \\\"7016\\\"). Present only on a library hit.\",\"type\":\"string\"},\"libraryId\":{\"description\":\"The ColorScope library the colour resolved in (e.g. \\\"benjamin-moore\\\", \\\"ral\\\"). A library is not necessarily a brand: read `libraryType`. Absent for a hex, and for a colour word or semantic match that resolved without a library.\",\"type\":\"string\"},\"libraryType\":{\"description\":\"The type ColorScope declares for `libraryId`: `brand` is a paint brand's paint, `reference` a colour standard (RAL, Pantone, HKS), `core` ColorScope's descriptive vocabulary. Present exactly when `libraryId` is. Only a `brand` hit is looked up in the catalogue.\",\"type\":\"string\",\"enum\":[\"brand\",\"consumer\",\"core\",\"reference\"]},\"matchTarget\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"hasSelection\":{\"type\":\"boolean\",\"const\":false},\"type\":{\"type\":\"string\",\"const\":\"none\"}},\"required\":[\"hasSelection\",\"type\"]},{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"hasSelection\":{\"type\":\"boolean\",\"const\":true},\"label\":{\"type\":\"string\"},\"previewColors\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"type\":{\"type\":\"string\",\"const\":\"oklab\"}},\"required\":[\"L\",\"a\",\"b\",\"hasSelection\",\"label\",\"previewColors\",\"type\"]},{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},",
93
+ "\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"hasSelection\":{\"type\":\"boolean\",\"const\":true},\"label\":{\"type\":\"string\"},\"previewColors\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"range\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"representative\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"}},\"required\":[\"hex\"]},\"type\":{\"type\":\"string\",\"const\":\"range\"}},\"required\":[\"L\",\"a\",\"b\",\"hasSelection\",\"label\",\"previewColors\",\"range\",\"representative\",\"type\"]}]},\"variant\":{\"description\":\"Whether the named paint is a variant in the catalogue. Only a colour that resolved in a `brand` library is looked up. The lookup is exact (brand paint names and codes), global, and independent of `corpusScope`, which only sets each variant's `inScope`.\",\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\",\"slug\"],\"description\":\"The variant's brand exactly as stored, suspect or not.\"},\"inScope\":{\"description\":\"Whether this variant is in the requested `corpusScope`. Null when no `corpusScope` was passed. The lookup itself is never narrowed by scope.\",\"type\":[\"boolean\",\"null\"]},\"parentageSuspect\":{\"type\":\"boolean\",\"description\":\"True when the stored brand is Samplize, a sampling channel, and the listing is not Samplize's own merchandise: the colour is another brand's, so do not report `brand` as who made it. The variant is still returned and still the right one for the name.\"},\"variantId\":{\"type\":\"string\",\"description\":\"The variant id. Opaque; never parse it.\"},\"status\":{\"type\":\"string\",\"const\":\"matched\",\"description\":\"The name is one brand's paint and one variant carries it.\"}},\"required\":[\"brand\",\"inScope\",\"parentageSuspect\",\"variantId\",\"status\"]},{\"type\":\"object\",\"properties\":{\"candidates\":{\"minItems\":2,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\",\"slug\"],\"description\":\"The variant's brand exactly as stored, suspect or not.\"},\"inScope\":{\"description\":\"Whether this variant is in the requested `corpusScope`. Null when no `corpusScope` was passed. The lookup itself is never narrowed by scope.\",\"type\":[\"boolean\",\"null\"]},\"parentageSuspect\":{\"type\":\"boolean\",\"description\":\"True when the stored brand is Samplize, a sampling channel, and the listing is not Samplize's own merchandise: the colour is another brand's, so do not report `brand` as who made it. The variant is still returned and still the right one for the name.\"},\"variantId\":{\"type\":\"string\",\"description\":\"The variant id. Opaque; never parse it.\"}},\"required\":[\"brand\",\"inScope\",\"parentageSuspect\",\"variantId\"]},\"description\":\"Every variant that carries the paint, catalogue order.\"},\"status\":{\"type\":\"string\",\"const\":\"ambiguous\",\"description\":\"The name is one brand's paint and more than one variant carries it, typically once per product line. Never picked between.\"}},\"required\":[\"candidates\",\"status\"]},{\"type\":\"object\",\"properties\":{\"status\":{\"type\":\"string\",\"const\":\"not-in-catalogue\",\"description\":\"The name is one brand's paint and no variant in the catalogue carries it. A looked-up absence, distinct from `not-looked-up`.\"}},\"required\":[\"status\"]},{\"type\":\"object\",\"properties\":{\"reason\":{\"type\":\"string\",\"enum\":[\"reference-colour\",\"descriptive-colour\",\"no-paint-identity\",\"generic-colour\",\"several-paints\"],\"description\":\"`reference-colou",
94
+ "r`: the name resolved to a colour standard (RAL, Pantone, HKS), which no brand's variant carries. `descriptive-colour`: the name resolved to a descriptive colour (\\\"sage\\\", \\\"warm terracotta\\\"), not a paint. `no-paint-identity`: the name is not exactly any brand's paint name or code, or it is a hex. `generic-colour`: the name is a colour word brands also use as a paint name; qualify it with a brand. `several-paints`: the name is more than one brand's paint; qualify it with a brand.\"},\"status\":{\"type\":\"string\",\"const\":\"not-looked-up\",\"description\":\"The catalogue was not searched; there was no one brand's paint to find.\"}},\"required\":[\"reason\",\"status\"]}]}},\"required\":[\"hex\",\"name\",\"matchTarget\",\"variant\"]},{\"type\":\"null\"}]},\"rangeSamples\":{\"description\":\"The range drawn as a lightness ramp at the resolved colour's own hue and chroma, dark to light. Illustrative members of the range, never additional target colours.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"genericResolution\",\"match\"]},\"ResolveVariantResponse\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"evidence\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"detail\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"brand-url\",\"brand-homepage\",\"brand-code\",\"visible-label\"]},\"url\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"detail\",\"kind\"]}},\"receipt\":{\"type\":\"object\",\"properties\":{\"normalizationSteps\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalizedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"},\"submittedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"normalizationSteps\",\"normalizedUrl\",\"submittedUrl\"]},\"outcome\":{\"type\":\"string\",\"const\":\"identified\"},\"subject\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"code\":{\"type\":\"string\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"variant\"},\"name\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"kind\",\"name\"]}},\"required\":[\"evidence\",\"outcome\",\"subject\"]},{\"type\":\"object\",\"properties\":{\"evidence\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"detail\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"brand-url\",\"brand-homepage\",\"brand-code\",\"visible-label\"]},\"url\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"detail\",\"kind\"]}},\"receipt\":{\"type\":\"object\",\"properties\":{\"normalizationSteps\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalizedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"},\"submittedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"normalizationSteps\",\"normalizedUrl\",\"submittedUrl\"]},\"outcome\":{\"type\":\"string\",\"const\":\"placed\"},\"subject\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"code\":{\"type\":\"string\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"const\":\"brand\"},\"name\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"kind\",\"name\"]}},\"required\":[\"evidence\",\"outcome\",\"subject\"]},{\"type\":\"object\",\"properties\":{\"evidence\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"detail\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"brand-url\",\"brand-homepage\",\"brand-code\",\"visible-label\"]},\"url\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"detail\",\"kind\"]}},\"receipt\":{\"type\":\"object\",\"properties\":{\"normalizationSteps\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalizedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"},\"submittedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"normalizationSteps\",\"normalizedUrl\",\"submittedUrl\"]},\"candidates\":{\"minItems\":1,\"maxItems\":20,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\"}},\"required\":[\"id\",\"name\"]},\"code\":{\"type\":\"string\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"kind\":{\"type\":\"string\",\"enum\":[\"variant\",\"bran",
95
+ "d\"]},\"name\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"kind\",\"name\"]}},\"outcome\":{\"type\":\"string\",\"const\":\"ambiguous\"},\"truncated\":{\"type\":\"boolean\"}},\"required\":[\"evidence\",\"candidates\",\"outcome\",\"truncated\"]},{\"type\":\"object\",\"properties\":{\"evidence\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"detail\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"enum\":[\"brand-url\",\"brand-homepage\",\"brand-code\",\"visible-label\"]},\"url\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"detail\",\"kind\"]}},\"receipt\":{\"type\":\"object\",\"properties\":{\"normalizationSteps\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalizedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"},\"submittedUrl\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"}},\"required\":[\"normalizationSteps\",\"normalizedUrl\",\"submittedUrl\"]},\"outcome\":{\"type\":\"string\",\"const\":\"unresolved\"},\"reason\":{\"type\":\"string\",\"enum\":[\"no-stored-url\",\"no-code-match\"]}},\"required\":[\"evidence\",\"outcome\",\"reason\"]}]},\"SamplizeCataloguePage\":{\"type\":\"object\",\"properties\":{\"complete\":{\"type\":\"boolean\"},\"corpusScope\":{\"type\":\"string\",\"const\":\"samplizeCatalogue\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"}},\"required\":[\"name\",\"slug\"]},\"code\":{\"type\":\"string\"},\"collectionMemberships\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"handle\":{\"type\":\"string\"},\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"algolia_shopify_products\"},\"sourceCollectionId\":{\"type\":\"string\"},\"url\":{\"type\":\"string\"}},\"required\":[\"handle\",\"observedAt\",\"publisher\",\"source\",\"sourceCollectionId\",\"url\"]}},\"colourAnalysis\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"demand\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"algolia_shopify_products\"},\"sourceUrl\":{\"type\":\"string\"},\"field\":{\"type\":\"string\",\"const\":\"recently_ordered_count\"},\"grain\":{\"type\":\"string\",\"const\":\"shopify_variant\"},\"recentlyOrderedCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"sourceVariantId\":{\"type\":\"string\"},\"window\":{\"type\":\"null\"}},\"required\":[\"observedAt\",\"publisher\",\"source\",\"sourceUrl\",\"field\",\"grain\",\"recentlyOrderedCount\",\"sourceVariantId\",\"window\"]},{\"type\":\"null\"}]},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9A-F]{6}$\"},\"hexObservations\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"differsFromSelected\":{\"type\":\"boolean\"},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9A-F]{6}$\"},\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\"},\"source\":{\"type\":\"string\"},\"sourceBasis\":{\"type\":\"string\"},\"sourceUrl\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"differsFromSelected\",\"hex\",\"observedAt\",\"publisher\",\"source\",\"sourceBasis\",\"sourceUrl\"]}},\"hexSource\":{\"type\":\"object\",\"properties\":{\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"snowflake_product_tags\"},\"url\":{\"type\":\"string\"}},\"required\":[\"publisher\",\"source\",\"url\"]},\"lrv\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":100},{\"type\":\"null\"}]},\"lrvObservations\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"algolia_shopify_products\"},\"sourceUrl\":{\"type\":\"string\"},\"field\":{\"type\":\"string\"},\"value\":{\"type\":\"number\",\"minimum\":0,\"maximum\":100}},\"required\":[\"observedAt\",\"publisher\",\"source\",\"sourceUrl\",\"field\",\"value\"]}},\"lrvSource\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"algolia_shopify_products\"},\"sourceUrl\":{\"type\":\"string\"},\"field\":{\"type\":\"string\"},\"value\":{\"type\":\"number\",\"minimum\":0,\"maximum\":100}},\"required\":[\"observedAt\",\"publisher\",\"source\",\"sourceUrl\",\"field\",\"value\"]},{\"type\":\"null\"}]},\"name\":{\"type\":\"string\"}",
96
+ ",\"oklab\":{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"}},\"required\":[\"L\",\"a\",\"b\"]},\"productId\":{\"type\":\"string\"},\"publishedHexes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"differsFromSelected\":{\"type\":\"boolean\"},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9A-F]{6}$\"},\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\"},\"source\":{\"type\":\"string\"},\"sourceBasis\":{\"type\":\"string\"},\"sourceUrl\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"differsFromSelected\",\"hex\",\"observedAt\",\"publisher\",\"source\",\"sourceBasis\",\"sourceUrl\"]}},\"sizeVariants\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"demand\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"observedAt\":{\"type\":[\"string\",\"null\"]},\"publisher\":{\"type\":\"string\",\"const\":\"Samplize\"},\"source\":{\"type\":\"string\",\"const\":\"algolia_shopify_products\"},\"sourceUrl\":{\"type\":\"string\"},\"field\":{\"type\":\"string\",\"const\":\"recently_ordered_count\"},\"grain\":{\"type\":\"string\",\"const\":\"shopify_variant\"},\"recentlyOrderedCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"sourceVariantId\":{\"type\":\"string\"},\"window\":{\"type\":\"null\"}},\"required\":[\"observedAt\",\"publisher\",\"source\",\"sourceUrl\",\"field\",\"grain\",\"recentlyOrderedCount\",\"sourceVariantId\",\"window\"]},{\"type\":\"null\"}]},\"inventoryAvailable\":{\"type\":\"boolean\"},\"price\":{\"type\":[\"number\",\"null\"]},\"sku\":{\"type\":[\"string\",\"null\"]},\"sourceVariantId\":{\"type\":\"string\"},\"title\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"demand\",\"inventoryAvailable\",\"price\",\"sku\",\"sourceVariantId\",\"title\"]}},\"sourceProductId\":{\"type\":\"string\"},\"url\":{\"type\":\"string\"},\"variantId\":{\"type\":\"string\"}},\"required\":[\"brand\",\"code\",\"collectionMemberships\",\"colourAnalysis\",\"demand\",\"hex\",\"hexObservations\",\"hexSource\",\"lrv\",\"lrvObservations\",\"lrvSource\",\"name\",\"oklab\",\"productId\",\"publishedHexes\",\"sizeVariants\",\"sourceProductId\",\"url\",\"variantId\"]}},\"nextCursor\":{\"type\":[\"string\",\"null\"]},\"schemaVersion\":{\"type\":\"number\",\"const\":2},\"source\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"sourceVersion\":{\"type\":\"string\"},\"total\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991}},\"required\":[\"complete\",\"corpusScope\",\"items\",\"nextCursor\",\"schemaVersion\",\"source\",\"sourceVersion\",\"total\"]},\"SamplizeCatalogueSearchResponse\":{\"type\":\"object\",\"properties\":{\"basis\":{\"type\":\"string\",\"enum\":[\"published-colour-similarity\",\"description-retrieval\",\"image-colour-distribution\",\"named-colour-similarity\"]},\"countBasis\":{\"type\":\"string\",\"enum\":[\"complete-catalogue\",\"retrieved-pool\"]},\"counts\":{\"type\":\"object\",\"properties\":{\"family\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"lightness\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"intensity\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"brand\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}}},\"required\":[\"family\",\"lightness\",\"intensity\",\"brand\"]},\"dictionaryVersion\":{\"type\":\"string\"},\"eligibleCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"embeddingVersion\":{\"type\":\"string\"},\"groups\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"proportion\":{\"type\":\"number\"},\"quota\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"ids\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"shortfall\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991}},\"required\":[\"hex\",\"proportion\",\"quota\",\"ids\",\"shortfall\"]}},\"ids\":{\"maxItems\":100,\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"limited\":{\"type\":\"boolean\"},\"rankingVersion\":{\"type\":\"string\"},\"sourceVersion\":{\"type\":\"string\"},\"target\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"confidence\":{\"type\":\"number\"},\"hex\":{\"type\":\"string\"},\"libraryId\":{\"t",
97
+ "ype\":\"string\"},\"matchTarget\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"hasSelection\":{\"type\":\"boolean\",\"const\":false},\"type\":{\"type\":\"string\",\"const\":\"none\"}},\"required\":[\"hasSelection\",\"type\"]},{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"hasSelection\":{\"type\":\"boolean\",\"const\":true},\"label\":{\"type\":\"string\"},\"previewColors\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"type\":{\"type\":\"string\",\"const\":\"oklab\"}},\"required\":[\"L\",\"a\",\"b\",\"hasSelection\",\"label\",\"previewColors\",\"type\"]},{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"},\"hasSelection\":{\"type\":\"boolean\",\"const\":true},\"label\":{\"type\":\"string\"},\"previewColors\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"range\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"representative\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"}},\"required\":[\"hex\"]},\"type\":{\"type\":\"string\",\"const\":\"range\"}},\"required\":[\"L\",\"a\",\"b\",\"hasSelection\",\"label\",\"previewColors\",\"range\",\"representative\",\"type\"]}]},\"name\":{\"type\":\"string\"},\"ref\":{\"type\":\"string\"},\"resolution\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"confidence\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1},\"input\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"const\":\"resolved\"},\"others\":{\"maxItems\":4,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"band\":{\"type\":\"string\",\"enum\":[\"inside\",\"near\",\"far\"]},\"family\":{\"type\":\"string\",\"enum\":[\"white\",\"cream\",\"gray\",\"black\",\"beige\",\"taupe\",\"brown\",\"red\",\"orange\",\"yellow\",\"green\",\"teal\",\"blue\",\"purple\",\"pink\"]},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\",\"minLength\":1},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"band\",\"family\",\"hex\",\"id\",\"name\",\"range\"]}},\"principal\":{\"type\":\"object\",\"properties\":{\"band\":{\"type\":\"string\",\"enum\":[\"inside\",\"near\",\"far\"]},\"family\":{\"type\":\"string\",\"enum\":[\"white\",\"cream\",\"gray\",\"black\",\"beige\",\"taupe\",\"brown\",\"red\",\"orange\",\"yellow\",\"green\",\"teal\",\"blue\",\"purple\",\"pink\"]},\"hex\":{\"type\":\"string\",\"pattern\":\"^#[0-9a-f]{6}$\"},\"id\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"type\":\"string\",\"minLength\":1},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0},{\"type\":\"number\",\"minimum\":0}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":360},{\"type\":\"number\",\"minimum\":0,\"maximum\":360}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\",\"minimum\":0,\"maximum\":1},{\"type\":\"number\",\"minimum\":0,\"maximum\":1}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"band\",\"family\",\"hex\",\"id\",\"name\",\"range\"]},\"source\":{\"type\":\"string\",\"enum\":[\"name\",\"family\",\"composed\",\"hex\",\"reference\",\"semantic\"]}},\"required\":[\"confidenc",
98
+ "e\",\"input\",\"kind\",\"others\",\"principal\",\"source\"]},{\"type\":\"object\",\"properties\":{\"input\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\",\"const\":\"unresolved\"},\"reason\":{\"type\":\"string\",\"enum\":[\"unknown-term\",\"ambiguous-modifier\",\"contradictory-modifiers\",\"unsupported-base\",\"empty-range\",\"unrepresentable-color\"]},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"input\",\"kind\",\"reason\",\"terms\"]}]},\"source\":{\"type\":\"string\",\"enum\":[\"hex\",\"lexical-exact\"]}},\"required\":[\"hex\",\"ref\",\"source\"]}},\"required\":[\"basis\",\"countBasis\",\"counts\",\"ids\",\"limited\",\"sourceVersion\"]},\"SamplizeColorVecCache\":{\"type\":\"object\",\"properties\":{\"dictionaryVersion\":{\"type\":\"string\"},\"embeddingVersion\":{\"type\":\"string\",\"const\":\"oklch-anchor-quantiles-v12\"},\"generatedAt\":{\"type\":\"string\"},\"paints\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"family\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"intensity\":{\"type\":\"string\"},\"lightness\":{\"type\":\"string\"},\"oklab\":{\"type\":\"object\",\"properties\":{\"L\":{\"type\":\"number\"},\"a\":{\"type\":\"number\"},\"b\":{\"type\":\"number\"}},\"required\":[\"L\",\"a\",\"b\"]},\"variantId\":{\"type\":\"string\"},\"vector\":{\"type\":\"string\",\"description\":\"128 IEEE754 float32 values, little endian, base64 encoded. Decode through the SDK index.\"}},\"required\":[\"brand\",\"family\",\"hex\",\"intensity\",\"lightness\",\"oklab\",\"variantId\",\"vector\"]}},\"rankingVersion\":{\"type\":\"string\",\"const\":\"solid-colorvec-cosine-v2\"},\"sourceVersion\":{\"type\":\"string\"}},\"required\":[\"dictionaryVersion\",\"embeddingVersion\",\"generatedAt\",\"paints\",\"rankingVersion\",\"sourceVersion\"]},\"SchemaValueDictionariesResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"valueDictionaries\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"authority\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"taxonomy\"},\"system\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"kind\",\"system\"]},{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"colorscope\"},\"system\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"kind\",\"system\"]},{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"materialgraph\"},\"system\":{\"type\":\"string\",\"const\":\"@materialgraph/schema\"}},\"required\":[\"kind\",\"system\"]},{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"external-standard\"},\"system\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"kind\",\"system\"]}]},\"description\":{\"type\":\"string\"},\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"name\":{\"type\":\"string\"},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"label\":{\"type\":\"string\"},\"aliases\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"broaderTermId\":{\"type\":\"string\",\"minLength\":1},\"definition\":{\"type\":\"string\",\"minLength\":1},\"externalMappings\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"mappingType\":{\"type\":\"string\",\"enum\":[\"direct\",\"transform\",\"derived\",\"classification\",\"semantic\"]},\"matchStrength\":{\"type\":\"string\",\"enum\":[\"exact\",\"close\",\"broad\",\"narrow\",\"related\"]},\"notes\":{\"type\":\"string\"},\"target\":{\"type\":\"string\",\"enum\":[\"schema_org\",\"ifc_pset\",\"bsdd\",\"iso_23387\",\"eclass\",\"gs1_gdm\",\"gdsn\",\"etim\",\"uniclass\"]},\"targetPath\":{\"type\":\"string\"}},\"required\":[\"mappingType\",\"target\",\"targetPath\"]}},\"metadata\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":[\"string\",\"number\",\"boolean\",\"null\"]}},\"lifecycle\":{\"type\":\"object\",\"properties\":{\"deprecatedIn\":{\"type\":\"string\"},\"introducedIn\":{\"type\":\"string\"},\"status\":{\"type\":\"string\",\"enum\":[\"draft\",\"active\",\"deprecated\"]},\"supersededBy\":{\"type\":\"string\"}},\"required\":[\"introducedIn\",\"status\"]},\"semanticId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"id\",\"label\",\"lifecycle\",\"semanticId\"]}},\"lifecycle\":{\"type\":\"object\",\"properties\":{\"deprecatedIn\":{\"type\":\"string\"},\"introducedIn\":{\"type\":\"string\"},\"status\":{\"type\":\"string\",\"enum\":[\"draft\",\"active\",\"deprecated\"]},\"supersededBy\":{\"type\":\"string\"}},\"required\":[\"introducedIn\",\"status\"]},\"semanticId\":{\"type\":\"strin",
99
+ "g\",\"minLength\":1}},\"required\":[\"authority\",\"description\",\"id\",\"name\",\"terms\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SearchByPaletteResponse\":{\"type\":\"object\",\"properties\":{\"categoryGate\":{\"description\":\"The category gate the page ran under: the caller's `category`, or the surface-material default (`defaulted: true`). ABSENT only on responses stored before the one search.\",\"type\":\"object\",\"properties\":{\"defaulted\":{\"description\":\"Present when the caller named no category: a colour page then holds surface materials only (the `materials` product-type groups, listed in `requested`), so lights, taps and furniture do not answer a colour question. Send `?category=` to search other groups.\",\"type\":\"boolean\",\"const\":true},\"requested\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"Category names or keys the caller asked the hard gate to keep.\"},\"requiresAcceptedPrimaryProductType\":{\"type\":\"boolean\",\"const\":true,\"description\":\"The gate admits a variant only through an accepted primary product type.\"},\"unclassifiedVariantsExcluded\":{\"type\":\"boolean\",\"const\":true,\"description\":\"Variants without an accepted primary product type were ineligible, not proven to belong outside the requested category.\"}},\"required\":[\"requested\",\"requiresAcceptedPrimaryProductType\",\"unclassifiedVariantsExcluded\"]},\"corpusScope\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\",\"description\":\"What the scope admits, in one sentence, for a human reader.\"},\"scope\":{\"type\":\"string\",\"enum\":[\"all\",\"samplizeCatalogue\",\"materialBankOrderable\",\"materialBankNaOrderable\",\"materialBankNaAndCatalogue\",\"materialBankEuOrderable\",\"designShopOrderable\"],\"description\":\"Which corpus to answer from. samplizeCatalogue admits published US paint colours regardless of stock. ABSENT (or 'all') means the WHOLE GRAPH — every material MaterialGraph knows, orderable or not; absence is never a narrower default. Three transaction-oriented scopes gate on governed CHANNEL membership: 'materialBankNaOrderable' (Material Bank North America, ~277,000 materials), 'materialBankEuOrderable' (Material Bank Europe, ~65,000) and 'designShopOrderable' (DesignShop, ~34,000, with the products DesignShop hides from browse excluded). 'materialBankNaAndCatalogue' is the one-query union of Material Bank North America and the governed Catalogue editorial discovery corpus; that union does not by itself claim every member is transactable. 'materialBankOrderable' is NOT one of them: it selects materials carrying a Material Bank identity, which is a provenance signal rather than a channel one, and it admits 98.4% of the graph — use it to exclude crawl-sourced brands, not to mean orderable. A scope answers membership in its named governed corpus, never suitability: scope on channel, then refine on sector. Every scope is applied INSIDE the query: `limit` fills with eligible rows and `counts` describe the scoped corpus, which post-filtering a page cannot give you. An unknown value is a 400 naming it, never a silent fall back to the whole graph.\"}},\"required\":[\"description\",\"scope\"],\"description\":\"The corpus this page AND its `counts` were drawn from. Present only when a narrowing scope applied — absence means the whole graph. Read it alongside `counts`: a short page under a scope is a small SCOPED corpus, not a truncated one.\"},\"count\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"hueGate\":{\"description\":\"The thresholds behind each receipt's `hueCompatible`. ABSENT only on responses stored before MG-2295.\",\"type\":\"object\",\"properties\":{\"achromaticQueryChroma\":{\"type\":\"number\",\"description\":\"Below this query chroma the colour is treated as achromatic and any hue is admitted.\"},\"minChromaRatio\":{\"type\":\"number\",\"description\":\"A swatch must carry at least this share of the query colour's chroma.\"},\"minHueCosine\":{\"type\":\"number\",\"description\":\"Floor on the cosine agreement between the two hue vectors.\"}},\"required\":[\"achromaticQueryChro",
100
+ "ma\",\"minChromaRatio\",\"minHueCosine\"]},\"matches\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brand\":{\"type\":\"string\"},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"category\":{\"description\":\"The catalog GROUP this material belongs to — Flooring, Textile Materials, Coatings — or null when it has no accepted primary product type. A palette query is cross-category BY INTENT (a scheme, not one aisle), so the category is what says whether a result answers the question at all: 30 of 40 results for one real palette were Coatings while every one of the 14 groups held something closer. Null means UNKNOWN, not uncategorised, and it is not rare — group by it, but keep null as its own bucket rather than dropping it.\",\"type\":[\"string\",\"null\"]},\"color\":{\"type\":[\"string\",\"null\"]},\"imageSha256\":{\"description\":\"SHA-256 of the displayed image `imageUrl` points at, as a hex digest. ABSENT means no hash is on record, never that there is no image.\",\"type\":\"string\"},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"palette\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"name\":{\"description\":\"colorscope's name for the swatch.\",\"type\":[\"string\",\"null\"]},\"proportion\":{\"type\":\"number\",\"description\":\"Share of the image this swatch occupies.\"}},\"required\":[\"hex\",\"name\",\"proportion\"]},\"description\":\"The candidate's FULL extracted palette — every stored swatch, uncapped and in stored order, the same list the material's own record reports. This is the whole evidence set scored against; the per-colour `matched` swatch is one entry drawn from it. A ONE-swatch palette means the candidate's image is genuinely monochrome, NOT that the list was trimmed — and it is the common case here, because a page ordered by nearest swatch favours flat images, whose one swatch can land arbitrarily close to any colour.\"},\"product\":{\"type\":\"string\"},\"productId\":{\"type\":[\"string\",\"null\"]},\"retired\":{\"type\":\"boolean\",\"description\":\"MB has retired or hidden this SKU.\"},\"score\":{\"type\":\"number\",\"description\":\"Closeness in [0,1] of the material's own colour on the search index to the searched colour, the page's order. It falls from 1 to 0 across a fixed OKLab span; not a confidence or a percentage.\"},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]},\"colours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"colourScore\":{\"type\":\"number\",\"description\":\"Closeness in [0,1] of the matched swatch to the queried colour, from plain OKLab distance with lightness counted in full: 1 is the same colour, 0 is 0.3 or more apart. Not a confidence or a percentage.\"},\"matched\":{\"description\":\"The ONE swatch of the candidate's `palette` that produced this score — evidence for THIS queried colour, not the candidate's colours as a whole (that is `palette`). Null when no swatch produced a score.\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"name\":{\"description\":\"colorscope's name for the swatch.\",\"type\":[\"string\",\"null\"]},\"proportion\":{\"type\":\"number\",\"description\":\"Share of the image this swatch occupies.\"}},\"required\":[\"hex\",\"name\",\"proportion\"]},{\"type\":\"null\"}]},\"proportionScore\":{\"type\":\"number\",\"description\":\"Proportion agreement in [0,1]. Always 1 on the one search: no proportion is applied.\"},\"hueCompatible\":{\"description\":\"Whether `matched` has a hue compatible with the queried colour, by colorscope's `isHueCompatible` at the response's `hueGate` thresholds. A flag, never a gate: an incompatible swatch still scores and still ranks. ABSENT when there is no `matched` swatch.\",\"type\":\"boolean\"},\"queryHex\":{\"type\":\"string\",\"description\":\"The queried colour, normalised to `#rrggbb`.\"},\"score\":{\"type\":\"number\",\"description\":\"The receipt's score: `colourScore` × `proportionScore`, so `colourScore` on the one search.\"}},\"required\":[\"colourScore\",\"matched\",\"proportionScore\",\"queryHex\",\"score\"]},\"description\":\"One receipt per queried colour, in query order.\"}},\"required\":[\"brand\",\"brandSlug\",\"category\",\"color\",\"imageUrl\",\"palette\",\"product\",\"productId\",\"retired\",\"score\",\"variantId\",\"variantName\",\"colours\"]},\"description\":\"Mat",
101
+ "ches, best score first.\"},\"query\":{\"type\":\"object\",\"properties\":{\"colours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"proportion\":{\"type\":\"number\"},\"weight\":{\"type\":\"number\"}},\"required\":[\"hex\"]}},\"droppedColours\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"proportion\":{\"type\":\"number\"},\"weight\":{\"type\":\"number\"}},\"required\":[\"hex\"]},\"description\":\"Colours not searched: every colour after the first, since a palette is ordered by its first colour alone, and any colour whose stated share is below 5%. These colours were not retrieved or scored.\"},\"logic\":{\"type\":\"string\",\"enum\":[\"all\",\"any\"]},\"outcome\":{\"type\":\"string\",\"enum\":[\"matches\",\"no_effective_colours\"],\"description\":\"`no_effective_colours` means every colour was omitted for a stated share below 5%, so no search ran.\"}},\"required\":[\"colours\",\"droppedColours\",\"logic\",\"outcome\"],\"description\":\"Echo of the resolved query — every colour normalised to `#rrggbb`.\"}},\"required\":[\"count\",\"matches\",\"query\"]},\"SearchResponse\":{\"type\":\"object\",\"properties\":{\"data\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"results\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"resultId\":{\"type\":\"string\",\"description\":\"This exact hit's attribution key — `<responseId>:<rank>`, where rank is 1-based within THIS response. Unique across pages, because each page is its own response with its own id. Store it verbatim next to the outcome; it is opaque, and `attribution.responseId` is the field to group by.\"},\"variantId\":{\"type\":\"string\"},\"brand\":{\"type\":\"string\"},\"product\":{\"type\":\"string\"},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"productId\":{\"type\":[\"string\",\"null\"]},\"materialBankId\":{\"description\":\"The variant's Material Bank SKU — the ONE EXTERNAL identifier on a result, in contrast to the OPAQUE `variantId`: it is the id you are expected to match against Material Bank's own catalogue (carts, ordering and analytics all key on it), so a result list can be joined without a second lookup. Populated by the search and by Match alike. ABSENT means no MB identity is known for the variant, never that the SKU cannot be ordered; presence is the orderability tell, absence is silence.\",\"type\":\"string\"},\"manufacturerCode\":{\"description\":\"The governed manufacturer/source-native item code from `variants.code` (for example \\\"GADLC02\\\"). Populated when the full-result retrieval source carries that canonical field; Match always hydrates it from the variant row. ABSENT means unknown or an older external serving projection, never an invented code. Independent of materialBankId.\",\"type\":\"string\"},\"projectSaveCapability\":{\"description\":\"Explicit source-governed permission to save this exact source-coded variant to a Project. ABSENT means unknown/not allowed; it is never inferred from the brand or name.\",\"type\":\"string\",\"const\":\"allowed\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"sourceStatus\":{\"description\":\"The governed data status supporting Project capture. ABSENT means unknown. Provisional data remains source-backed but is not a verified catalogue claim.\",\"type\":\"string\",\"const\":\"provisional\"},\"productType\":{\"type\":\"string\"},\"color\":{\"type\":[\"string\",\"null\"]},\"variantName\":{\"type\":[\"string\",\"null\"]},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"imageSha256\":{\"description\":\"SHA-256 of the displayed image `imageUrl` points at, as a hex digest. Lets a caller key a cache or dedupe on the asset rather than its URL. ABSENT means no hash is on record, never that there is no image.\",\"type\":\"string\"},\"hasImage\":{\"type\":\"boolean\"},\"variantCount\":{\"description\":\"How many eligible variants the row's product has, the same set `list_variants` pages, so a follow-up list of the product returns this many: the card's \\\"12 colourways\\\". ABSENT means the product is unknown or has no eligible variant.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"palette\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"t",
102
+ "ype\":\"string\",\"description\":\"`#rrggbb` of the swatch, as extracted from the product image.\"},\"name\":{\"description\":\"Stored human colour name for the swatch, when one was extracted.\",\"type\":[\"string\",\"null\"]},\"proportion\":{\"type\":\"number\",\"description\":\"The swatch's share of the analysed image, in [0,1].\"}},\"required\":[\"hex\",\"proportion\"]},\"description\":\"The material's main-image palette — the FULL stored palette, uncapped and in stored order. Colours are EXTRACTED FROM PRODUCT IMAGERY (visual likeness, never a declared colour specification). A one-swatch palette means the extractor found one colour — solid-colour materials are genuinely monochrome — never that the list was trimmed. This array is always present: EMPTY means nothing is on record (unknown), not 'this material has no colours'.\"},\"colourMeta\":{\"type\":\"object\",\"properties\":{\"dominantFamily\":{\"type\":\"string\"},\"dominantHex\":{\"type\":\"string\"},\"mood\":{\"type\":\"string\"}}},\"colourChip\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\",\"description\":\"`#rrggbb` to fill the chip with. EXTRACTED FROM the product image (a visual likeness), never a manufacturer-declared colour specification — surfaces must not present it as one.\"}},\"required\":[\"hex\"],\"description\":\"Present when this material's product imagery carries nothing beyond one colour, so a surface should render that colour rather than the photograph. Set for COATINGS (paints, primers, stains, floor coatings) whose stored palette quantises to a single swatch — a paint's photo is a flat fill, and the colour we hold structured beats a JPEG of it. ABSENT means the question was not established (unknown product type, unextracted or multi-swatch palette) and the image should be rendered; it NEVER asserts 'this is not a coating'.\"},\"attributes\":{\"description\":\"Resolved attribute values for the ids sent in `returnAttributes`, keyed by attribute id. ABSENT entirely when `returnAttributes` was not sent. A key present with `null` means this variant carries no accepted value for that attribute — absent is not empty and neither is null: the three states are distinct on purpose. Values resolve with the normal variant-over-product precedence.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\",\"items\":{\"type\":\"string\"}},{\"type\":\"null\"}]}},\"score\":{\"type\":\"number\",\"description\":\"The selected mode's weighted primary score on the [0, maxScore] scale.\"},\"retired\":{\"description\":\"MB lists the SKU as not visible/retired; demoted in ranking. Omitted when false.\",\"type\":\"boolean\"}},\"required\":[\"variantId\",\"brand\",\"product\",\"brandSlug\",\"productId\",\"color\",\"variantName\",\"imageUrl\",\"hasImage\",\"palette\",\"score\"]}},\"view\":{\"default\":\"full\",\"description\":\"Projection echo — always 'full' on this envelope variant.\",\"type\":\"string\",\"const\":\"full\"},\"correctedQuery\":{\"description\":\"Present when a word no material carries was corrected before the search ran: `from` is the query as typed (normalised), `to` the phrasing the page shows results for.\",\"type\":\"object\",\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"type\":\"string\"}},\"required\":[\"from\",\"to\"]},\"attribution\":{\"type\":\"object\",\"properties\":{\"basis\":{\"type\":\"string\",\"enum\":[\"image\",\"colour\",\"lexical\",\"agent\",\"attribute\",\"match\"],\"description\":\"The ranking basis. On /api/v1/search this equals the envelope's `mode`. The historical match basis remains readable for stored outcomes.\"},\"issuedAt\":{\"type\":\"string\",\"description\":\"ISO-8601 timestamp of when this response was assembled, so a stored outcome carries its own age without a second lookup.\"},\"responseId\":{\"type\":\"string\",\"description\":\"This response's stable id — the same value as the `X-Request-Id` header. Store it next to the outcome (an order, a save, a click) to join that outcome back to the ranking that produced it. Opaque: round-trip it verbatim, never parse it.\"}},\"required\":[\"basis\",\"issuedAt\",\"responseId\"],\"description\":\"Result attribution receipt. Present on every successful ranked response. Nothing on our side retains it — what you store IS the record.\"},\"suggestions",
103
+ "\":{\"default\":[],\"description\":\"Always empty: the one search offers no refinements. Read nothing from it.\",\"maxItems\":0,\"type\":\"array\",\"items\":{\"not\":{}}},\"mode\":{\"type\":\"string\",\"enum\":[\"image\",\"colour\",\"lexical\",\"agent\",\"attribute\"],\"description\":\"What ordered the page: 'image' (a look-alike: image similarity to the seed), 'colour' (the words or the caller named a colour: colour distance inside that colour's family), 'lexical' (the query's words, ranked by text rank on the index), 'attribute' (no words left to rank on: the category and filters define the page), or 'agent' (the search agent chose these variants and their order; scores are rank-based, 1 for the first result falling linearly, and `maxScore` is 1).\"},\"maxScore\":{\"type\":\"number\"},\"note\":{\"type\":\"string\"},\"cursor\":{\"type\":\"string\"},\"timings\":{\"description\":\"Wall-clock milliseconds per step of the search, keyed by step id. The key set is open and depends on the path a query took, so read it by iterating rather than by naming a key. Present only when `explain` is set: diagnostic, not part of the ranking contract.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"number\"}},\"explain\":{\"description\":\"Present only under `explain`: the receipt of the plan the search ran on. Diagnostic, like `timings`.\",\"type\":\"object\",\"properties\":{\"plan\":{\"type\":\"object\",\"properties\":{\"cached\":{\"type\":\"boolean\"},\"plan\":{\"type\":\"object\",\"properties\":{\"brands\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"ids\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"names\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"phrase\":{\"type\":\"string\"}},\"required\":[\"ids\",\"names\",\"phrase\"]},{\"type\":\"null\"}]},\"category\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"label\":{\"type\":\"string\"},\"phrase\":{\"type\":\"string\"},\"productTypeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"label\",\"phrase\",\"productTypeIds\"]},{\"type\":\"null\"}]},\"colour\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"family12\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"familyId\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"oklab\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":3,\"maxItems\":3},\"phrase\":{\"type\":\"string\"},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"family12\",\"familyId\",\"hex\",\"oklab\",\"phrase\"]},{\"type\":\"null\"}]},\"corpusScope\":{\"type\":\"string\",\"enum\":[\"samplizeCatalogue\",\"materialBankOrderable\",\"materialBankNaOrderable\",\"materialBankNaAndCatalogue\",\"materialBankEuOrderable\",\"designShopOrderable\"]},\"excludeBrands\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"excludes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"phrase\":{\"type\":\"string\"},\"term\":{\"type\":\"string\"}},\"required\":[\"attributeId\",\"phrase\",\"term\"]}},\"leftover\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalised\":{\"type\":\"string\"},\"softAlone\":{\"type\":\"boolean\"},\"vendorColourNames\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"wants\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"fill\":{\"type\":\"number\"},\"phrase\":{\"type\":\"string\"},\"presence\":{\"type\":\"boolean\",\"const\":true},\"strength\":{\"type\":\"string\",\"enum\":[\"hard\",\"soft\"]},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"attributeId\",\"fill\",\"phrase\",\"strength\",\"terms\"]}}},\"required\":[\"brands\",\"category\",\"colour\",\"excludeBrands\",\"excludes\",\"leftover\",\"normalised\",\"softAlone\",\"vendorColourNames\",\"wants\"],\"description\":\"The plan the search ran on: the category, brands, wanted and excluded attribute terms (each hard or soft, with its fill), the colour, the words left for text, and the caller's corpus scope when one",
104
+ " was sent.\"},\"signature\":{\"type\":\"string\"},\"source\":{\"type\":\"string\",\"enum\":[\"dictionary\",\"jev\"]},\"version\":{\"type\":\"string\"}},\"required\":[\"cached\",\"plan\",\"signature\",\"source\",\"version\"]}},\"required\":[\"plan\"]},\"query\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"seed\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}}},\"required\":[\"results\",\"view\",\"suggestions\",\"mode\",\"maxScore\",\"query\"]},{\"type\":\"object\",\"properties\":{\"results\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributes\":{\"description\":\"Resolved attribute values for the ids sent in `returnAttributes`, keyed by attribute id. ABSENT entirely when `returnAttributes` was not sent. A key present with `null` means this variant carries no accepted value for that attribute — absent is not empty and neither is null: the three states are distinct on purpose. Values resolve with the normal variant-over-product precedence.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\",\"items\":{\"type\":\"string\"}},{\"type\":\"null\"}]}},\"brand\":{\"type\":\"string\"},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"imageSha256\":{\"description\":\"SHA-256 of the displayed image `imageUrl` points at, as a hex digest. Lets a caller key a cache or dedupe on the asset rather than its URL. ABSENT means no hash is on record, never that there is no image.\",\"type\":\"string\"},\"imageUrl\":{\"type\":[\"string\",\"null\"]},\"manufacturerCode\":{\"description\":\"The governed manufacturer/source-native item code from `variants.code` (for example \\\"K-7265-BV\\\") — the same key and the same value the full item publishes. It is what separates two cards a reader cannot otherwise tell apart: brand, product name and variant name are shared by 280,334 of 371,515 cardable variants, because `name` is the PRODUCT name and a paint product is a whole collection. ABSENT means no code is recorded for the variant, never an invented one.\",\"type\":\"string\"},\"name\":{\"type\":\"string\",\"description\":\"Product name (the full item's `product`).\"},\"productId\":{\"type\":[\"string\",\"null\"]},\"projectSaveCapability\":{\"type\":\"string\",\"const\":\"allowed\"},\"resultId\":{\"type\":\"string\",\"description\":\"This exact hit's attribution key — `<responseId>:<rank>`, where rank is 1-based within THIS response. Unique across pages, because each page is its own response with its own id. Store it verbatim next to the outcome; it is opaque, and `attribution.responseId` is the field to group by.\"},\"sampleable\":{\"description\":\"Whether a physical sample is explicitly known to be orderable. Absent means unknown, never unavailable.\",\"type\":\"boolean\"},\"score\":{\"type\":\"number\"},\"sourceStatus\":{\"type\":\"string\",\"const\":\"provisional\"},\"variantCount\":{\"description\":\"How many eligible variants the row's product has, the same set `list_variants` pages, so a follow-up list of the product returns this many: the card's \\\"12 colourways\\\". ABSENT means the product is unknown or has no eligible variant.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"variantId\":{\"type\":\"string\"},\"variantName\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brand\",\"brandSlug\",\"imageUrl\",\"name\",\"productId\",\"score\",\"variantId\",\"variantName\"]}},\"view\":{\"type\":\"string\",\"const\":\"card\",\"description\":\"Projection echo — always 'card' on this envelope variant.\"},\"correctedQuery\":{\"description\":\"Present when a word no material carries was corrected before the search ran: `from` is the query as typed (normalised), `to` the phrasing the page shows results for.\",\"type\":\"object\",\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"type\":\"string\"}},\"required\":[\"from\",\"to\"]},\"attribution\":{\"type\":\"object\",\"properties\":{\"basis\":{\"type\":\"string\",\"enum\":[\"image\",\"colour\",\"lexical\",\"agent\",\"attribute\",\"match\"],\"description\":\"The ranking basis. On /api/v1/search this equals the envelope's `mode`. The historical match basis remains readable for stored outcomes.\"},\"issuedAt\":{\"type\":\"string\",\"description\":\"ISO-8601 timestamp of when this response was assembled, so a stored outcome carries its own age w",
105
+ "ithout a second lookup.\"},\"responseId\":{\"type\":\"string\",\"description\":\"This response's stable id — the same value as the `X-Request-Id` header. Store it next to the outcome (an order, a save, a click) to join that outcome back to the ranking that produced it. Opaque: round-trip it verbatim, never parse it.\"}},\"required\":[\"basis\",\"issuedAt\",\"responseId\"],\"description\":\"Result attribution receipt. Present on every successful ranked response. Nothing on our side retains it — what you store IS the record.\"},\"suggestions\":{\"default\":[],\"description\":\"Always empty: the one search offers no refinements. Read nothing from it.\",\"maxItems\":0,\"type\":\"array\",\"items\":{\"not\":{}}},\"mode\":{\"type\":\"string\",\"enum\":[\"image\",\"colour\",\"lexical\",\"agent\",\"attribute\"],\"description\":\"What ordered the page: 'image' (a look-alike: image similarity to the seed), 'colour' (the words or the caller named a colour: colour distance inside that colour's family), 'lexical' (the query's words, ranked by text rank on the index), 'attribute' (no words left to rank on: the category and filters define the page), or 'agent' (the search agent chose these variants and their order; scores are rank-based, 1 for the first result falling linearly, and `maxScore` is 1).\"},\"maxScore\":{\"type\":\"number\"},\"note\":{\"type\":\"string\"},\"cursor\":{\"type\":\"string\"},\"timings\":{\"description\":\"Wall-clock milliseconds per step of the search, keyed by step id. The key set is open and depends on the path a query took, so read it by iterating rather than by naming a key. Present only when `explain` is set: diagnostic, not part of the ranking contract.\",\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"type\":\"number\"}},\"explain\":{\"description\":\"Present only under `explain`: the receipt of the plan the search ran on. Diagnostic, like `timings`.\",\"type\":\"object\",\"properties\":{\"plan\":{\"type\":\"object\",\"properties\":{\"cached\":{\"type\":\"boolean\"},\"plan\":{\"type\":\"object\",\"properties\":{\"brands\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"ids\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"names\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"phrase\":{\"type\":\"string\"}},\"required\":[\"ids\",\"names\",\"phrase\"]},{\"type\":\"null\"}]},\"category\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"label\":{\"type\":\"string\"},\"phrase\":{\"type\":\"string\"},\"productTypeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"label\",\"phrase\",\"productTypeIds\"]},{\"type\":\"null\"}]},\"colour\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"family12\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"familyId\":{\"type\":\"string\"},\"hex\":{\"type\":\"string\"},\"oklab\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":3,\"maxItems\":3},\"phrase\":{\"type\":\"string\"},\"range\":{\"type\":\"object\",\"properties\":{\"chroma\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2},\"hue\":{\"anyOf\":[{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2},{\"type\":\"null\"}]},\"lightness\":{\"type\":\"array\",\"prefixItems\":[{\"type\":\"number\"},{\"type\":\"number\"}],\"items\":false,\"minItems\":2,\"maxItems\":2}},\"required\":[\"chroma\",\"hue\",\"lightness\"]}},\"required\":[\"family12\",\"familyId\",\"hex\",\"oklab\",\"phrase\"]},{\"type\":\"null\"}]},\"corpusScope\":{\"type\":\"string\",\"enum\":[\"samplizeCatalogue\",\"materialBankOrderable\",\"materialBankNaOrderable\",\"materialBankNaAndCatalogue\",\"materialBankEuOrderable\",\"designShopOrderable\"]},\"excludeBrands\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"excludes\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"phrase\":{\"type\":\"string\"},\"term\":{\"type\":\"string\"}},\"required\":[\"attributeId\",\"phrase\",\"term\"]}},\"leftover\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"normalised\":{\"type\":\"string\"},\"softAlone\":{\"type\":\"boolean\"},\"vendorColourNames\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"wants\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\"},\"fill\":{\"type\":\"number\"},\"phrase\":{\"type\":\"string\"},\"presence\":{\"type\":\"boolean\",\"const\"",
106
+ ":true},\"strength\":{\"type\":\"string\",\"enum\":[\"hard\",\"soft\"]},\"terms\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"attributeId\",\"fill\",\"phrase\",\"strength\",\"terms\"]}}},\"required\":[\"brands\",\"category\",\"colour\",\"excludeBrands\",\"excludes\",\"leftover\",\"normalised\",\"softAlone\",\"vendorColourNames\",\"wants\"],\"description\":\"The plan the search ran on: the category, brands, wanted and excluded attribute terms (each hard or soft, with its fill), the colour, the words left for text, and the caller's corpus scope when one was sent.\"},\"signature\":{\"type\":\"string\"},\"source\":{\"type\":\"string\",\"enum\":[\"dictionary\",\"jev\"]},\"version\":{\"type\":\"string\"}},\"required\":[\"cached\",\"plan\",\"signature\",\"source\",\"version\"]}},\"required\":[\"plan\"]},\"query\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"seed\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}}},\"required\":[\"results\",\"view\",\"suggestions\",\"mode\",\"maxScore\",\"query\"]}]},\"links\":{\"type\":\"object\",\"properties\":{}},\"meta\":{\"type\":\"object\",\"properties\":{\"operationId\":{\"type\":\"string\",\"enum\":[\"search_materials_post\",\"search_materials_get\"]},\"requestId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"operationId\",\"requestId\"]},\"warnings\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}}},\"required\":[\"data\",\"links\",\"meta\",\"warnings\"]},\"SourceMaterialBatchReceipt\":{\"type\":\"object\",\"properties\":{\"batchId\":{\"type\":\"string\",\"description\":\"The stored batch id (`smb_…`).\"},\"sources\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"sourceId\":{\"type\":\"string\",\"description\":\"The stored file id (`smf_…`).\"},\"role\":{\"type\":\"string\",\"enum\":[\"brief\",\"reference_image\",\"document\",\"document_image\",\"inspiration_image\",\"unclassified\"],\"description\":\"The pipeline-assigned role. `unclassified` is a legitimate terminal value when the file could not be placed; clients should tolerate new values.\"},\"filename\":{\"type\":\"string\"},\"mediaType\":{\"type\":\"string\"},\"sha256\":{\"type\":\"string\",\"description\":\"Lowercase hex SHA-256 of the stored bytes.\"},\"bytes\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"pages\":{\"description\":\"PDF page count; null for images.\",\"anyOf\":[{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},{\"type\":\"null\"}]}},\"required\":[\"sourceId\",\"role\",\"filename\",\"mediaType\",\"sha256\",\"bytes\",\"pages\"]}}},\"required\":[\"batchId\",\"sources\"]},\"VariantAssetPage\":{\"type\":\"object\",\"properties\":{\"documentCoverage\":{\"description\":\"Brand document list state. Absent when documents are filtered out.\",\"type\":\"string\",\"enum\":[\"available\",\"none_declared\",\"not_ingested\",\"unavailable_source\",\"dead_link\",\"failed_ingest\"]},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"appliesTo\":{\"description\":\"Only 'product': a product-wide document. Absent: this variant's own.\",\"type\":\"string\",\"const\":\"product\"},\"assetId\":{\"type\":\"string\",\"minLength\":1},\"availability\":{\"type\":\"string\",\"enum\":[\"available\",\"unknown\",\"unavailable\"],\"description\":\"available: MaterialGraph serves url. unknown: brand's link, unchecked.\"},\"byteSize\":{\"description\":\"Not on images; absent when unknown.\",\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"documentTypes\":{\"description\":\"Documents only; absent when unknown.\",\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"technical_data_sheet\",\"product_sheet\",\"technical_bulletin\",\"sustainability_report\",\"specification\",\"installation_guide\",\"care_maintenance_guide\",\"operation_manual\",\"warranty\",\"parts_list\",\"technical_drawing\",\"test_report\",\"certificate\",\"declaration_of_performance\",\"environmental_product_declaration\",\"health_product_declaration\",\"ingredient_disclosure\",\"safety_data_sheet\",\"brochure\",\"catalogue\",\"colour_finish_chart\",\"other\",\"unknown\"]}},\"height\":{\"description\":\"Images only; absent when unknown.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"imageRole\":{\"description\":\"Images only; absent when unknown.\",\"type\":\"string\",\"enum\":[\"product\",\"swatch\",\"detail\",\"scene\",\"technical\",\"colour_chart\",\"sample_collection\",\"other\",\"unknown\"]},\"kind\"",
107
+ ":{\"type\":\"string\",\"enum\":[\"image\",\"document\",\"cad\",\"bim\",\"model_3d\",\"texture\",\"archive\",\"other\",\"unknown\"]},\"name\":{\"description\":\"Not on images; absent when unknown.\",\"type\":\"string\"},\"presentation\":{\"description\":\"Images only; absent when unknown.\",\"type\":\"string\",\"enum\":[\"edge_to_edge\",\"packshot\",\"cutout_margin\",\"montage\",\"unknown\"]},\"url\":{\"description\":\"Absent when availability is unavailable.\",\"type\":\"string\"},\"width\":{\"description\":\"Images only; absent when unknown.\",\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991}},\"required\":[\"assetId\",\"availability\",\"kind\"]}},\"pageInfo\":{\"type\":\"object\",\"properties\":{\"nextCursor\":{\"type\":[\"string\",\"null\"]},\"returnedCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"totalMatches\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"nextCursor\",\"returnedCount\",\"totalMatches\"]},\"primaryAssetId\":{\"description\":\"The variant's primary image. Absent when it has none.\",\"type\":\"string\",\"minLength\":1}},\"required\":[\"items\",\"pageInfo\"]},\"WhoamiResponse\":{\"type\":\"object\",\"properties\":{\"principal\":{\"type\":\"string\",\"description\":\"The resolved principal for the credential (e.g. `apikey:read`).\"},\"scopes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"The scopes granted to this credential (e.g. `mg:read`).\"}},\"required\":[\"principal\",\"scopes\"]},\"__schema0\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"number\"},{\"type\":\"boolean\"},{\"type\":\"null\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/__schema0\"}},{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema0\"}}]}},\"operations\":{\"samplize_colorvec_cache\":{\"$ref\":\"#/$defs/SamplizeColorVecCache\"},\"samplize_catalogue_search\":{\"$ref\":\"#/$defs/SamplizeCatalogueSearchResponse\"},\"list_catalog_documents\":{\"$ref\":\"#/$defs/CatalogDocumentList\"},\"list_catalog_pages\":{\"$ref\":\"#/$defs/CatalogPageListResult\"},\"get_catalog_page_representation\":{\"$ref\":\"#/$defs/CataloguePageRepresentationReadResult\"},\"list_catalog_product_references\":{\"$ref\":\"#/$defs/CatalogProductReferenceReadResult\"},\"search_materials_post\":{\"$ref\":\"#/$defs/SearchResponse\"},\"plan_material_query\":{\"$ref\":\"#/$defs/MaterialQueryPlanResponse\"},\"samplize_catalogue_products\":{\"$ref\":\"#/$defs/SamplizeCataloguePage\"},\"search_materials_get\":{\"$ref\":\"#/$defs/SearchResponse\"},\"search_by_colour\":{\"$ref\":\"#/$defs/ByColourResponse\"},\"get_catalogue_references_batch\":{\"$ref\":\"#/$defs/CatalogueReferenceBatchResponse\"},\"list_catalogue_channel_collections\":{\"$ref\":\"#/$defs/CatalogueChannelCollectionsResponse\"},\"get_catalogue_document_access\":{\"$ref\":\"#/$defs/CatalogueDocumentAccessResult\"},\"list_material_blocks\":{\"$ref\":\"#/$defs/MaterialBlockProjection\"},\"list_variant_assets\":{\"$ref\":\"#/$defs/VariantAssetPage\"},\"list_material_documents\":{\"$ref\":\"#/$defs/ProductDocumentPage\"},\"list_schema_value_dictionaries\":{\"$ref\":\"#/$defs/SchemaValueDictionariesResponse\"},\"get_material_pairings\":{\"type\":\"object\",\"properties\":{\"seed\":{\"$ref\":\"#/$defs/MaterialTile\"},\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/PairingItem\"}},\"cospecCount\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"How many items came from real order evidence (the cospec arm).\"},\"skippedCandidates\":{\"description\":\"Candidates dropped at hydration for violating the material contract; present only when > 0. A malformed row costs itself, never the rail (MG-985).\",\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991},\"ordering\":{\"description\":\"Graph-owned ranking contract; present only when `order` was requested.\",\"$ref\":\"#/$defs/PairingOrdering\"},\"nextCursor\":{\"description\":\"Opaque continuation when another ordered page exists.\",\"type\":\"string\"}},\"required\":[\"seed\",\"items\",\"cospecCount\"]},\"list_associated_finishes\":{\"$ref\":\"#/$defs/DeclaredAssociations\"},\"list_associated_products\":{\"$ref\":\"#/$defs/DeclaredAssociations\"},\"get_applicability\":{\"$ref\":\"#/$defs/ApplicabilityCollection\"},\"list_variants\":{\"$ref\":\"#/$defs/ListVariantsResponse\"},\"list_variant_facets\":{\"$ref\":\"#/$defs/ListVariantFacetsResponse\"},\"find_va",
108
+ "riants_by_colour\":{\"$ref\":\"#/$defs/FindVariantsByColourResponse\"},\"find_variants_by_vector\":{\"$ref\":\"#/$defs/FindVariantsByVectorResponse\"},\"find_companions\":{\"$ref\":\"#/$defs/FindCompanionsResponse\"},\"resolve_variant\":{\"$ref\":\"#/$defs/ResolveVariantResponse\"},\"get_variant\":{\"$ref\":\"#/$defs/GetVariantResponse\"},\"resolve_colour_name\":{\"$ref\":\"#/$defs/ResolveColourResponse\"},\"catalog_list_attributes\":{\"$ref\":\"#/$defs/ListAttributesResponse\"},\"catalog_list_enum_values\":{\"$ref\":\"#/$defs/ListEnumValuesResponse\"},\"list_categories\":{\"$ref\":\"#/$defs/ListCategoriesResponse\"},\"get_category\":{\"$ref\":\"#/$defs/GetCategoryResponse\"},\"whoami\":{\"$ref\":\"#/$defs/WhoamiResponse\"},\"search_by_palette\":{\"$ref\":\"#/$defs/SearchByPaletteResponse\"},\"extract_image_palette\":{\"$ref\":\"#/$defs/ExtractPaletteResponse\"},\"list_brands\":{\"$ref\":\"#/$defs/BrandCatalogListPage\"},\"upload_source_material\":{\"$ref\":\"#/$defs/SourceMaterialBatchReceipt\"},\"create_public_run\":{\"$ref\":\"#/$defs/CreatePublicRunResponse\"},\"get_public_run\":{\"$ref\":\"#/$defs/PublicRunResponse\"},\"get_verdict_citation\":{\"type\":\"object\",\"properties\":{\"citationId\":{\"type\":\"string\",\"minLength\":1},\"source\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"enum\":[\"source_record\",\"source_material\",\"source_fact\",\"url\",\"asset\",\"download\",\"manual_note\",\"agent_output\"]},\"locator\":{\"type\":\"object\",\"properties\":{\"imageBox\":{\"type\":\"object\",\"properties\":{\"height\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"width\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"x\":{\"type\":\"number\"},\"y\":{\"type\":\"number\"}},\"required\":[\"height\",\"width\",\"x\",\"y\"]},\"page\":{\"type\":\"integer\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991},\"selector\":{\"type\":\"string\",\"minLength\":1},\"xPath\":{\"type\":\"string\",\"minLength\":1}}},\"publicPath\":{\"type\":\"string\",\"format\":\"starts_with\",\"pattern\":\"^\\\\/api\\\\/assets\\\\/.*\"},\"ref\":{\"type\":\"string\",\"minLength\":1},\"sourceAssetId\":{\"type\":\"string\",\"minLength\":1},\"sourceDownloadId\":{\"type\":\"string\",\"minLength\":1},\"sourceFactId\":{\"type\":\"string\",\"minLength\":1},\"sourceId\":{\"type\":\"string\",\"minLength\":1},\"title\":{\"type\":\"string\",\"minLength\":1},\"url\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"kind\",\"ref\"]},\"sourceType\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"citationId\",\"source\",\"sourceType\"]}}}",
117
109
  ].join("");