@instruments/materialgraph 0.28.0 → 0.29.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.
@@ -104,7 +104,8 @@ export type MaterialDocumentProjectionItem = {
104
104
  status: MaterialDocumentStatus;
105
105
  readable: boolean;
106
106
  }[];
107
- documentType: string | null;
107
+ /** Registry purposes, `unknown` filtered out; absent when none is known. */
108
+ documentTypes?: VariantDocumentType[];
108
109
  originalName: string;
109
110
  status: MaterialDocumentStatus;
110
111
  /** Null for unavailable, dead, or failed source documents. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instruments/materialgraph",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -125,32 +125,32 @@ export const RESPONSE_SCHEMA_CATALOGUE_JSON = [
125
125
  "s 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\":\"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\":{\"projectCo",
126
126
  "unt\":{\"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 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\"",
127
127
  ":[\"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\"]},\"PostSourceMaterialCommentResponse\":{\"type\":\"object\",\"properties\":{\"sourceId\":{\"type\":\"string\",\"description\":\"The file the comment hangs off (`smf_…`).\"},\"comment\":{\"$ref\":\"#/$defs/StoredSourceMaterialComment\"}},\"required\":[\"sourceId\",\"comment\"]},\"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\"]},\"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\"]}]}},\"docu",
128
- "mentType\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"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\",\"documentType\",\"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\"},\"capabilityKind\":{\"type\":\"string\",\"enum\":[\"agent\",\"tool\",\"workflow\"]},\"capabilityId\":{\"type\":\"string\"},\"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 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)",
129
- "|(?: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\",\"capabilityKind\",\"capabilityId\",\"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\",\"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},{",
130
- "\"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 maker: 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 maker'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\"},\"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 (maker 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 neve",
131
- "r 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 maker'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 maker'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 maker'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 maker'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 maker'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 maker'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 maker's paint name or code, or it is a hex. `generic-colour`: the name is a colour word makers also use as a paint name; qualify it with a maker. `several-paints`: the name is more than one maker's paint; qualify it with a maker.\"},\"status\":{\"type\":\"string\",\"const\":\"not-looked-up\",\"description\":\"The catalogue was not searched; there was no one maker'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\"]},\"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\",\"source",
132
- "CollectionId\",\"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\"},\"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\",\"d",
133
- "emand\",\"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\":{\"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",
134
- "\":\"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\"]}]},\"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\"]},\"SchemaAttributesResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"attributes\"},\"schemaVersion\":{\"type\":\"string\"},\"items\"",
135
- ":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"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},\"name\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"valueKind\":{\"type\":\"string\",\"enum\":[\"string\",\"text\",\"integer\",\"number\",\"boolean\",\"enum\",\"object\",\"reference\"]},\"quantityKind\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"length\",\"area\",\"volume\",\"mass\",\"time\",\"temperature\",\"currency\",\"ratio\",\"density\",\"coverage\",\"emissions\",\"force\",\"thermal_conductivity\",\"power\",\"voltage\",\"current\",\"frequency\",\"luminous_flux\",\"color_temperature\",\"count\",\"unitless\"]},{\"type\":\"null\"}]},\"canonicalUnitId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},{\"type\":\"null\"}]},\"acceptedUnitIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}},\"valueDictionaryId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},{\"type\":\"null\"}]},\"defaultSourceRequirementId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},{\"type\":\"null\"}]},\"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\"]}},\"searchFacet\":{\"type\":\"boolean\"},\"comparable\":{\"type\":\"boolean\"},\"usedInBlocks\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}},\"enumValues\":{\"anyOf\":[{\"type\":\"array\",\"items\":{\"type\":\"string\"}},{\"type\":\"null\"}]},\"shapeId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},{\"type\":\"null\"}]},\"domainContract\":{\"type\":\"object\",\"properties\":{\"canonicalGrain\":{\"type\":\"string\",\"enum\":[\"brand\",\"product_family\",\"product\",\"variant\",\"option_value\"]},\"evidenceConflictPolicy\":{\"type\":\"string\",\"enum\":[\"review-required\",\"stronger-source-basis-then-recency\",\"latest-within-authority\"]},\"physicalStorage\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"attribute_values\"},\"requiresFamilyAuthority\":{\"type\":\"boolean\"},\"scope\":{\"type\":\"string\",\"enum\":[\"brand\",\"product\",\"variant\"]}},\"required\":[\"kind\",\"requiresFamilyAuthority\",\"scope\"]},{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"option_corpus\"}},\"required\":[\"kind\"]}]},\"sourceRequirementId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"canonicalGrain\",\"evidenceConflictPolicy\",\"physicalStorage\",\"sourceRequirementId\"]}},\"required\":[\"id\",\"lifecycle\",\"semanticId\",\"name\",\"description\",\"valueKind\",\"quantityKind\",\"canonicalUnitId\",\"acceptedUnitIds\",\"valueDictionaryId\",\"defaultSourceRequirementId\",\"externalMappings\",\"searchFacet\",\"comparable\",\"usedInBlocks\",\"enumValues\",\"shapeId\",\"domainContract\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaBlocksResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"blocks\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"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},\"name\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"attributeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1,\"patte",
136
- "rn\":\"^[a-z][a-z0-9_]*$\"}}},\"required\":[\"id\",\"lifecycle\",\"semanticId\",\"name\",\"description\",\"attributeIds\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaMappingsResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"mappings\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"canonicalPath\":{\"type\":\"string\"},\"mappingType\":{\"type\":\"string\",\"enum\":[\"direct\",\"transform\",\"derived\",\"classification\",\"semantic\"]},\"matchStrength\":{\"type\":\"string\",\"enum\":[\"exact\",\"close\",\"broad\",\"narrow\",\"related\"]},\"notes\":{\"type\":\"string\"},\"subjectId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"subjectKind\":{\"type\":\"string\",\"enum\":[\"attribute\",\"block\",\"product_type\",\"template\",\"unit\",\"value_dictionary\",\"value_dictionary_term\"]},\"target\":{\"type\":\"string\",\"enum\":[\"schema_org\",\"ifc_pset\",\"bsdd\",\"iso_23387\",\"eclass\",\"gs1_gdm\",\"gdsn\",\"etim\",\"uniclass\"]},\"targetPath\":{\"type\":\"string\"}},\"required\":[\"canonicalPath\",\"mappingType\",\"matchStrength\",\"target\",\"targetPath\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaProductTypeTemplatesResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"productTypeTemplates\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"applicability\":{\"type\":\"string\",\"enum\":[\"required\",\"recommended\",\"optional\",\"unusual\"]},\"blockId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"completenessWeight\":{\"type\":\"number\"},\"notes\":{\"type\":\"string\"},\"optionalAttributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"requiredAttributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"sourceRequirementId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}},\"required\":[\"applicability\",\"blockId\"]}},\"defaultSourceRequirementId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"name\":{\"type\":\"string\"},\"notes\":{\"type\":\"string\"},\"productTypeId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"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\":[\"blocks\",\"id\",\"name\",\"productTypeId\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaProductTypesResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"productTypes\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"applicability\":{\"type\":\"string\",\"enum\":[\"required\",\"recommended\",\"optional\",\"unusual\"]},\"blockId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"completenessWeight\":{\"type\":\"number\"},\"notes\":{\"type\":\"string\"},\"optional\":{\"type\":\"boolean\"},\"optionalAttributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"requiredAttributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"sourceRequirementId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}},\"required\":[\"applicability\",\"blockId\"]}},\"description\":{\"type\":\"string\"},\"formerNames\":{\"description\":\"Display names this type carried before a rename, kept so they still find it.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"name\":{\"type\":\"string\"},\"parentProductTypeGroupId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"productTypeSpecificAttributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"verticalId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-",
137
- "9_]*$\"},\"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\":[\"blocks\",\"id\",\"name\",\"verticalId\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaSourceRequirementsResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"sourceRequirements\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"name\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"allowedSourceTypes\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"manufacturer_page\",\"technical_data_sheet\",\"safety_data_sheet\",\"test_report\",\"certificate\",\"image\",\"commerce_page\",\"catalog_pdf\",\"derived_analysis\"]}},\"allowedMethods\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"manual_review\",\"agent_extract\",\"pdf_extract\",\"image_analysis\",\"html_scrape\",\"structured_feed\",\"calculation\"]}},\"minConfidence\":{\"type\":\"number\"},\"reviewRequired\":{\"type\":\"boolean\"},\"freshnessDays\":{\"type\":\"number\"},\"sourceBasis\":{\"type\":\"string\",\"enum\":[\"declared\",\"derived\"]},\"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\",\"name\",\"description\",\"allowedSourceTypes\",\"allowedMethods\",\"minConfidence\",\"reviewRequired\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaUnitsResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"units\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"acceptedSourceUnits\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"conversionToCanonical\":{\"type\":\"object\",\"properties\":{\"factor\":{\"type\":\"number\"},\"offset\":{\"type\":\"number\"}},\"required\":[\"factor\"]},\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"name\":{\"type\":\"string\"},\"notes\":{\"type\":\"string\"},\"quantityKind\":{\"type\":\"string\",\"enum\":[\"length\",\"area\",\"volume\",\"mass\",\"time\",\"temperature\",\"currency\",\"ratio\",\"density\",\"coverage\",\"emissions\",\"force\",\"thermal_conductivity\",\"power\",\"voltage\",\"current\",\"frequency\",\"luminous_flux\",\"color_temperature\",\"count\",\"unitless\"]},\"qudtUnit\":{\"type\":\"string\",\"format\":\"uri\"},\"symbol\":{\"type\":\"string\"},\"uncefactCode\":{\"type\":\"string\",\"pattern\":\"^[0-9A-Z]{2,3}$\"},\"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\",\"name\",\"quantityKind\",\"symbol\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"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\",\"syste",
138
- "m\"]},{\"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\":\"string\",\"minLength\":1}},\"required\":[\"authority\",\"description\",\"id\",\"name\",\"terms\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaVerticalsResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"verticals\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\"},\"displayName\":{\"type\":\"string\"},\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}},\"required\":[\"description\",\"displayName\",\"id\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SearchByGradientResponse\":{\"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\"],\"",
139
- "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 sample 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\":[\"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 ",
140
- "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\"]},\"coverage\":{\"type\":\"number\",\"description\":\"Thirds of the path where the material holds a swatch at least 0.5 close to a sampled point, over 3: 1 spans the whole transition. A receipt; it does not reorder the page.\"},\"samples\":{\"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 sampled point along the path, in path order.\"}},\"required\":[\"brand\",\"brandSlug\",\"category\",\"color\",\"imageUrl\",\"palette\",\"product\",\"productId\",\"retired\",\"score\",\"variantId\",\"variantName\",\"coverage\",\"samples\"]},\"description\":\"Matches, best score first.\"},\"query\":{\"type\":\"object\",\"properties\":{\"samples\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"The sampled path points the search actually ran against.\"},\"stops\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"The stops, normalised to `#rrggbb`.\"}},\"required\":[\"samples\",\"stops\"],\"description\":\"Echo of the resolved query.\"}},\"required\":[\"count\",\"matches\",\"query\"]},\"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\":",
141
- "[\"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\":[\"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 — ",
142
- "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\":\"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 respon",
143
- "se. 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 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 rat",
144
- "her 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, 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",
145
- "-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 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\"},{\"ty",
146
- "pe\":\"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, makers, 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\"]},{\"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\"]},\"proje",
147
- "ctSaveCapability\":{\"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 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",
148
- "\":{\"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, makers, 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\"]},\"SourceImageAnalysis\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"enum\":[\"scene_match\"],\"description\":\"The kind of read. `scene_match` is the Scene Match pass. The vocabulary grows over time; clients should tolerate new values.\"},\"model\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The model version that produced `result`.\"},\"status\":{\"type\":\"string\",\"enum\":[\"ok\",\"failed\"],\"description\":\"`failed` analyses are returned, not hidden — so you can tell 'we looked and it did not work' apart from 'nobody has looked yet' (which is an empty `analyses` array).\"},\"result\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema2\"},\"description\":\"The analysis payload verbat",
149
- "im, or the failure record when `status` is `failed`. For `scene_match`: the detected regions with their candidate variant ids and scores. The interior shape belongs to the producing model and may gain fields.\"},\"analysedAt\":{\"type\":\"string\",\"minLength\":1,\"description\":\"ISO-8601 timestamp of the most recent analysis.\"}},\"required\":[\"kind\",\"model\",\"status\",\"result\",\"analysedAt\"]},\"SourceMaterialBatchDetail\":{\"type\":\"object\",\"properties\":{\"batchId\":{\"type\":\"string\",\"description\":\"The stored batch id (`smb_…`).\"},\"createdAt\":{\"type\":\"string\",\"description\":\"ISO-8601 timestamp of the upload.\"},\"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\"}]},\"url\":{\"type\":\"string\",\"description\":\"Fetchable URL for the stored bytes.\"},\"analyses\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/SourceImageAnalysis\"},\"description\":\"Every analysis computed over this file's bytes. ALWAYS an array: `[]` means nothing has been computed yet, never a missing field. Preprocessing is triggered manually today; when it becomes automatic only the trigger changes and this contract does not.\"},\"comments\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/SourceMaterialComment\"},\"description\":\"The argument about this file - the thread of remarks people left on it, oldest root first, each carrying its replies. ALWAYS an array: `[]` means nobody has commented, which is a state to draw rather than an absence to guess at.\"},\"commentsTruncated\":{\"type\":\"boolean\",\"description\":\"`true` when this file holds more than 500 comment rows, so `comments` is the oldest of them rather than all. Always present; `false` on a file whose thread you are seeing in full, including one nobody has commented on.\"}},\"required\":[\"sourceId\",\"role\",\"filename\",\"mediaType\",\"sha256\",\"bytes\",\"pages\",\"url\",\"analyses\",\"comments\",\"commentsTruncated\"]}}},\"required\":[\"batchId\",\"createdAt\",\"sources\"]},\"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\"]},\"SourceMaterialComment\":{\"type\":\"object\",\"properties\":{\"commentId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The stored comment id (`smc_…`).\"},\"author\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":160,\"description\":\"Who the comment is reported to be from. Nothing authenticates this name — it is transcription, and it is read back labelled as such.\"},\"organisation\":{\"description\":\"Their practice",
150
- " or team. Nullable, NOT optional: `null` is the answer for a note carrying no organisation, and the key is always present.\",\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"maxLength\":160},{\"type\":\"null\"}]},\"attribution\":{\"type\":\"string\",\"const\":\"reported\",\"description\":\"How this name got here. `reported` means a caller typed it and nothing verified it — render it as 'recorded as from X', never as a statement X signed. The verified identity is `recordedBy`. New members may be added if a verified channel is ever built; treat an unfamiliar value as unverified.\"}},\"required\":[\"name\",\"organisation\",\"attribution\"]},\"recordedBy\":{\"type\":\"object\",\"properties\":{\"principalId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The authenticated principal that wrote the row — the trustworthy half of the attribution. Comments can only be posted against a batch the poster owns, so this is your own principal on every comment you can read.\"}},\"required\":[\"principalId\"]},\"body\":{\"type\":\"string\",\"minLength\":1},\"createdAt\":{\"type\":\"string\",\"minLength\":1,\"description\":\"ISO-8601 timestamp of the posting.\"},\"replies\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/SourceMaterialCommentReply\"},\"description\":\"The replies answering this comment, oldest first. ALWAYS an array: `[]` means nobody answered, never a missing field.\"}},\"required\":[\"commentId\",\"author\",\"recordedBy\",\"body\",\"createdAt\",\"replies\"]},\"SourceMaterialCommentReply\":{\"type\":\"object\",\"properties\":{\"commentId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The stored comment id (`smc_…`).\"},\"author\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":160,\"description\":\"Who the comment is reported to be from. Nothing authenticates this name — it is transcription, and it is read back labelled as such.\"},\"organisation\":{\"description\":\"Their practice or team. Nullable, NOT optional: `null` is the answer for a note carrying no organisation, and the key is always present.\",\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"maxLength\":160},{\"type\":\"null\"}]},\"attribution\":{\"type\":\"string\",\"const\":\"reported\",\"description\":\"How this name got here. `reported` means a caller typed it and nothing verified it — render it as 'recorded as from X', never as a statement X signed. The verified identity is `recordedBy`. New members may be added if a verified channel is ever built; treat an unfamiliar value as unverified.\"}},\"required\":[\"name\",\"organisation\",\"attribution\"]},\"recordedBy\":{\"type\":\"object\",\"properties\":{\"principalId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The authenticated principal that wrote the row — the trustworthy half of the attribution. Comments can only be posted against a batch the poster owns, so this is your own principal on every comment you can read.\"}},\"required\":[\"principalId\"]},\"body\":{\"type\":\"string\",\"minLength\":1},\"createdAt\":{\"type\":\"string\",\"minLength\":1,\"description\":\"ISO-8601 timestamp of the posting.\"}},\"required\":[\"commentId\",\"author\",\"recordedBy\",\"body\",\"createdAt\"]},\"SourceMaterialCommentThread\":{\"type\":\"object\",\"properties\":{\"sourceId\":{\"type\":\"string\",\"description\":\"The file the thread hangs off (`smf_…`).\"},\"comments\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/SourceMaterialComment\"},\"description\":\"The thread, oldest root first. ALWAYS an array: `[]` means the file is yours and nobody has commented on it.\"},\"truncated\":{\"type\":\"boolean\",\"description\":\"`true` when this file holds more than 500 comment rows and `comments` is therefore the oldest of them rather than all. Always present: whether you are looking at the whole thread is an answer, not something to infer from a count.\"}},\"required\":[\"sourceId\",\"comments\",\"truncated\"]},\"SpecFacetsListResponse\":{\"type\":\"object\",\"properties\":{\"count\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Number of facets returned.\"},\"facets\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\",\"description\":\"Canonical attribute id — query it in search/specifications as `attribute:value`, or as `specRange=attribute:min..max` when `kind` is `numeric`.\"}",
151
- ",\"brands\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Brands carrying any value for this attribute.\"},\"description\":{\"description\":\"How the facet is queried (set for virtual facets like certification programmes).\",\"type\":\"string\"},\"isArray\":{\"type\":\"boolean\",\"description\":\"Whether the attribute holds multiple values per variant.\"},\"kind\":{\"type\":\"string\",\"enum\":[\"token\",\"numeric\"],\"description\":\"How this facet is queried. `token` — pick a value from `values` and pass `spec=attribute:value`. `numeric` — state inclusive bounds and pass `specRange=attribute:min..max`; `values` is empty and `range` carries the span.\"},\"name\":{\"type\":\"string\",\"description\":\"Human-readable attribute name.\"},\"range\":{\"description\":\"Observed span + coverage. Present ONLY on a `numeric` facet.\",\"type\":\"object\",\"properties\":{\"max\":{\"type\":\"number\",\"description\":\"Highest value on record. Inclusive.\"},\"min\":{\"type\":\"number\",\"description\":\"Lowest value on record. Inclusive.\"},\"unparseableVariants\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Variants recording a value that is NOT a number. A range filter EXCLUDES these; it never reads them as zero.\"},\"variants\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Variants carrying a value that parses as a number — the COVERAGE a range filter can actually reach. Read it before concluding an empty result means nothing qualifies.\"}},\"required\":[\"max\",\"min\",\"unparseableVariants\",\"variants\"]},\"values\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brands\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Distinct brands carrying this value.\"},\"label\":{\"description\":\"Human label for the value, when one is known (e.g. certification programmes).\",\"type\":\"string\"},\"value\":{\"type\":\"string\",\"description\":\"A canonical value token queryable in search/specifications.\"},\"variants\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Variants carrying this value.\"}},\"required\":[\"brands\",\"value\",\"variants\"]},\"description\":\"Top canonical values, most-cross-brand first. EMPTY for a `numeric` facet, which has no token vocabulary.\"}},\"required\":[\"attributeId\",\"brands\",\"isArray\",\"kind\",\"name\",\"values\"]},\"description\":\"Queryable specification facets, most-cross-brand first.\"},\"mode\":{\"type\":\"string\",\"const\":\"facets\",\"description\":\"The complete live specification-facet collection.\"}},\"required\":[\"count\",\"facets\",\"mode\"]},\"StoredSourceMaterialComment\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"commentId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The stored comment id (`smc_…`).\"},\"author\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":160,\"description\":\"Who the comment is reported to be from. Nothing authenticates this name — it is transcription, and it is read back labelled as such.\"},\"organisation\":{\"description\":\"Their practice or team. Nullable, NOT optional: `null` is the answer for a note carrying no organisation, and the key is always present.\",\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"maxLength\":160},{\"type\":\"null\"}]},\"attribution\":{\"type\":\"string\",\"const\":\"reported\",\"description\":\"How this name got here. `reported` means a caller typed it and nothing verified it — render it as 'recorded as from X', never as a statement X signed. The verified identity is `recordedBy`. New members may be added if a verified channel is ever built; treat an unfamiliar value as unverified.\"}},\"required\":[\"name\",\"organisation\",\"attribution\"]},\"recordedBy\":{\"type\":\"object\",\"properties\":{\"principalId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The authenticated principal that wrote the row — the trustworthy half of the attribution. Comments can only be posted against a batch the poster owns, so this is your own principal on every comment you can read.\"}},\"required\":[\"principalId\"]},\"body\":{\"type\":\"string\",\"minLength\":1},\"createdAt\":{\"type\":\"string\",\"minLength\":1,\"description\":\"ISO-8601 ",
152
- "timestamp of the posting.\"},\"replies\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/SourceMaterialCommentReply\"},\"description\":\"The replies answering this comment, oldest first. ALWAYS an array: `[]` means nobody answered, never a missing field.\"},\"kind\":{\"type\":\"string\",\"const\":\"root\"}},\"required\":[\"commentId\",\"author\",\"recordedBy\",\"body\",\"createdAt\",\"replies\",\"kind\"]},{\"type\":\"object\",\"properties\":{\"commentId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The stored comment id (`smc_…`).\"},\"author\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":160,\"description\":\"Who the comment is reported to be from. Nothing authenticates this name — it is transcription, and it is read back labelled as such.\"},\"organisation\":{\"description\":\"Their practice or team. Nullable, NOT optional: `null` is the answer for a note carrying no organisation, and the key is always present.\",\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"maxLength\":160},{\"type\":\"null\"}]},\"attribution\":{\"type\":\"string\",\"const\":\"reported\",\"description\":\"How this name got here. `reported` means a caller typed it and nothing verified it — render it as 'recorded as from X', never as a statement X signed. The verified identity is `recordedBy`. New members may be added if a verified channel is ever built; treat an unfamiliar value as unverified.\"}},\"required\":[\"name\",\"organisation\",\"attribution\"]},\"recordedBy\":{\"type\":\"object\",\"properties\":{\"principalId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The authenticated principal that wrote the row — the trustworthy half of the attribution. Comments can only be posted against a batch the poster owns, so this is your own principal on every comment you can read.\"}},\"required\":[\"principalId\"]},\"body\":{\"type\":\"string\",\"minLength\":1},\"createdAt\":{\"type\":\"string\",\"minLength\":1,\"description\":\"ISO-8601 timestamp of the posting.\"},\"kind\":{\"type\":\"string\",\"const\":\"reply\"},\"parentCommentId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The root comment this one answers.\"}},\"required\":[\"commentId\",\"author\",\"recordedBy\",\"body\",\"createdAt\",\"kind\",\"parentCommentId\"]}]},\"SuggestColourResponse\":{\"type\":\"object\",\"properties\":{\"suggestions\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\"},\"libraryId\":{\"type\":\"string\"},\"term\":{\"type\":\"string\"}},\"required\":[\"hex\",\"kind\",\"term\"]},\"description\":\"Ranked colour-name suggestions, best match first.\"}},\"required\":[\"suggestions\"]},\"SuggestResponse\":{\"type\":\"object\",\"properties\":{\"query\":{\"type\":\"string\"},\"suggestions\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brandName\":{\"type\":[\"string\",\"null\"]},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"categoryKey\":{\"type\":[\"string\",\"null\"]},\"kind\":{\"type\":\"string\",\"enum\":[\"product\",\"brand\",\"category\"]},\"label\":{\"type\":\"string\"},\"match\":{\"type\":\"string\",\"enum\":[\"prefix\",\"word\",\"fuzzy\"]},\"refId\":{\"type\":\"string\"},\"variantCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"variantId\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brandName\",\"brandSlug\",\"categoryKey\",\"kind\",\"label\",\"match\",\"refId\",\"variantCount\",\"variantId\"]}}},\"required\":[\"query\",\"suggestions\"]},\"VariantAssetPage\":{\"type\":\"object\",\"properties\":{\"documentCoverage\":{\"description\":\"Maker 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: maker'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\":[\"tec",
153
- "hnical_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.\",\"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\"]},\"__schema2\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"number\"},{\"type\":\"boolean\"},{\"type\":\"null\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/__schema2\"}},{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema2\"}}]},\"__schema3\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"number\"},{\"type\":\"boolean\"},{\"type\":\"null\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/__schema3\"}},{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema3\"}}]}},\"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\"},\"retrieval.identify\":{\"$ref\":\"#/$defs/LookupVariantResponse\"},\"match_material\":{\"anyOf\":[{\"$ref\":\"#/$defs/MatchMaterialResponse\"},{\"$ref\":\"#/$defs/MatchWorkflowResponse\"}]},\"search_suggest\":{\"$ref\":\"#/$defs/SuggestResponse\"},\"get_colour_stats\":{\"$ref\":\"#/$defs/ColourStatsResponse\"},\"coordinate_materials\":{\"$ref\":\"#/$defs/CoordinateMaterialsResponse\"},\"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_material\":{\"type\":\"object\",\"properties\":{\"material\":{\"$ref\":\"#/$defs/MaterialDetail\"}},\"required\":[\"material\"]},\"get_catalogue_references_batch\":{\"$ref\":\"#/$defs/CatalogueReferenceBatchResponse\"},\"list_catalogue_channel_collections\":{\"$ref\":\"#/$defs/CatalogueChannelCollectionsResponse\"},\"get_catalogue_document_access\":{\"$ref\":\"#/$defs/CatalogueDo",
154
- "cumentAccessResult\"},\"list_material_blocks\":{\"$ref\":\"#/$defs/MaterialBlockProjection\"},\"list_variant_assets\":{\"$ref\":\"#/$defs/VariantAssetPage\"},\"list_material_documents\":{\"$ref\":\"#/$defs/ProductDocumentPage\"},\"get_composition_report\":{\"$ref\":\"#/$defs/CompositionCorpusSummary\"},\"list_schema_blocks\":{\"$ref\":\"#/$defs/SchemaBlocksResponse\"},\"list_schema_attributes\":{\"$ref\":\"#/$defs/SchemaAttributesResponse\"},\"list_schema_verticals\":{\"$ref\":\"#/$defs/SchemaVerticalsResponse\"},\"list_schema_product_types\":{\"$ref\":\"#/$defs/SchemaProductTypesResponse\"},\"list_schema_units\":{\"$ref\":\"#/$defs/SchemaUnitsResponse\"},\"list_schema_value_dictionaries\":{\"$ref\":\"#/$defs/SchemaValueDictionariesResponse\"},\"list_schema_source_requirements\":{\"$ref\":\"#/$defs/SchemaSourceRequirementsResponse\"},\"list_schema_product_type_templates\":{\"$ref\":\"#/$defs/SchemaProductTypeTemplatesResponse\"},\"list_schema_mappings\":{\"$ref\":\"#/$defs/SchemaMappingsResponse\"},\"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\"},\"get_category_colour_profiles\":{\"$ref\":\"#/$defs/CategoryColourProfilesResponse\"},\"resolve_colour_name\":{\"$ref\":\"#/$defs/ResolveColourResponse\"},\"suggest_colour_names\":{\"$ref\":\"#/$defs/SuggestColourResponse\"},\"catalog_list_attributes\":{\"$ref\":\"#/$defs/ListAttributesResponse\"},\"list_categories\":{\"$ref\":\"#/$defs/ListCategoriesResponse\"},\"get_category\":{\"$ref\":\"#/$defs/GetCategoryResponse\"},\"get_product_type_status_coverage\":{\"type\":\"object\",\"properties\":{\"basis\":{\"type\":\"object\",\"properties\":{\"assignment\":{\"type\":\"string\",\"const\":\"variant_primary_only\"},\"comparisonThreshold\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1,\"description\":\"A reporting cutoff, not an inferred acceptance rule. Proposed assignments at or above this cutoff remain proposed.\"},\"count\":{\"type\":\"string\",\"const\":\"exact\"},\"sourcePath\":{\"type\":\"string\",\"const\":\"products.source_category_path\"},\"universe\":{\"type\":\"string\",\"const\":\"non_superseded_variants\"}},\"required\":[\"assignment\",\"comparisonThreshold\",\"count\",\"sourcePath\",\"universe\"]},\"computedAt\":{\"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))$\"},\"sourcePaths\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"accepted\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"missingPrimary\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"otherStatus\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposed\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposedBelowThreshold\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposedUnknownConfidence\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"variants\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"sourcePath\":{\"description\":\"The complete s",
155
- "tored source category path, verbatim; compound leaves are not split or guessed. Null means no path is recorded.\",\"type\":[\"string\",\"null\"]}},\"required\":[\"accepted\",\"missingPrimary\",\"otherStatus\",\"proposed\",\"proposedBelowThreshold\",\"proposedUnknownConfidence\",\"variants\",\"sourcePath\"]}},\"totals\":{\"type\":\"object\",\"properties\":{\"accepted\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"missingPrimary\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"otherStatus\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposed\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposedBelowThreshold\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposedUnknownConfidence\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"variants\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"accepted\",\"missingPrimary\",\"otherStatus\",\"proposed\",\"proposedBelowThreshold\",\"proposedUnknownConfidence\",\"variants\"]}},\"required\":[\"basis\",\"computedAt\",\"sourcePaths\",\"totals\"]},\"whoami\":{\"$ref\":\"#/$defs/WhoamiResponse\"},\"get_material_demand\":{\"type\":\"object\",\"properties\":{\"query\":{\"type\":\"string\",\"description\":\"Echo of the resolved reference (`variantId` or `material`).\"},\"demand\":{\"$ref\":\"#/$defs/MaterialDemandResult\"},\"cospec\":{\"$ref\":\"#/$defs/CoSpecifiedResult\"}},\"required\":[\"query\",\"demand\",\"cospec\"]},\"search_by_palette\":{\"$ref\":\"#/$defs/SearchByPaletteResponse\"},\"extract_image_palette\":{\"$ref\":\"#/$defs/ExtractPaletteResponse\"},\"search_by_gradient\":{\"$ref\":\"#/$defs/SearchByGradientResponse\"},\"list_spec_facets\":{\"$ref\":\"#/$defs/SpecFacetsListResponse\"},\"list_brands\":{\"$ref\":\"#/$defs/BrandCatalogListPage\"},\"upload_source_material\":{\"$ref\":\"#/$defs/SourceMaterialBatchReceipt\"},\"get_source_material_batch\":{\"$ref\":\"#/$defs/SourceMaterialBatchDetail\"},\"list_source_material_comments\":{\"$ref\":\"#/$defs/SourceMaterialCommentThread\"},\"post_source_material_comment\":{\"$ref\":\"#/$defs/PostSourceMaterialCommentResponse\"},\"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\"]},\"get_demand_batch\":{\"$ref\":\"#/$defs/EnrichCandidateDemandResponse\"},\"resolveCodeAdvisory\":{\"$ref\":\"#/$defs/CodeAdvisoryResponse\"},\"list_code_context\":{\"$ref\":\"#/$defs/CodeContextResponse\"},\"list_code_requirements\":{\"$ref\":\"#/$defs/CodeRequirementsResponse\"}}}",
128
+ "mentTypes\":{\"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\"},\"capabilityKind\":{\"type\":\"string\",\"enum\":[\"agent\",\"tool\",\"workflow\"]},\"capabilityId\":{\"type\":\"string\"},\"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 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[0",
129
+ "2])-(?: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\",\"capabilityKind\",\"capabilityId\",\"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\",\"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\",\"propert",
130
+ "ies\":{\"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 maker: 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 maker'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\"},\"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 (maker paint names and codes), global, and independent of `corpusScope`, which only sets each variant's `i",
131
+ "nScope`.\",\"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 maker'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 maker'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 maker'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 maker'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 maker'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 maker'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 maker's paint name or code, or it is a hex. `generic-colour`: the name is a colour word makers also use as a paint name; qualify it with a maker. `several-paints`: the name is more than one maker's paint; qualify it with a maker.\"},\"status\":{\"type\":\"string\",\"const\":\"not-looked-up\",\"description\":\"The catalogue was not searched; there was no one maker'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\"]},\"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\"}},\"requir",
132
+ "ed\":[\"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\"},\"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\"}",
133
+ "]},\"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\":{\"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\":",
134
+ "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\":[\"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\",\"",
135
+ "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\"]},\"SchemaAttributesResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"attributes\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"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},\"name\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"valueKind\":{\"type\":\"string\",\"enum\":[\"string\",\"text\",\"integer\",\"number\",\"boolean\",\"enum\",\"object\",\"reference\"]},\"quantityKind\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"length\",\"area\",\"volume\",\"mass\",\"time\",\"temperature\",\"currency\",\"ratio\",\"density\",\"coverage\",\"emissions\",\"force\",\"thermal_conductivity\",\"power\",\"voltage\",\"current\",\"frequency\",\"luminous_flux\",\"color_temperature\",\"count\",\"unitless\"]},{\"type\":\"null\"}]},\"canonicalUnitId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},{\"type\":\"null\"}]},\"acceptedUnitIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}},\"valueDictionaryId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},{\"type\":\"null\"}]},\"defaultSourceRequirementId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},{\"type\":\"null\"}]},\"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\"]}},\"searchFacet\":{\"type\":\"boolean\"},\"comparable\":{\"type\":\"boolean\"},\"usedInBlocks\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}},\"enumValues\":{\"anyOf\":[{\"type\":\"array\",\"items\":{\"type\":\"string\"}},{\"type\":\"null\"}]},\"shapeId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},{\"type\":\"null\"}]},\"domainContract\":{\"type\":\"object\",\"properties\":{\"canonicalGrain\":{\"type\":\"string\",\"enum\":[\"brand\",\"product_family\",\"product\",\"variant\",\"option_value\"]},\"evidenceConflictPolicy\":{\"type\":\"string\",\"enum\":[\"review-required\",\"stronger-source-basis-then-recency\",\"latest-within-authority\"]},\"physicalStorage\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"attribute_values\"},\"requiresFamilyAuthority\":{\"type\":\"boolean\"},\"scope\":{\"type\":\"string\",\"enum\":[\"brand\",\"product\",\"variant\"]}},\"required\":[\"kind\",\"requiresFamilyAuthority\",\"scope\"]},{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"option_corpus\"}},\"required\":[\"kind\"]}]},\"sourceRequirementId\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"canonicalGrain\",\"evidenceConflictPolicy\",\"physicalStorage\",\"sourceRequirementId\"]}},\"required\":[\"id\",\"lifecycle\",\"semanticId\",\"name\",\"description\",\"valueKind\",\"quantityKind\",\"canonicalUnitId\",\"acceptedUnitIds\",\"valueDictionaryId\",\"defaultSourceRequirementId\",\"externalMappings\",\"searchFacet\",\"comparable\",\"usedInBlocks\",\"enumValues\",\"shapeId\",\"domainContract\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaBlocksResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"blocks\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*",
136
+ "$\"},\"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},\"name\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"attributeIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}}},\"required\":[\"id\",\"lifecycle\",\"semanticId\",\"name\",\"description\",\"attributeIds\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaMappingsResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"mappings\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"canonicalPath\":{\"type\":\"string\"},\"mappingType\":{\"type\":\"string\",\"enum\":[\"direct\",\"transform\",\"derived\",\"classification\",\"semantic\"]},\"matchStrength\":{\"type\":\"string\",\"enum\":[\"exact\",\"close\",\"broad\",\"narrow\",\"related\"]},\"notes\":{\"type\":\"string\"},\"subjectId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"subjectKind\":{\"type\":\"string\",\"enum\":[\"attribute\",\"block\",\"product_type\",\"template\",\"unit\",\"value_dictionary\",\"value_dictionary_term\"]},\"target\":{\"type\":\"string\",\"enum\":[\"schema_org\",\"ifc_pset\",\"bsdd\",\"iso_23387\",\"eclass\",\"gs1_gdm\",\"gdsn\",\"etim\",\"uniclass\"]},\"targetPath\":{\"type\":\"string\"}},\"required\":[\"canonicalPath\",\"mappingType\",\"matchStrength\",\"target\",\"targetPath\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaProductTypeTemplatesResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"productTypeTemplates\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"applicability\":{\"type\":\"string\",\"enum\":[\"required\",\"recommended\",\"optional\",\"unusual\"]},\"blockId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"completenessWeight\":{\"type\":\"number\"},\"notes\":{\"type\":\"string\"},\"optionalAttributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"requiredAttributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"sourceRequirementId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}},\"required\":[\"applicability\",\"blockId\"]}},\"defaultSourceRequirementId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"name\":{\"type\":\"string\"},\"notes\":{\"type\":\"string\"},\"productTypeId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"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\":[\"blocks\",\"id\",\"name\",\"productTypeId\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaProductTypesResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"productTypes\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"blocks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"applicability\":{\"type\":\"string\",\"enum\":[\"required\",\"recommended\",\"optional\",\"unusual\"]},\"blockId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"completenessWeight\":{\"type\":\"number\"},\"notes\":{\"type\":\"string\"},\"optional\":{\"type\":\"boolean\"},\"optionalAttributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"requiredAttributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"sourceRequirementId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}},\"required\":[\"applicability\",\"blockId\"]}},\"description\":{\"type\":\"string\"},\"formerNames\":{\"description\":\"Display names ",
137
+ "this type carried before a rename, kept so they still find it.\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"name\":{\"type\":\"string\"},\"parentProductTypeGroupId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"productTypeSpecificAttributes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"verticalId\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"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\":[\"blocks\",\"id\",\"name\",\"verticalId\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaSourceRequirementsResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"sourceRequirements\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"name\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"allowedSourceTypes\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"manufacturer_page\",\"technical_data_sheet\",\"safety_data_sheet\",\"test_report\",\"certificate\",\"image\",\"commerce_page\",\"catalog_pdf\",\"derived_analysis\"]}},\"allowedMethods\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"manual_review\",\"agent_extract\",\"pdf_extract\",\"image_analysis\",\"html_scrape\",\"structured_feed\",\"calculation\"]}},\"minConfidence\":{\"type\":\"number\"},\"reviewRequired\":{\"type\":\"boolean\"},\"freshnessDays\":{\"type\":\"number\"},\"sourceBasis\":{\"type\":\"string\",\"enum\":[\"declared\",\"derived\"]},\"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\",\"name\",\"description\",\"allowedSourceTypes\",\"allowedMethods\",\"minConfidence\",\"reviewRequired\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaUnitsResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"units\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"acceptedSourceUnits\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"conversionToCanonical\":{\"type\":\"object\",\"properties\":{\"factor\":{\"type\":\"number\"},\"offset\":{\"type\":\"number\"}},\"required\":[\"factor\"]},\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"},\"name\":{\"type\":\"string\"},\"notes\":{\"type\":\"string\"},\"quantityKind\":{\"type\":\"string\",\"enum\":[\"length\",\"area\",\"volume\",\"mass\",\"time\",\"temperature\",\"currency\",\"ratio\",\"density\",\"coverage\",\"emissions\",\"force\",\"thermal_conductivity\",\"power\",\"voltage\",\"current\",\"frequency\",\"luminous_flux\",\"color_temperature\",\"count\",\"unitless\"]},\"qudtUnit\":{\"type\":\"string\",\"format\":\"uri\"},\"symbol\":{\"type\":\"string\"},\"uncefactCode\":{\"type\":\"string\",\"pattern\":\"^[0-9A-Z]{2,3}$\"},\"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\",\"name\",\"quantityKind\",\"symbol\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"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\":{\"",
138
+ "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\":\"string\",\"minLength\":1}},\"required\":[\"authority\",\"description\",\"id\",\"name\",\"terms\",\"lifecycle\",\"semanticId\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SchemaVerticalsResponse\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"verticals\"},\"schemaVersion\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\"},\"displayName\":{\"type\":\"string\"},\"id\":{\"type\":\"string\",\"minLength\":1,\"pattern\":\"^[a-z][a-z0-9_]*$\"}},\"required\":[\"description\",\"displayName\",\"id\"]}},\"totalCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"kind\",\"schemaVersion\",\"items\",\"totalCount\"]},\"SearchByGradientResponse\":{\"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.\"}},\"requi",
139
+ "red\":[\"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 sample 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\":[\"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 extracte",
140
+ "d 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\"]},\"coverage\":{\"type\":\"number\",\"description\":\"Thirds of the path where the material holds a swatch at least 0.5 close to a sampled point, over 3: 1 spans the whole transition. A receipt; it does not reorder the page.\"},\"samples\":{\"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 sampled point along the path, in path order.\"}},\"required\":[\"brand\",\"brandSlug\",\"category\",\"color\",\"imageUrl\",\"palette\",\"product\",\"productId\",\"retired\",\"score\",\"variantId\",\"variantName\",\"coverage\",\"samples\"]},\"description\":\"Matches, best score first.\"},\"query\":{\"type\":\"object\",\"properties\":{\"samples\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"The sampled path points the search actually ran against.\"},\"stops\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"The stops, normalised to `#rrggbb`.\"}},\"required\":[\"samples\",\"stops\"],\"description\":\"Echo of the resolved query.\"}},\"required\":[\"count\",\"matches\",\"query\"]},\"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\":\"Categ",
141
+ "ory 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\":[\"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 ther",
142
+ "e 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\":\"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\":",
143
+ "\"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\":{\"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\":\"",
144
+ "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, 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",
145
+ " (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 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\":[",
146
+ "{\"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, makers, 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\"]},{\"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 c",
147
+ "ards 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 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",
148
+ "\":{\"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, makers, 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\"]},\"SourceImageAnalysis\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"enum\":[\"scene_match\"],\"description\":\"The kind of read. `scene_match` is the Scene Match pass. The vocabulary grows over time; clients should tolerate new values.\"},\"model\":{\"type\":\"string\",\"minLength\":1,\"description\":\"T",
149
+ "he model version that produced `result`.\"},\"status\":{\"type\":\"string\",\"enum\":[\"ok\",\"failed\"],\"description\":\"`failed` analyses are returned, not hidden — so you can tell 'we looked and it did not work' apart from 'nobody has looked yet' (which is an empty `analyses` array).\"},\"result\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema2\"},\"description\":\"The analysis payload verbatim, or the failure record when `status` is `failed`. For `scene_match`: the detected regions with their candidate variant ids and scores. The interior shape belongs to the producing model and may gain fields.\"},\"analysedAt\":{\"type\":\"string\",\"minLength\":1,\"description\":\"ISO-8601 timestamp of the most recent analysis.\"}},\"required\":[\"kind\",\"model\",\"status\",\"result\",\"analysedAt\"]},\"SourceMaterialBatchDetail\":{\"type\":\"object\",\"properties\":{\"batchId\":{\"type\":\"string\",\"description\":\"The stored batch id (`smb_…`).\"},\"createdAt\":{\"type\":\"string\",\"description\":\"ISO-8601 timestamp of the upload.\"},\"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\"}]},\"url\":{\"type\":\"string\",\"description\":\"Fetchable URL for the stored bytes.\"},\"analyses\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/SourceImageAnalysis\"},\"description\":\"Every analysis computed over this file's bytes. ALWAYS an array: `[]` means nothing has been computed yet, never a missing field. Preprocessing is triggered manually today; when it becomes automatic only the trigger changes and this contract does not.\"},\"comments\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/SourceMaterialComment\"},\"description\":\"The argument about this file - the thread of remarks people left on it, oldest root first, each carrying its replies. ALWAYS an array: `[]` means nobody has commented, which is a state to draw rather than an absence to guess at.\"},\"commentsTruncated\":{\"type\":\"boolean\",\"description\":\"`true` when this file holds more than 500 comment rows, so `comments` is the oldest of them rather than all. Always present; `false` on a file whose thread you are seeing in full, including one nobody has commented on.\"}},\"required\":[\"sourceId\",\"role\",\"filename\",\"mediaType\",\"sha256\",\"bytes\",\"pages\",\"url\",\"analyses\",\"comments\",\"commentsTruncated\"]}}},\"required\":[\"batchId\",\"createdAt\",\"sources\"]},\"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\"]},\"SourceM",
150
+ "aterialComment\":{\"type\":\"object\",\"properties\":{\"commentId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The stored comment id (`smc_…`).\"},\"author\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":160,\"description\":\"Who the comment is reported to be from. Nothing authenticates this name — it is transcription, and it is read back labelled as such.\"},\"organisation\":{\"description\":\"Their practice or team. Nullable, NOT optional: `null` is the answer for a note carrying no organisation, and the key is always present.\",\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"maxLength\":160},{\"type\":\"null\"}]},\"attribution\":{\"type\":\"string\",\"const\":\"reported\",\"description\":\"How this name got here. `reported` means a caller typed it and nothing verified it — render it as 'recorded as from X', never as a statement X signed. The verified identity is `recordedBy`. New members may be added if a verified channel is ever built; treat an unfamiliar value as unverified.\"}},\"required\":[\"name\",\"organisation\",\"attribution\"]},\"recordedBy\":{\"type\":\"object\",\"properties\":{\"principalId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The authenticated principal that wrote the row — the trustworthy half of the attribution. Comments can only be posted against a batch the poster owns, so this is your own principal on every comment you can read.\"}},\"required\":[\"principalId\"]},\"body\":{\"type\":\"string\",\"minLength\":1},\"createdAt\":{\"type\":\"string\",\"minLength\":1,\"description\":\"ISO-8601 timestamp of the posting.\"},\"replies\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/SourceMaterialCommentReply\"},\"description\":\"The replies answering this comment, oldest first. ALWAYS an array: `[]` means nobody answered, never a missing field.\"}},\"required\":[\"commentId\",\"author\",\"recordedBy\",\"body\",\"createdAt\",\"replies\"]},\"SourceMaterialCommentReply\":{\"type\":\"object\",\"properties\":{\"commentId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The stored comment id (`smc_…`).\"},\"author\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":160,\"description\":\"Who the comment is reported to be from. Nothing authenticates this name — it is transcription, and it is read back labelled as such.\"},\"organisation\":{\"description\":\"Their practice or team. Nullable, NOT optional: `null` is the answer for a note carrying no organisation, and the key is always present.\",\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"maxLength\":160},{\"type\":\"null\"}]},\"attribution\":{\"type\":\"string\",\"const\":\"reported\",\"description\":\"How this name got here. `reported` means a caller typed it and nothing verified it — render it as 'recorded as from X', never as a statement X signed. The verified identity is `recordedBy`. New members may be added if a verified channel is ever built; treat an unfamiliar value as unverified.\"}},\"required\":[\"name\",\"organisation\",\"attribution\"]},\"recordedBy\":{\"type\":\"object\",\"properties\":{\"principalId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The authenticated principal that wrote the row — the trustworthy half of the attribution. Comments can only be posted against a batch the poster owns, so this is your own principal on every comment you can read.\"}},\"required\":[\"principalId\"]},\"body\":{\"type\":\"string\",\"minLength\":1},\"createdAt\":{\"type\":\"string\",\"minLength\":1,\"description\":\"ISO-8601 timestamp of the posting.\"}},\"required\":[\"commentId\",\"author\",\"recordedBy\",\"body\",\"createdAt\"]},\"SourceMaterialCommentThread\":{\"type\":\"object\",\"properties\":{\"sourceId\":{\"type\":\"string\",\"description\":\"The file the thread hangs off (`smf_…`).\"},\"comments\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/SourceMaterialComment\"},\"description\":\"The thread, oldest root first. ALWAYS an array: `[]` means the file is yours and nobody has commented on it.\"},\"truncated\":{\"type\":\"boolean\",\"description\":\"`true` when this file holds more than 500 comment rows and `comments` is therefore the oldest of them rather than all. Always present: whether you are looking at the whole thread is an answer, not something to infer from a count.\"}},\"required\":[\"sourceId\",\"comments\",\"truncated\"]},\"SpecFa",
151
+ "cetsListResponse\":{\"type\":\"object\",\"properties\":{\"count\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Number of facets returned.\"},\"facets\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"attributeId\":{\"type\":\"string\",\"description\":\"Canonical attribute id — query it in search/specifications as `attribute:value`, or as `specRange=attribute:min..max` when `kind` is `numeric`.\"},\"brands\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Brands carrying any value for this attribute.\"},\"description\":{\"description\":\"How the facet is queried (set for virtual facets like certification programmes).\",\"type\":\"string\"},\"isArray\":{\"type\":\"boolean\",\"description\":\"Whether the attribute holds multiple values per variant.\"},\"kind\":{\"type\":\"string\",\"enum\":[\"token\",\"numeric\"],\"description\":\"How this facet is queried. `token` — pick a value from `values` and pass `spec=attribute:value`. `numeric` — state inclusive bounds and pass `specRange=attribute:min..max`; `values` is empty and `range` carries the span.\"},\"name\":{\"type\":\"string\",\"description\":\"Human-readable attribute name.\"},\"range\":{\"description\":\"Observed span + coverage. Present ONLY on a `numeric` facet.\",\"type\":\"object\",\"properties\":{\"max\":{\"type\":\"number\",\"description\":\"Highest value on record. Inclusive.\"},\"min\":{\"type\":\"number\",\"description\":\"Lowest value on record. Inclusive.\"},\"unparseableVariants\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Variants recording a value that is NOT a number. A range filter EXCLUDES these; it never reads them as zero.\"},\"variants\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Variants carrying a value that parses as a number — the COVERAGE a range filter can actually reach. Read it before concluding an empty result means nothing qualifies.\"}},\"required\":[\"max\",\"min\",\"unparseableVariants\",\"variants\"]},\"values\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brands\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Distinct brands carrying this value.\"},\"label\":{\"description\":\"Human label for the value, when one is known (e.g. certification programmes).\",\"type\":\"string\"},\"value\":{\"type\":\"string\",\"description\":\"A canonical value token queryable in search/specifications.\"},\"variants\":{\"type\":\"integer\",\"minimum\":-9007199254740991,\"maximum\":9007199254740991,\"description\":\"Variants carrying this value.\"}},\"required\":[\"brands\",\"value\",\"variants\"]},\"description\":\"Top canonical values, most-cross-brand first. EMPTY for a `numeric` facet, which has no token vocabulary.\"}},\"required\":[\"attributeId\",\"brands\",\"isArray\",\"kind\",\"name\",\"values\"]},\"description\":\"Queryable specification facets, most-cross-brand first.\"},\"mode\":{\"type\":\"string\",\"const\":\"facets\",\"description\":\"The complete live specification-facet collection.\"}},\"required\":[\"count\",\"facets\",\"mode\"]},\"StoredSourceMaterialComment\":{\"type\":\"object\",\"anyOf\":[{\"type\":\"object\",\"properties\":{\"commentId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The stored comment id (`smc_…`).\"},\"author\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":160,\"description\":\"Who the comment is reported to be from. Nothing authenticates this name — it is transcription, and it is read back labelled as such.\"},\"organisation\":{\"description\":\"Their practice or team. Nullable, NOT optional: `null` is the answer for a note carrying no organisation, and the key is always present.\",\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"maxLength\":160},{\"type\":\"null\"}]},\"attribution\":{\"type\":\"string\",\"const\":\"reported\",\"description\":\"How this name got here. `reported` means a caller typed it and nothing verified it — render it as 'recorded as from X', never as a statement X signed. The verified identity is `recordedBy`. New members may be added if a verified channel is ever built; treat an unfamiliar value as unverified.\"}},\"required\":[\"name\",\"organisation\",\"attribution\"]},\"recordedBy\":{\"type\":\"ob",
152
+ "ject\",\"properties\":{\"principalId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The authenticated principal that wrote the row — the trustworthy half of the attribution. Comments can only be posted against a batch the poster owns, so this is your own principal on every comment you can read.\"}},\"required\":[\"principalId\"]},\"body\":{\"type\":\"string\",\"minLength\":1},\"createdAt\":{\"type\":\"string\",\"minLength\":1,\"description\":\"ISO-8601 timestamp of the posting.\"},\"replies\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/SourceMaterialCommentReply\"},\"description\":\"The replies answering this comment, oldest first. ALWAYS an array: `[]` means nobody answered, never a missing field.\"},\"kind\":{\"type\":\"string\",\"const\":\"root\"}},\"required\":[\"commentId\",\"author\",\"recordedBy\",\"body\",\"createdAt\",\"replies\",\"kind\"]},{\"type\":\"object\",\"properties\":{\"commentId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The stored comment id (`smc_…`).\"},\"author\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":160,\"description\":\"Who the comment is reported to be from. Nothing authenticates this name — it is transcription, and it is read back labelled as such.\"},\"organisation\":{\"description\":\"Their practice or team. Nullable, NOT optional: `null` is the answer for a note carrying no organisation, and the key is always present.\",\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"maxLength\":160},{\"type\":\"null\"}]},\"attribution\":{\"type\":\"string\",\"const\":\"reported\",\"description\":\"How this name got here. `reported` means a caller typed it and nothing verified it — render it as 'recorded as from X', never as a statement X signed. The verified identity is `recordedBy`. New members may be added if a verified channel is ever built; treat an unfamiliar value as unverified.\"}},\"required\":[\"name\",\"organisation\",\"attribution\"]},\"recordedBy\":{\"type\":\"object\",\"properties\":{\"principalId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The authenticated principal that wrote the row — the trustworthy half of the attribution. Comments can only be posted against a batch the poster owns, so this is your own principal on every comment you can read.\"}},\"required\":[\"principalId\"]},\"body\":{\"type\":\"string\",\"minLength\":1},\"createdAt\":{\"type\":\"string\",\"minLength\":1,\"description\":\"ISO-8601 timestamp of the posting.\"},\"kind\":{\"type\":\"string\",\"const\":\"reply\"},\"parentCommentId\":{\"type\":\"string\",\"minLength\":1,\"description\":\"The root comment this one answers.\"}},\"required\":[\"commentId\",\"author\",\"recordedBy\",\"body\",\"createdAt\",\"kind\",\"parentCommentId\"]}]},\"SuggestColourResponse\":{\"type\":\"object\",\"properties\":{\"suggestions\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hex\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\"},\"libraryId\":{\"type\":\"string\"},\"term\":{\"type\":\"string\"}},\"required\":[\"hex\",\"kind\",\"term\"]},\"description\":\"Ranked colour-name suggestions, best match first.\"}},\"required\":[\"suggestions\"]},\"SuggestResponse\":{\"type\":\"object\",\"properties\":{\"query\":{\"type\":\"string\"},\"suggestions\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"brandName\":{\"type\":[\"string\",\"null\"]},\"brandSlug\":{\"type\":[\"string\",\"null\"]},\"categoryKey\":{\"type\":[\"string\",\"null\"]},\"kind\":{\"type\":\"string\",\"enum\":[\"product\",\"brand\",\"category\"]},\"label\":{\"type\":\"string\"},\"match\":{\"type\":\"string\",\"enum\":[\"prefix\",\"word\",\"fuzzy\"]},\"refId\":{\"type\":\"string\"},\"variantCount\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"variantId\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"brandName\",\"brandSlug\",\"categoryKey\",\"kind\",\"label\",\"match\",\"refId\",\"variantCount\",\"variantId\"]}}},\"required\":[\"query\",\"suggestions\"]},\"VariantAssetPage\":{\"type\":\"object\",\"properties\":{\"documentCoverage\":{\"description\":\"Maker 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\",\"minLen",
153
+ "gth\":1},\"availability\":{\"type\":\"string\",\"enum\":[\"available\",\"unknown\",\"unavailable\"],\"description\":\"available: MaterialGraph serves url. unknown: maker'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.\",\"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\"]},\"__schema2\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"number\"},{\"type\":\"boolean\"},{\"type\":\"null\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/__schema2\"}},{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema2\"}}]},\"__schema3\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"number\"},{\"type\":\"boolean\"},{\"type\":\"null\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/$defs/__schema3\"}},{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"$ref\":\"#/$defs/__schema3\"}}]}},\"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\"},\"retrieval.identify\":{\"$ref\":\"#/$defs/LookupVariantResponse\"},\"match_material\":{\"anyOf\":[{\"$ref\":\"#/$defs/MatchMaterialResponse\"},{\"$ref\":\"#/$defs/MatchWorkflowResponse\"}]},\"search_suggest\":{\"$ref\":\"#/$defs/SuggestResponse\"},\"get_colour_stats\":{\"$ref\":\"#/$defs/ColourStatsResponse\"},\"coordinate_materials\":{\"$ref\":\"#/$defs/CoordinateMaterialsResponse\"},\"plan_material_query\":{\"$ref\":\"#/$defs/MaterialQueryPlanResponse\"},\"samplize_catalogue_products\":{\"$ref\":\"#/$defs/SamplizeCataloguePage\"},\"search_materials_get\":{\"$ref\":\"#/$d",
154
+ "efs/SearchResponse\"},\"search_by_colour\":{\"$ref\":\"#/$defs/ByColourResponse\"},\"get_material\":{\"type\":\"object\",\"properties\":{\"material\":{\"$ref\":\"#/$defs/MaterialDetail\"}},\"required\":[\"material\"]},\"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\"},\"get_composition_report\":{\"$ref\":\"#/$defs/CompositionCorpusSummary\"},\"list_schema_blocks\":{\"$ref\":\"#/$defs/SchemaBlocksResponse\"},\"list_schema_attributes\":{\"$ref\":\"#/$defs/SchemaAttributesResponse\"},\"list_schema_verticals\":{\"$ref\":\"#/$defs/SchemaVerticalsResponse\"},\"list_schema_product_types\":{\"$ref\":\"#/$defs/SchemaProductTypesResponse\"},\"list_schema_units\":{\"$ref\":\"#/$defs/SchemaUnitsResponse\"},\"list_schema_value_dictionaries\":{\"$ref\":\"#/$defs/SchemaValueDictionariesResponse\"},\"list_schema_source_requirements\":{\"$ref\":\"#/$defs/SchemaSourceRequirementsResponse\"},\"list_schema_product_type_templates\":{\"$ref\":\"#/$defs/SchemaProductTypeTemplatesResponse\"},\"list_schema_mappings\":{\"$ref\":\"#/$defs/SchemaMappingsResponse\"},\"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\"},\"get_category_colour_profiles\":{\"$ref\":\"#/$defs/CategoryColourProfilesResponse\"},\"resolve_colour_name\":{\"$ref\":\"#/$defs/ResolveColourResponse\"},\"suggest_colour_names\":{\"$ref\":\"#/$defs/SuggestColourResponse\"},\"catalog_list_attributes\":{\"$ref\":\"#/$defs/ListAttributesResponse\"},\"list_categories\":{\"$ref\":\"#/$defs/ListCategoriesResponse\"},\"get_category\":{\"$ref\":\"#/$defs/GetCategoryResponse\"},\"get_product_type_status_coverage\":{\"type\":\"object\",\"properties\":{\"basis\":{\"type\":\"object\",\"properties\":{\"assignment\":{\"type\":\"string\",\"const\":\"variant_primary_only\"},\"comparisonThreshold\":{\"type\":\"number\",\"minimum\":0,\"maximum\":1,\"description\":\"A reporting cutoff, not an inferred acceptance rule. Proposed assignments at or above this cutoff remain proposed.\"},\"count\":{\"type\":\"string\",\"const\":\"exact\"},\"sourcePath\":{\"type\":\"string\",\"const\":\"products.source_category_path\"},\"universe\":{\"type\":\"string\",\"const\":\"non_superseded_variants\"}},\"required\":[\"assignment\",\"comparisonThreshold\",\"count\",\"sourcePath\",\"universe\"]},\"computedAt\":{\"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))$\"},\"sourcePaths\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"accepted\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"missingPrimary\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":90071992547",
155
+ "40991},\"otherStatus\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposed\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposedBelowThreshold\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposedUnknownConfidence\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"variants\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"sourcePath\":{\"description\":\"The complete stored source category path, verbatim; compound leaves are not split or guessed. Null means no path is recorded.\",\"type\":[\"string\",\"null\"]}},\"required\":[\"accepted\",\"missingPrimary\",\"otherStatus\",\"proposed\",\"proposedBelowThreshold\",\"proposedUnknownConfidence\",\"variants\",\"sourcePath\"]}},\"totals\":{\"type\":\"object\",\"properties\":{\"accepted\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"missingPrimary\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"otherStatus\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposed\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposedBelowThreshold\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"proposedUnknownConfidence\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991},\"variants\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":9007199254740991}},\"required\":[\"accepted\",\"missingPrimary\",\"otherStatus\",\"proposed\",\"proposedBelowThreshold\",\"proposedUnknownConfidence\",\"variants\"]}},\"required\":[\"basis\",\"computedAt\",\"sourcePaths\",\"totals\"]},\"whoami\":{\"$ref\":\"#/$defs/WhoamiResponse\"},\"get_material_demand\":{\"type\":\"object\",\"properties\":{\"query\":{\"type\":\"string\",\"description\":\"Echo of the resolved reference (`variantId` or `material`).\"},\"demand\":{\"$ref\":\"#/$defs/MaterialDemandResult\"},\"cospec\":{\"$ref\":\"#/$defs/CoSpecifiedResult\"}},\"required\":[\"query\",\"demand\",\"cospec\"]},\"search_by_palette\":{\"$ref\":\"#/$defs/SearchByPaletteResponse\"},\"extract_image_palette\":{\"$ref\":\"#/$defs/ExtractPaletteResponse\"},\"search_by_gradient\":{\"$ref\":\"#/$defs/SearchByGradientResponse\"},\"list_spec_facets\":{\"$ref\":\"#/$defs/SpecFacetsListResponse\"},\"list_brands\":{\"$ref\":\"#/$defs/BrandCatalogListPage\"},\"upload_source_material\":{\"$ref\":\"#/$defs/SourceMaterialBatchReceipt\"},\"get_source_material_batch\":{\"$ref\":\"#/$defs/SourceMaterialBatchDetail\"},\"list_source_material_comments\":{\"$ref\":\"#/$defs/SourceMaterialCommentThread\"},\"post_source_material_comment\":{\"$ref\":\"#/$defs/PostSourceMaterialCommentResponse\"},\"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\"]},\"get_demand_batch\":{\"$ref\":\"#/$defs/EnrichCandidateDemandResponse\"},\"resolveCodeAdvisory\":{\"$ref\":\"#/$defs/CodeAdvisoryResponse\"},\"list_code_context\":{\"$ref\":\"#/$defs/CodeContextResponse\"},\"list_code_requirements\":{\"$ref\":\"#/$defs/CodeRequirementsResponse\"}}}",
156
156
  ].join("");