{"name":"curview","version":"0.3.0-alpha","description":"Measured chemical content (phthalates, their substitutes, and bisphenols) of physical consumer products, from published lab data.","skill":"https://curview.com/skill.md","fields":"Every data endpoint accepts ?fields=a,b to trim the response to your context budget: top-level keys, plus one dot level (e.g. ?fields=product.name,analytes). List responses are masked per item. Unknown field names are ignored; a mask that matches nothing returns the full object (it never empties the response).","errors":{"shape":"{ error: { code, message, ... } }","location":"response body, with a non-2xx status","codes":{"usage":400,"not_found":404,"ambiguous":409}},"endpoints":[{"method":"GET","path":"/search","params":{"q":"required — search string","limit":"optional int (default 20)","offset":"optional int (default 0)","fields":"optional field mask"},"returns":"array of { id, name, tags, sampleCount, score }, best match first","description":"Search products by name (fuzzy match)."},{"method":"GET","path":"/product/{id|name}","params":{"fields":"optional field mask"},"returns":"{ product { id, name, photo, photoFromWeb, sampleIds, servingSizeG, servingSizeUnit, tags }, samples { collectedOn, methods, total }, analytes[] { code, type, isSubgroup, detectedIn, ofSamples, ngPerServing { median, min, max } | null, loqNgPerServing } }","errors":["not_found","ambiguous"],"description":"Per-analyte breakdown for one product."},{"method":"GET","path":"/rank/{analyte-code|name}","params":{"order":"optional — 'desc' (default, most first) or 'asc' (least first)","limit":"optional int (default 10)","fields":"optional field mask"},"returns":"{ chemical, order ('asc' | 'desc'), products[] { product { …as in /product }, medianNgPerServing, detectedIn, ofSamples } }. Always ranked by median.","errors":["not_found"],"description":"Products ranked by median ng/serving of one analyte."},{"method":"GET","path":"/analyte/{code|name}","params":{"fields":"optional field mask"},"returns":"{ code, name (canonical), type, casNo, casUrl, components (subgroup weights | null), source (provenance | null) }","errors":["not_found"],"description":"Reference for one analyte: canonical name, CAS, subgroup weighting."},{"method":"GET","path":"/analytes","params":{"fields":"optional field mask"},"returns":"array of { code, name, type, casNo, casUrl, components, source }","description":"List every analyte."}]}