{"openapi":"3.1.0","info":{"title":"LittleMissSomething public catalog API","version":"1.0.0","description":"Read-only JSON API for the LittleMissSomething handmade hair accessories catalog. No authentication. Fair use for catalog reads. Unknown /api/* paths return a structured JSON 404 with an error code and message. Versioning: the current major version is v1 in the URL path (/api/v1/*); the unversioned catalog paths (/api/products*) are stable, and any breaking change will ship under a new version path with the old one kept working during a documented transition. Deprecations, if ever needed, will be announced in this description and on /for-agents before the old behavior is removed.","contact":{"name":"LittleMissSomething","url":"https://lms-2-gamma-pied.vercel.app/contact"}},"servers":[{"url":"https://lms-2-gamma-pied.vercel.app","description":"Production"}],"tags":[{"name":"Catalog","description":"Public product catalog reads."}],"x-api-lifecycle":{"current_major_version":"v1","versioning":"URL path versioning (/api/v1/*); unversioned catalog paths are stable","deprecation_policy":"Breaking changes ship under a new version path; removals are announced in this description and on /for-agents before taking effect"},"paths":{"/api/products":{"get":{"operationId":"listProducts","summary":"List products","description":"Returns the product catalog. Optional filters: featured=1, categoryId, q (name/description search).","parameters":[{"in":"query","name":"featured","required":false,"schema":{"type":"string","enum":["1"]},"description":"When \"1\", only featured products are returned."},{"in":"query","name":"categoryId","required":false,"schema":{"type":"string"},"description":"Filter by category id."},{"in":"query","name":"q","required":false,"schema":{"type":"string"},"description":"Case-insensitive search over name and description."}],"responses":{"200":{"description":"Product list","content":{"application/json":{"schema":{"type":"object","required":["products"],"properties":{"products":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/products/{slug}":{"get":{"operationId":"getProductBySlug","summary":"Get one product by slug","parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"},"description":"Product URL slug, as listed in the sitemap."}],"responses":{"200":{"description":"The product","content":{"application/json":{"schema":{"type":"object","required":["product"],"properties":{"product":{"$ref":"#/components/schemas/Product"}}}}}},"404":{"description":"No product with that slug","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/status":{"get":{"operationId":"getStatus","summary":"Public API health check","description":"Tiny unauthenticated endpoint agents can use to confirm the API is up.","responses":{"200":{"description":"API status","content":{"application/json":{"schema":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["ok"]},"service":{"type":"string"},"time":{"type":"string","format":"date-time"},"docs":{"type":"string","format":"uri"}}}}}}}}}},"components":{"schemas":{"Product":{"type":"object","required":["id","name","slug","price","stock","featured","created_at"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":["string","null"]},"price":{"type":"number","description":"Price in Indian Rupees (INR)."},"image_url":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"category_id":{"type":["string","null"]},"stock":{"type":"integer"},"featured":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"}}},"ApiError":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"Human-readable error message."},"code":{"type":"string","enum":["NOT_FOUND","INTERNAL_ERROR","UNAUTHORIZED"],"description":"Stable machine-readable error code."},"docs":{"type":"string","format":"uri","description":"Where to read more."}}}}}}