{"openapi":"3.0.3","info":{"title":"idlidu Lab Price API","version":"0.1.0","description":"Catalogue list-price series by CAS × grade × supplier. Not an offer to sell chemicals. Fixture/waitlist soft launch — production fetch off until SOURCES clear_to_fetch. Keys: idl_lab_… · dataset=labprice. Not counsel-reviewed."},"servers":[{"url":"https://labprice-api.idlidu.com"}],"tags":[{"name":"public"},{"name":"panel"},{"name":"billing"}],"paths":{"/v1/health":{"get":{"tags":["public"],"summary":"Health + panel/billing mode","responses":{"200":{"description":"ok"}}}},"/v1/openapi.json":{"get":{"tags":["public"],"summary":"This OpenAPI document","responses":{"200":{"description":"OpenAPI 3.0.3 JSON"}}}},"/v1/public/tools":{"get":{"tags":["public"],"summary":"MCP tool definitions (no key)","responses":{"200":{"description":"ok"}}}},"/v1/public/sample/series":{"get":{"tags":["public"],"summary":"Free sample series (CAS 67-64-1, limited points)","responses":{"200":{"description":"ok"}}}},"/v1/public/sample/index":{"get":{"tags":["public"],"summary":"Unauthenticated last basket index point (sample)","responses":{"200":{"description":"ok"}}}},"/v1/suppliers":{"get":{"tags":["panel"],"summary":"List suppliers","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"api_key_required"},"429":{"description":"quota_exceeded"}}}},"/v1/cas":{"get":{"tags":["panel"],"summary":"List CAS in plan entitlement set","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"api_key_required"},"429":{"description":"quota_exceeded"}}}},"/v1/series":{"get":{"tags":["panel"],"summary":"Series by CAS","security":[{"bearerAuth":[]}],"parameters":[{"name":"cas","in":"query","required":true,"schema":{"type":"string"}},{"name":"supplier","in":"query","schema":{"type":"string"}},{"name":"from","in":"query","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"ok"},"400":{"description":"cas_required"},"401":{"description":"api_key_required"},"403":{"description":"upgrade_required (CAS or history)"},"429":{"description":"quota_exceeded"}}}},"/v1/indices/basket":{"get":{"tags":["panel"],"summary":"Seed CAS basket median price-move index","security":[{"bearerAuth":[]}],"parameters":[{"name":"from","in":"query","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"ok"},"401":{"description":"api_key_required"},"429":{"description":"quota_exceeded"}}}},"/v1/indices":{"get":{"tags":["panel"],"summary":"List index definitions (alias + canonical)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"api_key_required"}}}},"/v1/indices/{id}":{"get":{"tags":["panel"],"summary":"Index series by canonical id, alias, or basket","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ok"},"401":{"description":"api_key_required"},"404":{"description":"not_found"}}}},"/v1/usage":{"get":{"tags":["billing"],"summary":"Plan usage snapshot","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"api_key_required"}}}},"/v1/billing/portal":{"get":{"tags":["billing"],"summary":"Portal placeholder URL + plan","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"api_key_required"}}}},"/v1/billing/webhook":{"post":{"tags":["billing"],"summary":"Checkout webhook (vendor-agnostic). HMAC when BILLING_WEBHOOK_SECRET set.","parameters":[{"name":"x-webhook-signature","in":"header","schema":{"type":"string"},"description":"sha256=<hex> when secret configured"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["event","customer_email","plan","checkout_customer_id","external_event_id"],"properties":{"event":{"type":"string","enum":["checkout.completed","subscription.updated","subscription.canceled"]},"customer_email":{"type":"string"},"plan":{"type":"string","enum":["starter","growth","archive"]},"checkout_customer_id":{"type":"string"},"external_event_id":{"type":"string"}}}}}},"responses":{"200":{"description":"ok / key minted"},"400":{"description":"invalid_json | invalid_payload"},"401":{"description":"invalid_signature"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"idl_lab_… API key"}}}}