{"openapi":"3.1.0","info":{"title":"Nibble public library API","version":"1.0.0","description":"Read-only discovery and source retrieval for published React components and fonts. No authentication required. MCP and Studio use separate authenticated protocols.","contact":{"name":"Nibble","email":"galavic@nibble.lat","url":"https://nibble.lat/agents"}},"servers":[{"url":"https://nibble.lat"}],"externalDocs":{"url":"https://nibble.lat/agents","description":"MCP, Studio CLI and component integration guide"},"paths":{"/api/fonts":{"get":{"operationId":"listFonts","summary":"List available fonts","security":[],"parameters":[{"name":"q","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Font catalog; empty until fonts are added","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Font"}}}}}}}},"/api/fonts/{id}":{"get":{"operationId":"getFont","summary":"Get font files, CSS, usage, license and preview URL","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Font integration details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Font"}}}},"404":{"description":"Unknown font"}}}},"/api/catalog":{"get":{"operationId":"listPublishedComponents","summary":"List bundled and currently published components","security":[],"responses":{"200":{"description":"Published catalog","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Component"}}}}},"503":{"description":"Catalog temporarily unavailable"}}}},"/api/components/{id}":{"get":{"operationId":"getComponentSource","summary":"Get current source code, usage and dependencies","security":[],"parameters":[{"name":"id","in":"path","required":true,"description":"An exact component ID from the current catalog","schema":{"type":"string","minLength":1,"maxLength":80}}],"responses":{"200":{"description":"Component source and integration example","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Component"},{"type":"object","required":["files","singleFile","usage"],"properties":{"install":{"type":"string"},"usage":{"type":"string"},"singleFile":{"$ref":"#/components/schemas/SourceFile"},"files":{"type":"array","items":{"$ref":"#/components/schemas/SourceFile"}}}}]}}}},"404":{"description":"Unknown or unpublished component"}}}}},"components":{"schemas":{"Font":{"type":"object","required":["id","name","family","designer","description","category","weights","styles","files","license","sourceUrl"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"family":{"type":"string"},"designer":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"sourceUrl":{"type":"string"},"weights":{"type":"array","items":{"type":"number"}},"styles":{"type":"array","items":{"type":"string"}},"files":{"type":"array","items":{"type":"object","required":["url","format","weight","style"],"properties":{"url":{"type":"string"},"format":{"type":"string"},"weight":{"type":"string"},"style":{"type":"string"}}}},"license":{"type":"object","required":["name","url","text"],"properties":{"name":{"type":"string"},"url":{"type":"string"},"text":{"type":"string"}}},"css":{"type":"string"},"usage":{"type":"string"},"previewUrl":{"type":"string"}}},"Component":{"type":"object","required":["id","name","description","category","dependencies"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"categories":{"type":"array","items":{"type":"string"},"description":"Concrete types and visual treatments; a component may belong to several."},"dependencies":{"type":"array","items":{"type":"string"}},"patterns":{"type":"array","items":{"type":"string"}},"flows":{"type":"array","items":{"type":"string"}},"creator":{"type":"object","properties":{"name":{"type":"string"}}}}},"SourceFile":{"type":"object","required":["name","content"],"properties":{"name":{"type":"string"},"content":{"type":"string"}}}}}}