{"openapi":"3.1.0","info":{"title":"Unitas API","version":"1.0.0","description":"CSS unit conversion, validation, linting, and scale generation API"},"servers":[{"url":"/","description":"Current server"}],"components":{"schemas":{},"parameters":{}},"paths":{"/api/convert":{"post":{"tags":["Conversion"],"summary":"Convert a CSS value from one unit to another","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"string"}]},"fromUnit":{"type":"string","enum":["px","rem","em","vw","vh","vmin","vmax","ch","ex","lh","rlh","cm","mm","in","pt","pc","svh","lvh","dvh","svw","lvw","dvw","cqw","cqh"]},"toUnit":{"type":"string","enum":["px","rem","em","vw","vh","vmin","vmax","ch","ex","lh","rlh","cm","mm","in","pt","pc","svh","lvh","dvh","svw","lvw","dvw","cqw","cqh"]},"context":{"type":"object","properties":{"baseFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"parentFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"lineHeight":{"type":"number","minimum":0,"exclusiveMinimum":true},"viewportWidth":{"type":"number","minimum":0,"exclusiveMinimum":true},"viewportHeight":{"type":"number","minimum":0,"exclusiveMinimum":true},"dpi":{"type":"number","minimum":0,"exclusiveMinimum":true},"containerWidth":{"type":"number","minimum":0,"exclusiveMinimum":true},"containerHeight":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"options":{"type":"object","properties":{"precision":{"type":"integer","minimum":0,"maximum":15},"rounding":{"type":"string","enum":["nearest","floor","ceil"]},"step":{"type":"number","minimum":0,"exclusiveMinimum":true}}}},"required":["value","fromUnit","toUnit"]}}}},"responses":{"200":{"description":"Conversion result","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"}},"required":["result"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"nullable":true}},"required":["error"]}}}}}}},"/api/batch":{"post":{"tags":["Conversion"],"summary":"Convert multiple CSS values from one unit to another","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"values":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"}]},"minItems":1,"maxItems":1000},"fromUnit":{"type":"string","enum":["px","rem","em","vw","vh","vmin","vmax","ch","ex","lh","rlh","cm","mm","in","pt","pc","svh","lvh","dvh","svw","lvw","dvw","cqw","cqh"]},"toUnit":{"type":"string","enum":["px","rem","em","vw","vh","vmin","vmax","ch","ex","lh","rlh","cm","mm","in","pt","pc","svh","lvh","dvh","svw","lvw","dvw","cqw","cqh"]},"context":{"type":"object","properties":{"baseFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"parentFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"lineHeight":{"type":"number","minimum":0,"exclusiveMinimum":true},"viewportWidth":{"type":"number","minimum":0,"exclusiveMinimum":true},"viewportHeight":{"type":"number","minimum":0,"exclusiveMinimum":true},"dpi":{"type":"number","minimum":0,"exclusiveMinimum":true},"containerWidth":{"type":"number","minimum":0,"exclusiveMinimum":true},"containerHeight":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"options":{"type":"object","properties":{"precision":{"type":"integer","minimum":0,"maximum":15},"rounding":{"type":"string","enum":["nearest","floor","ceil"]},"step":{"type":"number","minimum":0,"exclusiveMinimum":true}}}},"required":["values","fromUnit","toUnit"]}}}},"responses":{"200":{"description":"Batch conversion results","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"string"}}},"required":["results"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"nullable":true}},"required":["error"]}}}}}}},"/api/fluid-clamp":{"post":{"tags":["Conversion"],"summary":"Generate a CSS clamp() function for fluid typography/spacing","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"minValue":{"type":"number"},"maxValue":{"type":"number"},"minViewport":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxViewport":{"type":"number","minimum":0,"exclusiveMinimum":true},"unit":{"type":"string","enum":["px","rem"]},"baseFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true}},"required":["minValue","maxValue","minViewport","maxViewport"]}}}},"responses":{"200":{"description":"Fluid clamp result","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"}},"required":["result"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"nullable":true}},"required":["error"]}}}}}}},"/api/css/parse":{"post":{"tags":["CSS Processing"],"summary":"Parse a CSS string and extract declarations","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"css":{"type":"string","minLength":1}},"required":["css"]}}}},"responses":{"200":{"description":"Parsed CSS declarations","content":{"application/json":{"schema":{"type":"object","properties":{"declarations":{"nullable":true}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"nullable":true}},"required":["error"]}}}}}}},"/api/css/convert":{"post":{"tags":["CSS Processing"],"summary":"Convert unit values within a CSS snippet","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"css":{"type":"string","minLength":1},"rule":{"type":"object","properties":{"fromUnit":{"type":"string"},"toUnit":{"type":"string"},"properties":{"type":"array","items":{"type":"string"}}},"required":["fromUnit","toUnit"]},"context":{"type":"object","properties":{"baseFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"parentFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"lineHeight":{"type":"number","minimum":0,"exclusiveMinimum":true},"viewportWidth":{"type":"number","minimum":0,"exclusiveMinimum":true},"viewportHeight":{"type":"number","minimum":0,"exclusiveMinimum":true},"dpi":{"type":"number","minimum":0,"exclusiveMinimum":true},"containerWidth":{"type":"number","minimum":0,"exclusiveMinimum":true},"containerHeight":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"options":{"type":"object","properties":{"precision":{"type":"integer","minimum":0,"maximum":15},"rounding":{"type":"string","enum":["nearest","floor","ceil"]},"step":{"type":"number","minimum":0,"exclusiveMinimum":true}}}},"required":["css","rule"]}}}},"responses":{"200":{"description":"Converted CSS result","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"}},"required":["result"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"nullable":true}},"required":["error"]}}}}}}},"/api/css/diff":{"post":{"tags":["CSS Processing"],"summary":"Compare two CSS strings and get a structured diff","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"before":{"type":"string"},"after":{"type":"string"},"options":{"type":"object","properties":{"ignoreWhitespace":{"type":"boolean"}}}},"required":["before","after"]}}}},"responses":{"200":{"description":"CSS diff result","content":{"application/json":{"schema":{"nullable":true}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"nullable":true}},"required":["error"]}}}}}}},"/api/scales":{"post":{"tags":["Scale Generation"],"summary":"Generate a modular scale with configurable ratio and steps","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"config":{"type":"object","properties":{"type":{"type":"string","enum":["minor-second","major-second","minor-third","major-third","perfect-fourth","augmented-fourth","perfect-fifth","golden-ratio","custom"]},"ratio":{"type":"number","minimum":0,"exclusiveMinimum":true},"baseValue":{"type":"number","minimum":0,"exclusiveMinimum":true},"minStep":{"type":"integer"},"maxStep":{"type":"integer"},"unit":{"type":"string","enum":["rem","em"]},"roundingProfile":{"type":"string","enum":["qa","production"]},"customStep":{"type":"number","minimum":0,"exclusiveMinimum":true}},"required":["type","ratio","baseValue","minStep","maxStep","unit","roundingProfile"]},"format":{"type":"string","enum":["tokens","css","scss","json"]},"prefix":{"type":"string"}},"required":["config"]}}}},"responses":{"200":{"description":"Generated scale","content":{"application/json":{"schema":{"nullable":true}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"nullable":true}},"required":["error"]}}}}}}},"/api/scales/spacing":{"post":{"tags":["Scale Generation"],"summary":"Generate a spacing scale from a preset (4px-grid, 8px-grid, fibonacci)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"preset":{"type":"string","enum":["4px-grid","8px-grid","fibonacci"]},"baseFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"unit":{"type":"string","enum":["rem","em","px"]},"format":{"type":"string","enum":["tokens","css","scss","json"]},"prefix":{"type":"string"}},"required":["preset"]}}}},"responses":{"200":{"description":"Generated spacing scale","content":{"application/json":{"schema":{"nullable":true}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"nullable":true}},"required":["error"]}}}}}}},"/api/validate":{"post":{"tags":["Validation & Linting"],"summary":"Run sanity checks on a CSS value + unit combination","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"number"},"unit":{"type":"string","enum":["px","rem","em","vw","vh","vmin","vmax","ch","ex","lh","rlh","cm","mm","in","pt","pc","svh","lvh","dvh","svw","lvw","dvw","cqw","cqh"]},"context":{"type":"object","properties":{"baseFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"parentFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"lineHeight":{"type":"number","minimum":0,"exclusiveMinimum":true},"viewportWidth":{"type":"number","minimum":0,"exclusiveMinimum":true},"viewportHeight":{"type":"number","minimum":0,"exclusiveMinimum":true},"dpi":{"type":"number","minimum":0,"exclusiveMinimum":true},"containerWidth":{"type":"number","minimum":0,"exclusiveMinimum":true},"containerHeight":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"options":{"type":"object","properties":{"checkTapTargets":{"type":"boolean"},"aaMode":{"type":"boolean"},"checkOversized":{"type":"boolean"},"checkTiny":{"type":"boolean"},"propertyHint":{"type":"string","enum":["font","spacing","general"]}}}},"required":["value","unit"]}}}},"responses":{"200":{"description":"Validation checks","content":{"application/json":{"schema":{"type":"object","properties":{"checks":{"nullable":true}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"nullable":true}},"required":["error"]}}}}}}},"/api/validate/lint":{"post":{"tags":["Validation & Linting"],"summary":"Lint a CSS snippet against a conversion rule profile","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"css":{"type":"string","minLength":1},"profile":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"property":{"type":"string"},"fromUnit":{"type":"string","enum":["px","rem","em","vw","vh","vmin","vmax","ch","ex","lh","rlh","cm","mm","in","pt","pc","svh","lvh","dvh","svw","lvw","dvw","cqw","cqh"]},"toUnit":{"type":"string","enum":["px","rem","em","vw","vh","vmin","vmax","ch","ex","lh","rlh","cm","mm","in","pt","pc","svh","lvh","dvh","svw","lvw","dvw","cqw","cqh"]},"enabled":{"type":"boolean"},"description":{"type":"string"}},"required":["id","property","fromUnit","toUnit","enabled"]}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"isDefault":{"type":"boolean"}},"required":["id","name","rules","createdAt","updatedAt"]},"context":{"type":"object","properties":{"baseFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"parentFontSize":{"type":"number","minimum":0,"exclusiveMinimum":true},"lineHeight":{"type":"number","minimum":0,"exclusiveMinimum":true},"viewportWidth":{"type":"number","minimum":0,"exclusiveMinimum":true},"viewportHeight":{"type":"number","minimum":0,"exclusiveMinimum":true},"dpi":{"type":"number","minimum":0,"exclusiveMinimum":true},"containerWidth":{"type":"number","minimum":0,"exclusiveMinimum":true},"containerHeight":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"options":{"type":"object","properties":{"precision":{"type":"integer","minimum":0,"maximum":15},"rounding":{"type":"string","enum":["nearest","floor","ceil"]},"step":{"type":"number","minimum":0,"exclusiveMinimum":true}}}},"required":["css","profile"]}}}},"responses":{"200":{"description":"Lint result","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"nullable":true}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"nullable":true}},"required":["error"]}}}}}}}}}