{"openapi":"3.1.0","info":{"title":"ChemSwatch API","version":"0.1.0","description":"REST API for the ChemSwatch hazardous chemical platform: SDS library and ingestion, inventory, registers, storage compatibility, risk assessments, labels and webhooks. Errors use RFC 9457 problem+json. AI agents can use the MCP endpoint at /mcp with the same API keys.","contact":{"name":"ChemSwatch","url":"http://localhost:3000"}},"servers":[{"url":"http://localhost:4000","description":"ChemSwatch API"}],"tags":[{"name":"Auth"},{"name":"Organisation"},{"name":"API keys"},{"name":"Products","description":"Chemical products in the shared library and your organisation"},{"name":"SDS","description":"Safety Data Sheets: upload, extraction, review, publishing and versions"},{"name":"Sites & locations"},{"name":"Inventory"},{"name":"Registers & compliance"},{"name":"Risk assessments"},{"name":"Webhooks"},{"name":"Reference","description":"GHS and dangerous goods reference data (no authentication)"},{"name":"Public","description":"Token-gated endpoints used by QR codes and share links"},{"name":"Operations"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key created in Settings → API keys, e.g. `cs_live_…`"},"cookieAuth":{"type":"apiKey","in":"cookie","name":"cs_session"}},"schemas":{"Me":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"}},"required":["id","email","name"]},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"jurisdiction":{"type":"string"},"plan":{"type":"string"},"settings":{"type":"object","properties":{"publicSdsLinks":{"type":"boolean"},"reviewReminderDays":{"type":"integer"},"thresholdOverrides":{"type":"object","additionalProperties":{"type":"object","properties":{"placard":{"type":"number"},"manifest":{"type":"number"}}}}}},"createdAt":{"type":"string"}},"required":["id","name","slug","jurisdiction","plan","settings","createdAt"]},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"scopes":{"type":"array","items":{"type":"string","enum":["sds:read","sds:write","inventory:read","inventory:write","risk:read","risk:write","org:read","webhooks:manage"]}},"organizations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]}},"required":["id","name","role"]}}},"required":["user","organization","role","scopes","organizations"]},"Problem":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"code":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["type","title","status"]},"SignupInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":10,"maxLength":200},"organizationName":{"type":"string","minLength":2,"maxLength":120}},"required":["name","email","password","organizationName"]},"LoginInput":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":1}},"required":["email","password"]},"Organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"jurisdiction":{"type":"string"},"plan":{"type":"string"},"settings":{"type":"object","properties":{"publicSdsLinks":{"type":"boolean"},"reviewReminderDays":{"type":"integer"},"thresholdOverrides":{"type":"object","additionalProperties":{"type":"object","properties":{"placard":{"type":"number"},"manifest":{"type":"number"}}}}}},"createdAt":{"type":"string"}},"required":["id","name","slug","jurisdiction","plan","settings","createdAt"]},"UpdateOrganizationInput":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":120},"jurisdiction":{"type":"string","maxLength":20},"settings":{"type":"object","properties":{"publicSdsLinks":{"type":"boolean"},"reviewReminderDays":{"type":"integer"},"thresholdOverrides":{"type":"object","additionalProperties":{"type":"object","properties":{"placard":{"type":"number"},"manifest":{"type":"number"}}}}}}}},"Member":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"createdAt":{"type":"string"}},"required":["userId","email","name","role","createdAt"]},"AddMemberResult":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","admin","editor","viewer"]},"createdAt":{"type":"string"},"temporaryPassword":{"type":["string","null"]}},"required":["userId","email","name","role","createdAt","temporaryPassword"]},"AddMemberInput":{"type":"object","properties":{"email":{"type":"string","format":"email"},"name":{"type":"string","minLength":1,"maxLength":120},"role":{"type":"string","enum":["admin","editor","viewer"]},"password":{"type":"string","minLength":10,"maxLength":200}},"required":["email","name","role"]},"ApiKey":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["sds:read","sds:write","inventory:read","inventory:write","risk:read","risk:write","org:read","webhooks:manage"]}},"lastUsedAt":{"type":["string","null"]},"expiresAt":{"type":["string","null"]},"revokedAt":{"type":["string","null"]},"createdAt":{"type":"string"}},"required":["id","name","prefix","scopes","lastUsedAt","expiresAt","revokedAt","createdAt"]},"CreatedApiKey":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["sds:read","sds:write","inventory:read","inventory:write","risk:read","risk:write","org:read","webhooks:manage"]}},"lastUsedAt":{"type":["string","null"]},"expiresAt":{"type":["string","null"]},"revokedAt":{"type":["string","null"]},"createdAt":{"type":"string"},"key":{"type":"string"}},"required":["id","name","prefix","scopes","lastUsedAt","expiresAt","revokedAt","createdAt","key"]},"CreateApiKeyInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"scopes":{"type":"array","items":{"type":"string","enum":["sds:read","sds:write","inventory:read","inventory:write","risk:read","risk:write","org:read","webhooks:manage"]},"minItems":1},"expiresInDays":{"type":"integer","minimum":1,"maximum":3650}},"required":["name","scopes"]},"Webhook":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"description":{"type":["string","null"]},"events":{"type":"array","items":{"type":"string","enum":["product.created","product.updated","product.deleted","sds.processed","sds.published","sds.review_due","inventory.created","inventory.updated","inventory.deleted","risk_assessment.created","risk_assessment.updated"]}},"active":{"type":"boolean"},"createdAt":{"type":"string"}},"required":["id","url","description","events","active","createdAt"]},"CreatedWebhook":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"description":{"type":["string","null"]},"events":{"type":"array","items":{"type":"string","enum":["product.created","product.updated","product.deleted","sds.processed","sds.published","sds.review_due","inventory.created","inventory.updated","inventory.deleted","risk_assessment.created","risk_assessment.updated"]}},"active":{"type":"boolean"},"createdAt":{"type":"string"},"secret":{"type":"string"}},"required":["id","url","description","events","active","createdAt","secret"]},"WebhookInput":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"description":{"type":["string","null"],"maxLength":300},"events":{"type":"array","items":{"type":"string","enum":["product.created","product.updated","product.deleted","sds.processed","sds.published","sds.review_due","inventory.created","inventory.updated","inventory.deleted","risk_assessment.created","risk_assessment.updated"]},"minItems":1},"active":{"type":"boolean"}},"required":["url","events"]},"WebhookUpdate":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"description":{"type":["string","null"],"maxLength":300},"events":{"type":"array","items":{"type":"string","enum":["product.created","product.updated","product.deleted","sds.processed","sds.published","sds.review_due","inventory.created","inventory.updated","inventory.deleted","risk_assessment.created","risk_assessment.updated"]},"minItems":1},"active":{"type":"boolean"}}},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string"},"event":{"type":"string"},"status":{"type":"string","enum":["pending","success","failed"]},"attempts":{"type":"number"},"responseStatus":{"type":["number","null"]},"createdAt":{"type":"string"},"deliveredAt":{"type":["string","null"]}},"required":["id","event","status","attempts","responseStatus","createdAt","deliveredAt"]},"AuditEvent":{"type":"object","properties":{"id":{"type":"string"},"actorType":{"type":"string","enum":["user","api_key","system"]},"actorName":{"type":["string","null"]},"action":{"type":"string"},"entityType":{"type":"string"},"entityId":{"type":["string","null"]},"summary":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","actorType","actorName","action","entityType","entityId","summary","createdAt"]},"ProductSummary":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"synonyms":{"type":"array","items":{"type":"string"}},"productCode":{"type":["string","null"]},"supplierName":{"type":["string","null"]},"scope":{"type":"string","enum":["library","organization"]},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"pictograms":{"type":"array","items":{"type":"string"}},"hazardCodes":{"type":"array","items":{"type":"string"}},"isHazardous":{"type":"boolean"},"isDangerousGood":{"type":"boolean"},"dgClass":{"type":["string","null"]},"subsidiaryRisks":{"type":"array","items":{"type":"string"}},"unNumber":{"type":["string","null"]},"packingGroup":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]},"physicalState":{"type":["string","null"],"enum":["solid","liquid","gas",null]},"casNumbers":{"type":"array","items":{"type":"string"}},"sds":{"type":["object","null"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"version":{"type":["string","null"]},"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"currency":{"type":"object","properties":{"status":{"type":"string","enum":["current","due_soon","expired","unknown"]},"reviewDue":{"type":["string","null"]},"daysRemaining":{"type":["number","null"]},"label":{"type":"string"}},"required":["status","reviewDue","daysRemaining","label"]}},"required":["id","status","version","issueDate","revisionDate","currency"]},"updatedAt":{"type":"string"}},"required":["id","name","synonyms","productCode","supplierName","scope","signalWord","pictograms","hazardCodes","isHazardous","isDangerousGood","dgClass","subsidiaryRisks","unNumber","packingGroup","hazchemCode","physicalState","casNumbers","sds","updatedAt"]},"ProductDetail":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"synonyms":{"type":"array","items":{"type":"string"}},"productCode":{"type":["string","null"]},"supplierName":{"type":["string","null"]},"scope":{"type":"string","enum":["library","organization"]},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"pictograms":{"type":"array","items":{"type":"string"}},"hazardCodes":{"type":"array","items":{"type":"string"}},"isHazardous":{"type":"boolean"},"isDangerousGood":{"type":"boolean"},"dgClass":{"type":["string","null"]},"subsidiaryRisks":{"type":"array","items":{"type":"string"}},"unNumber":{"type":["string","null"]},"packingGroup":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]},"physicalState":{"type":["string","null"],"enum":["solid","liquid","gas",null]},"casNumbers":{"type":"array","items":{"type":"string"}},"sds":{"type":["object","null"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"version":{"type":["string","null"]},"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"currency":{"type":"object","properties":{"status":{"type":"string","enum":["current","due_soon","expired","unknown"]},"reviewDue":{"type":["string","null"]},"daysRemaining":{"type":["number","null"]},"label":{"type":"string"}},"required":["status","reviewDue","daysRemaining","label"]}},"required":["id","status","version","issueDate","revisionDate","currency"]},"updatedAt":{"type":"string"},"description":{"type":["string","null"]},"precautionaryCodes":{"type":"array","items":{"type":"string"}},"properShippingName":{"type":["string","null"]},"flashPointC":{"type":["number","null"]},"boilingPointC":{"type":["number","null"]},"poisonsSchedule":{"type":["string","null"]},"reactiveGroups":{"type":"array","items":{"type":"string"}},"hazardStatements":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"text":{"type":"string"}},"required":["code","text"]}},"precautionaryStatements":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"text":{"type":"string"}},"required":["code","text"]}},"hazardClasses":{"type":"array","items":{"type":"string"}},"ingredients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"cas":{"type":["string","null"]},"concentration":{"type":["string","null"]},"concentrationMin":{"type":["number","null"]},"concentrationMax":{"type":["number","null"]},"hazardCodes":{"type":"array","items":{"type":"string"}},"exposureStandards":{"type":"array","items":{"type":"object","properties":{"substance":{"type":"string"},"cas":{"type":["string","null"]},"twaPpm":{"type":["number","null"]},"twaMgM3":{"type":["number","null"]},"stelPpm":{"type":["number","null"]},"stelMgM3":{"type":["number","null"]},"peakPpm":{"type":["number","null"]},"peakMgM3":{"type":["number","null"]},"notes":{"type":["string","null"]},"source":{"type":["string","null"]}},"required":["substance"]}}},"required":["id","name","cas","concentration","concentrationMin","concentrationMax","hazardCodes","exposureStandards"]}},"inOrgLibrary":{"type":"boolean"},"createdAt":{"type":"string"}},"required":["id","name","synonyms","productCode","supplierName","scope","signalWord","pictograms","hazardCodes","isHazardous","isDangerousGood","dgClass","subsidiaryRisks","unNumber","packingGroup","hazchemCode","physicalState","casNumbers","sds","updatedAt","description","precautionaryCodes","properShippingName","flashPointC","boilingPointC","poisonsSchedule","reactiveGroups","hazardStatements","precautionaryStatements","hazardClasses","ingredients","inOrgLibrary","createdAt"]},"ProductInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"synonyms":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":50},"productCode":{"type":["string","null"],"maxLength":100},"description":{"type":["string","null"],"maxLength":5000},"supplierName":{"type":["string","null"],"maxLength":300},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"hazardCodes":{"type":"array","items":{"type":"string"},"maxItems":100},"precautionaryCodes":{"type":"array","items":{"type":"string"},"maxItems":150},"pictograms":{"type":"array","items":{"type":"string"},"maxItems":9},"dgClass":{"type":["string","null"],"maxLength":10},"subsidiaryRisks":{"type":"array","items":{"type":"string"},"maxItems":5},"unNumber":{"type":["string","null"],"maxLength":10},"packingGroup":{"type":["string","null"],"maxLength":5},"properShippingName":{"type":["string","null"],"maxLength":300},"hazchemCode":{"type":["string","null"],"maxLength":10},"physicalState":{"type":["string","null"],"enum":["solid","liquid","gas",null]},"flashPointC":{"type":["number","null"]},"boilingPointC":{"type":["number","null"]},"poisonsSchedule":{"type":["string","null"],"maxLength":40},"reactiveGroups":{"type":"array","items":{"type":"string"},"maxItems":20},"ingredients":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"cas":{"type":["string","null"],"maxLength":20},"concentration":{"type":["string","null"],"maxLength":60},"concentrationMin":{"type":["number","null"],"minimum":0,"maximum":100},"concentrationMax":{"type":["number","null"],"minimum":0,"maximum":100},"hazardCodes":{"type":"array","items":{"type":"string"}},"exposureStandards":{"type":"array","items":{"type":"object","properties":{"substance":{"type":"string"},"cas":{"type":["string","null"]},"twaPpm":{"type":["number","null"]},"twaMgM3":{"type":["number","null"]},"stelPpm":{"type":["number","null"]},"stelMgM3":{"type":["number","null"]},"peakPpm":{"type":["number","null"]},"peakMgM3":{"type":["number","null"]},"notes":{"type":["string","null"]},"source":{"type":["string","null"]}},"required":["substance"]}}},"required":["name"]},"maxItems":100}},"required":["name"]},"ProductUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"synonyms":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":50},"productCode":{"type":["string","null"],"maxLength":100},"description":{"type":["string","null"],"maxLength":5000},"supplierName":{"type":["string","null"],"maxLength":300},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"hazardCodes":{"type":"array","items":{"type":"string"},"maxItems":100},"precautionaryCodes":{"type":"array","items":{"type":"string"},"maxItems":150},"pictograms":{"type":"array","items":{"type":"string"},"maxItems":9},"dgClass":{"type":["string","null"],"maxLength":10},"subsidiaryRisks":{"type":"array","items":{"type":"string"},"maxItems":5},"unNumber":{"type":["string","null"],"maxLength":10},"packingGroup":{"type":["string","null"],"maxLength":5},"properShippingName":{"type":["string","null"],"maxLength":300},"hazchemCode":{"type":["string","null"],"maxLength":10},"physicalState":{"type":["string","null"],"enum":["solid","liquid","gas",null]},"flashPointC":{"type":["number","null"]},"boilingPointC":{"type":["number","null"]},"poisonsSchedule":{"type":["string","null"],"maxLength":40},"reactiveGroups":{"type":"array","items":{"type":"string"},"maxItems":20},"ingredients":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"cas":{"type":["string","null"],"maxLength":20},"concentration":{"type":["string","null"],"maxLength":60},"concentrationMin":{"type":["number","null"],"minimum":0,"maximum":100},"concentrationMax":{"type":["number","null"],"minimum":0,"maximum":100},"hazardCodes":{"type":"array","items":{"type":"string"}},"exposureStandards":{"type":"array","items":{"type":"object","properties":{"substance":{"type":"string"},"cas":{"type":["string","null"]},"twaPpm":{"type":["number","null"]},"twaMgM3":{"type":["number","null"]},"stelPpm":{"type":["number","null"]},"stelMgM3":{"type":["number","null"]},"peakPpm":{"type":["number","null"]},"peakMgM3":{"type":["number","null"]},"notes":{"type":["string","null"]},"source":{"type":["string","null"]}},"required":["substance"]}}},"required":["name"]},"maxItems":100}}},"SdsSummary":{"type":"object","properties":{"id":{"type":"string"},"productId":{"type":"string"},"productName":{"type":"string"},"status":{"type":"string","enum":["processing","draft","published","superseded","failed"]},"version":{"type":["string","null"]},"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"language":{"type":"string"},"country":{"type":"string"},"authorName":{"type":["string","null"]},"source":{"type":"string","enum":["upload","library","authored","api"]},"file":{"type":["object","null"],"properties":{"name":{"type":["string","null"]},"size":{"type":["number","null"]},"mimeType":{"type":["string","null"]},"url":{"type":"string"}},"required":["name","size","mimeType","url"]},"extraction":{"type":["object","null"],"properties":{"method":{"type":"string"},"confidence":{"type":"number"},"warnings":{"type":"array","items":{"type":"string"}},"model":{"type":"string"},"error":{"type":"string"},"durationMs":{"type":"number"},"pages":{"type":"number"}},"required":["method"]},"currency":{"type":"object","properties":{"status":{"type":"string","enum":["current","due_soon","expired","unknown"]},"reviewDue":{"type":["string","null"]},"daysRemaining":{"type":["number","null"]},"label":{"type":"string"}},"required":["status","reviewDue","daysRemaining","label"]},"shareUrl":{"type":["string","null"]},"publishedAt":{"type":["string","null"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","productId","productName","status","version","issueDate","revisionDate","language","country","authorName","source","file","extraction","currency","shareUrl","publishedAt","createdAt","updatedAt"]},"SdsDocument":{"type":"object","properties":{"id":{"type":"string"},"productId":{"type":"string"},"productName":{"type":"string"},"status":{"type":"string","enum":["processing","draft","published","superseded","failed"]},"version":{"type":["string","null"]},"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"language":{"type":"string"},"country":{"type":"string"},"authorName":{"type":["string","null"]},"source":{"type":"string","enum":["upload","library","authored","api"]},"file":{"type":["object","null"],"properties":{"name":{"type":["string","null"]},"size":{"type":["number","null"]},"mimeType":{"type":["string","null"]},"url":{"type":"string"}},"required":["name","size","mimeType","url"]},"sections":{"type":"object","properties":{"identification":{"type":["object","null"],"properties":{"productName":{"type":["string","null"]},"otherNames":{"type":["array","null"],"items":{"type":"string"}},"productCode":{"type":["string","null"]},"recommendedUse":{"type":["string","null"]},"restrictions":{"type":["string","null"]},"supplierName":{"type":["string","null"]},"supplierAddress":{"type":["string","null"]},"supplierPhone":{"type":["string","null"]},"supplierEmail":{"type":["string","null"]},"supplierWebsite":{"type":["string","null"]},"emergencyPhone":{"type":["string","null"]}}},"hazards":{"type":["object","null"],"properties":{"isHazardous":{"type":["boolean","null"]},"classifications":{"type":["array","null"],"items":{"type":"object","properties":{"hazardClass":{"type":"string"},"category":{"type":["string","null"]},"hazardCode":{"type":["string","null"]}},"required":["hazardClass"]}},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"pictograms":{"type":["array","null"],"items":{"type":"string"}},"hazardStatements":{"type":["array","null"],"items":{"type":"string"}},"precautionaryStatements":{"type":["array","null"],"items":{"type":"string"}},"otherHazards":{"type":["string","null"]}}},"composition":{"type":["object","null"],"properties":{"ingredients":{"type":["array","null"],"items":{"type":"object","properties":{"name":{"type":"string"},"cas":{"type":["string","null"]},"ec":{"type":["string","null"]},"concentration":{"type":["string","null"]},"concentrationMin":{"type":["number","null"]},"concentrationMax":{"type":["number","null"]},"hazardCodes":{"type":["array","null"],"items":{"type":"string"}}},"required":["name"]}},"notes":{"type":["string","null"]}}},"firstAid":{"type":["object","null"],"properties":{"inhalation":{"type":["string","null"]},"skin":{"type":["string","null"]},"eyes":{"type":["string","null"]},"ingestion":{"type":["string","null"]},"symptoms":{"type":["string","null"]},"immediateMedicalAttention":{"type":["string","null"]},"notesToPhysician":{"type":["string","null"]},"firstAidFacilities":{"type":["string","null"]}}},"fireFighting":{"type":["object","null"],"properties":{"suitableMedia":{"type":["string","null"]},"unsuitableMedia":{"type":["string","null"]},"specificHazards":{"type":["string","null"]},"advice":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]}}},"accidentalRelease":{"type":["object","null"],"properties":{"personalPrecautions":{"type":["string","null"]},"environmentalPrecautions":{"type":["string","null"]},"containment":{"type":["string","null"]},"cleanup":{"type":["string","null"]}}},"handlingStorage":{"type":["object","null"],"properties":{"handling":{"type":["string","null"]},"storage":{"type":["string","null"]},"incompatibleMaterials":{"type":["string","null"]}}},"exposureControls":{"type":["object","null"],"properties":{"exposureStandards":{"type":["array","null"],"items":{"type":"object","properties":{"substance":{"type":"string"},"cas":{"type":["string","null"]},"twaPpm":{"type":["number","null"]},"twaMgM3":{"type":["number","null"]},"stelPpm":{"type":["number","null"]},"stelMgM3":{"type":["number","null"]},"peakPpm":{"type":["number","null"]},"peakMgM3":{"type":["number","null"]},"notes":{"type":["string","null"]},"source":{"type":["string","null"]}},"required":["substance"]}},"biologicalLimits":{"type":["string","null"]},"engineeringControls":{"type":["string","null"]},"eyeProtection":{"type":["string","null"]},"handProtection":{"type":["string","null"]},"bodyProtection":{"type":["string","null"]},"respiratoryProtection":{"type":["string","null"]},"thermalHazards":{"type":["string","null"]}}},"physicalChemical":{"type":["object","null"],"properties":{"appearance":{"type":["string","null"]},"physicalState":{"type":["string","null"]},"colour":{"type":["string","null"]},"odour":{"type":["string","null"]},"odourThreshold":{"type":["string","null"]},"pH":{"type":["string","null"]},"meltingPoint":{"type":["string","null"]},"boilingPoint":{"type":["string","null"]},"boilingPointC":{"type":["number","null"]},"flashPoint":{"type":["string","null"]},"flashPointC":{"type":["number","null"]},"evaporationRate":{"type":["string","null"]},"flammability":{"type":["string","null"]},"explosiveLimits":{"type":["string","null"]},"vapourPressure":{"type":["string","null"]},"vapourDensity":{"type":["string","null"]},"relativeDensity":{"type":["string","null"]},"solubility":{"type":["string","null"]},"partitionCoefficient":{"type":["string","null"]},"autoIgnitionTemperature":{"type":["string","null"]},"decompositionTemperature":{"type":["string","null"]},"viscosity":{"type":["string","null"]},"other":{"type":["string","null"]}}},"stabilityReactivity":{"type":["object","null"],"properties":{"reactivity":{"type":["string","null"]},"chemicalStability":{"type":["string","null"]},"hazardousReactions":{"type":["string","null"]},"conditionsToAvoid":{"type":["string","null"]},"incompatibleMaterials":{"type":["string","null"]},"hazardousDecompositionProducts":{"type":["string","null"]}}},"toxicology":{"type":["object","null"],"properties":{"routesOfExposure":{"type":["string","null"]},"acuteToxicity":{"type":["string","null"]},"skinCorrosionIrritation":{"type":["string","null"]},"eyeDamageIrritation":{"type":["string","null"]},"sensitisation":{"type":["string","null"]},"mutagenicity":{"type":["string","null"]},"carcinogenicity":{"type":["string","null"]},"reproductiveToxicity":{"type":["string","null"]},"stotSingle":{"type":["string","null"]},"stotRepeated":{"type":["string","null"]},"aspiration":{"type":["string","null"]},"other":{"type":["string","null"]}}},"ecological":{"type":["object","null"],"properties":{"ecotoxicity":{"type":["string","null"]},"persistence":{"type":["string","null"]},"bioaccumulation":{"type":["string","null"]},"mobility":{"type":["string","null"]},"otherEffects":{"type":["string","null"]}}},"disposal":{"type":["object","null"],"properties":{"methods":{"type":["string","null"]},"containerDisposal":{"type":["string","null"]},"notes":{"type":["string","null"]}}},"transport":{"type":["object","null"],"properties":{"notDangerousGoods":{"type":["boolean","null"]},"unNumber":{"type":["string","null"]},"properShippingName":{"type":["string","null"]},"dgClass":{"type":["string","null"]},"subsidiaryRisks":{"type":["array","null"],"items":{"type":"string"}},"packingGroup":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]},"environmentalHazard":{"type":["boolean","null"]},"specialPrecautions":{"type":["string","null"]},"seaTransport":{"type":["string","null"]},"airTransport":{"type":["string","null"]}}},"regulatory":{"type":["object","null"],"properties":{"poisonsSchedule":{"type":["string","null"]},"inventoryListing":{"type":["string","null"]},"otherRegulations":{"type":["string","null"]}}},"otherInfo":{"type":["object","null"],"properties":{"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"version":{"type":["string","null"]},"revisionNotes":{"type":["string","null"]},"abbreviations":{"type":["string","null"]},"references":{"type":["string","null"]},"disclaimer":{"type":["string","null"]}}}}},"extraction":{"type":["object","null"],"properties":{"method":{"type":"string"},"confidence":{"type":"number"},"warnings":{"type":"array","items":{"type":"string"}},"model":{"type":"string"},"error":{"type":"string"},"durationMs":{"type":"number"},"pages":{"type":"number"}},"required":["method"]},"currency":{"type":"object","properties":{"status":{"type":"string","enum":["current","due_soon","expired","unknown"]},"reviewDue":{"type":["string","null"]},"daysRemaining":{"type":["number","null"]},"label":{"type":"string"}},"required":["status","reviewDue","daysRemaining","label"]},"shareUrl":{"type":["string","null"]},"publishedAt":{"type":["string","null"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","productId","productName","status","version","issueDate","revisionDate","language","country","authorName","source","file","sections","extraction","currency","shareUrl","publishedAt","createdAt","updatedAt"]},"SdsSection":{"type":"object","properties":{"sdsId":{"type":"string"},"productId":{"type":"string"},"productName":{"type":"string"},"section":{"type":"number"},"key":{"type":"string"},"title":{"type":"string"},"content":{"type":"object","additionalProperties":{}}},"required":["sdsId","productId","productName","section","key","title","content"]},"EmergencySummary":{"type":"object","properties":{"productName":{"type":"string"},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"hazards":{"type":"array","items":{"type":"string"}},"firstAid":{"type":"object","properties":{"inhalation":{"type":["string","null"]},"skin":{"type":["string","null"]},"eyes":{"type":["string","null"]},"ingestion":{"type":["string","null"]},"medical":{"type":["string","null"]}},"required":["inhalation","skin","eyes","ingestion","medical"]},"fire":{"type":"object","properties":{"media":{"type":["string","null"]},"unsuitable":{"type":["string","null"]},"hazards":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]}},"required":["media","unsuitable","hazards","hazchemCode"]},"spill":{"type":"object","properties":{"precautions":{"type":["string","null"]},"containment":{"type":["string","null"]},"cleanup":{"type":["string","null"]}},"required":["precautions","containment","cleanup"]},"ppe":{"type":"object","properties":{"eyes":{"type":["string","null"]},"hands":{"type":["string","null"]},"body":{"type":["string","null"]},"respiratory":{"type":["string","null"]}},"required":["eyes","hands","body","respiratory"]},"emergencyPhone":{"type":["string","null"]},"poisonsInformation":{"type":"string"},"transport":{"type":["object","null"],"properties":{"unNumber":{"type":["string","null"]},"dgClass":{"type":["string","null"]},"packingGroup":{"type":["string","null"]}},"required":["unNumber","dgClass","packingGroup"]}},"required":["productName","signalWord","hazards","firstAid","fire","spill","ppe","emergencyPhone","poisonsInformation","transport"]},"Label":{"type":"object","properties":{"size":{"type":"string","enum":["large","medium","small"]},"dimensions":{"type":"object","properties":{"widthMm":{"type":"number"},"heightMm":{"type":"number"}},"required":["widthMm","heightMm"]},"productName":{"type":"string"},"productCode":{"type":["string","null"]},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"pictograms":{"type":"array","items":{"type":"string"}},"hazardStatements":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"text":{"type":"string"}},"required":["code","text"]}},"precautionaryStatements":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"text":{"type":"string"},"kind":{"type":"string"}},"required":["code","text","kind"]}},"ingredients":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"cas":{"type":["string","null"]},"concentration":{"type":["string","null"]}},"required":["name","cas","concentration"]}},"supplier":{"type":"object","properties":{"name":{"type":["string","null"]},"address":{"type":["string","null"]},"phone":{"type":["string","null"]}},"required":["name","address","phone"]},"emergencyPhone":{"type":["string","null"]},"transport":{"type":["object","null"],"properties":{"unNumber":{"type":["string","null"]},"dgClass":{"type":["string","null"]},"packingGroup":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]}},"required":["unNumber","dgClass","packingGroup","hazchemCode"]},"notes":{"type":"array","items":{"type":"string"}}},"required":["size","dimensions","productName","productCode","signalWord","pictograms","hazardStatements","precautionaryStatements","ingredients","supplier","emergencyPhone","transport","notes"]},"InventoryItem":{"type":"object","properties":{"id":{"type":"string"},"location":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"siteId":{"type":"string"},"siteName":{"type":"string"}},"required":["id","name","siteId","siteName"]},"product":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"pictograms":{"type":"array","items":{"type":"string"}},"hazardCodes":{"type":"array","items":{"type":"string"}},"isHazardous":{"type":"boolean"},"isDangerousGood":{"type":"boolean"},"dgClass":{"type":["string","null"]},"subsidiaryRisks":{"type":"array","items":{"type":"string"}},"unNumber":{"type":["string","null"]},"packingGroup":{"type":["string","null"]},"sds":{"type":["object","null"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"version":{"type":["string","null"]},"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"currency":{"type":"object","properties":{"status":{"type":"string","enum":["current","due_soon","expired","unknown"]},"reviewDue":{"type":["string","null"]},"daysRemaining":{"type":["number","null"]},"label":{"type":"string"}},"required":["status","reviewDue","daysRemaining","label"]}},"required":["id","status","version","issueDate","revisionDate","currency"]}},"required":["id","name","signalWord","pictograms","hazardCodes","isHazardous","isDangerousGood","dgClass","subsidiaryRisks","unNumber","packingGroup","sds"]},"containerSize":{"type":"number"},"containerUnit":{"type":"string","enum":["mL","L","kL","m3","g","kg","t","each"]},"containerCount":{"type":"number"},"totalQuantity":{"type":"number"},"totalUnit":{"type":"string","enum":["L","kg","each"]},"maxQuantity":{"type":["number","null"]},"notes":{"type":["string","null"]},"lastCheckedAt":{"type":["string","null"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","location","product","containerSize","containerUnit","containerCount","totalQuantity","totalUnit","maxQuantity","notes","lastCheckedAt","createdAt","updatedAt"]},"UpdateSdsInput":{"type":"object","properties":{"version":{"type":["string","null"],"maxLength":40},"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"authorName":{"type":["string","null"],"maxLength":300},"sections":{"type":"object","properties":{"identification":{"type":["object","null"],"properties":{"productName":{"type":["string","null"]},"otherNames":{"type":["array","null"],"items":{"type":"string"}},"productCode":{"type":["string","null"]},"recommendedUse":{"type":["string","null"]},"restrictions":{"type":["string","null"]},"supplierName":{"type":["string","null"]},"supplierAddress":{"type":["string","null"]},"supplierPhone":{"type":["string","null"]},"supplierEmail":{"type":["string","null"]},"supplierWebsite":{"type":["string","null"]},"emergencyPhone":{"type":["string","null"]}}},"hazards":{"type":["object","null"],"properties":{"isHazardous":{"type":["boolean","null"]},"classifications":{"type":["array","null"],"items":{"type":"object","properties":{"hazardClass":{"type":"string"},"category":{"type":["string","null"]},"hazardCode":{"type":["string","null"]}},"required":["hazardClass"]}},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"pictograms":{"type":["array","null"],"items":{"type":"string"}},"hazardStatements":{"type":["array","null"],"items":{"type":"string"}},"precautionaryStatements":{"type":["array","null"],"items":{"type":"string"}},"otherHazards":{"type":["string","null"]}}},"composition":{"type":["object","null"],"properties":{"ingredients":{"type":["array","null"],"items":{"type":"object","properties":{"name":{"type":"string"},"cas":{"type":["string","null"]},"ec":{"type":["string","null"]},"concentration":{"type":["string","null"]},"concentrationMin":{"type":["number","null"]},"concentrationMax":{"type":["number","null"]},"hazardCodes":{"type":["array","null"],"items":{"type":"string"}}},"required":["name"]}},"notes":{"type":["string","null"]}}},"firstAid":{"type":["object","null"],"properties":{"inhalation":{"type":["string","null"]},"skin":{"type":["string","null"]},"eyes":{"type":["string","null"]},"ingestion":{"type":["string","null"]},"symptoms":{"type":["string","null"]},"immediateMedicalAttention":{"type":["string","null"]},"notesToPhysician":{"type":["string","null"]},"firstAidFacilities":{"type":["string","null"]}}},"fireFighting":{"type":["object","null"],"properties":{"suitableMedia":{"type":["string","null"]},"unsuitableMedia":{"type":["string","null"]},"specificHazards":{"type":["string","null"]},"advice":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]}}},"accidentalRelease":{"type":["object","null"],"properties":{"personalPrecautions":{"type":["string","null"]},"environmentalPrecautions":{"type":["string","null"]},"containment":{"type":["string","null"]},"cleanup":{"type":["string","null"]}}},"handlingStorage":{"type":["object","null"],"properties":{"handling":{"type":["string","null"]},"storage":{"type":["string","null"]},"incompatibleMaterials":{"type":["string","null"]}}},"exposureControls":{"type":["object","null"],"properties":{"exposureStandards":{"type":["array","null"],"items":{"type":"object","properties":{"substance":{"type":"string"},"cas":{"type":["string","null"]},"twaPpm":{"type":["number","null"]},"twaMgM3":{"type":["number","null"]},"stelPpm":{"type":["number","null"]},"stelMgM3":{"type":["number","null"]},"peakPpm":{"type":["number","null"]},"peakMgM3":{"type":["number","null"]},"notes":{"type":["string","null"]},"source":{"type":["string","null"]}},"required":["substance"]}},"biologicalLimits":{"type":["string","null"]},"engineeringControls":{"type":["string","null"]},"eyeProtection":{"type":["string","null"]},"handProtection":{"type":["string","null"]},"bodyProtection":{"type":["string","null"]},"respiratoryProtection":{"type":["string","null"]},"thermalHazards":{"type":["string","null"]}}},"physicalChemical":{"type":["object","null"],"properties":{"appearance":{"type":["string","null"]},"physicalState":{"type":["string","null"]},"colour":{"type":["string","null"]},"odour":{"type":["string","null"]},"odourThreshold":{"type":["string","null"]},"pH":{"type":["string","null"]},"meltingPoint":{"type":["string","null"]},"boilingPoint":{"type":["string","null"]},"boilingPointC":{"type":["number","null"]},"flashPoint":{"type":["string","null"]},"flashPointC":{"type":["number","null"]},"evaporationRate":{"type":["string","null"]},"flammability":{"type":["string","null"]},"explosiveLimits":{"type":["string","null"]},"vapourPressure":{"type":["string","null"]},"vapourDensity":{"type":["string","null"]},"relativeDensity":{"type":["string","null"]},"solubility":{"type":["string","null"]},"partitionCoefficient":{"type":["string","null"]},"autoIgnitionTemperature":{"type":["string","null"]},"decompositionTemperature":{"type":["string","null"]},"viscosity":{"type":["string","null"]},"other":{"type":["string","null"]}}},"stabilityReactivity":{"type":["object","null"],"properties":{"reactivity":{"type":["string","null"]},"chemicalStability":{"type":["string","null"]},"hazardousReactions":{"type":["string","null"]},"conditionsToAvoid":{"type":["string","null"]},"incompatibleMaterials":{"type":["string","null"]},"hazardousDecompositionProducts":{"type":["string","null"]}}},"toxicology":{"type":["object","null"],"properties":{"routesOfExposure":{"type":["string","null"]},"acuteToxicity":{"type":["string","null"]},"skinCorrosionIrritation":{"type":["string","null"]},"eyeDamageIrritation":{"type":["string","null"]},"sensitisation":{"type":["string","null"]},"mutagenicity":{"type":["string","null"]},"carcinogenicity":{"type":["string","null"]},"reproductiveToxicity":{"type":["string","null"]},"stotSingle":{"type":["string","null"]},"stotRepeated":{"type":["string","null"]},"aspiration":{"type":["string","null"]},"other":{"type":["string","null"]}}},"ecological":{"type":["object","null"],"properties":{"ecotoxicity":{"type":["string","null"]},"persistence":{"type":["string","null"]},"bioaccumulation":{"type":["string","null"]},"mobility":{"type":["string","null"]},"otherEffects":{"type":["string","null"]}}},"disposal":{"type":["object","null"],"properties":{"methods":{"type":["string","null"]},"containerDisposal":{"type":["string","null"]},"notes":{"type":["string","null"]}}},"transport":{"type":["object","null"],"properties":{"notDangerousGoods":{"type":["boolean","null"]},"unNumber":{"type":["string","null"]},"properShippingName":{"type":["string","null"]},"dgClass":{"type":["string","null"]},"subsidiaryRisks":{"type":["array","null"],"items":{"type":"string"}},"packingGroup":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]},"environmentalHazard":{"type":["boolean","null"]},"specialPrecautions":{"type":["string","null"]},"seaTransport":{"type":["string","null"]},"airTransport":{"type":["string","null"]}}},"regulatory":{"type":["object","null"],"properties":{"poisonsSchedule":{"type":["string","null"]},"inventoryListing":{"type":["string","null"]},"otherRegulations":{"type":["string","null"]}}},"otherInfo":{"type":["object","null"],"properties":{"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"version":{"type":["string","null"]},"revisionNotes":{"type":["string","null"]},"abbreviations":{"type":["string","null"]},"references":{"type":["string","null"]},"disclaimer":{"type":["string","null"]}}}}},"syncProduct":{"type":"boolean"}}},"PublishSdsInput":{"type":"object","properties":{"syncProduct":{"type":"boolean"}}},"Site":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"address":{"type":["string","null"]},"jurisdiction":{"type":"string"},"locationCount":{"type":"number"},"itemCount":{"type":"number"},"createdAt":{"type":"string"}},"required":["id","name","address","jurisdiction","locationCount","itemCount","createdAt"]},"SiteInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"address":{"type":["string","null"],"maxLength":500},"jurisdiction":{"type":"string","maxLength":20}},"required":["name"]},"SiteUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"address":{"type":["string","null"],"maxLength":500},"jurisdiction":{"type":"string","maxLength":20}}},"Location":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"type":"string"},"parentId":{"type":["string","null"]},"name":{"type":"string"},"type":{"type":"string","enum":["area","room","store","cabinet","shelf","cage","outdoor","vehicle"]},"description":{"type":["string","null"]},"publicUrl":{"type":["string","null"]},"itemCount":{"type":"number"},"createdAt":{"type":"string"}},"required":["id","siteId","parentId","name","type","description","publicUrl","itemCount","createdAt"]},"LocationInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"type":{"type":"string","enum":["area","room","store","cabinet","shelf","cage","outdoor","vehicle"]},"description":{"type":["string","null"],"maxLength":1000},"parentId":{"type":["string","null"]}},"required":["name"]},"Register":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"address":{"type":["string","null"]}},"required":["id","name","address"]},"generatedAt":{"type":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"product":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"pictograms":{"type":"array","items":{"type":"string"}},"hazardCodes":{"type":"array","items":{"type":"string"}},"isHazardous":{"type":"boolean"},"isDangerousGood":{"type":"boolean"},"dgClass":{"type":["string","null"]},"subsidiaryRisks":{"type":"array","items":{"type":"string"}},"unNumber":{"type":["string","null"]},"packingGroup":{"type":["string","null"]},"sds":{"type":["object","null"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"version":{"type":["string","null"]},"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"currency":{"type":"object","properties":{"status":{"type":"string","enum":["current","due_soon","expired","unknown"]},"reviewDue":{"type":["string","null"]},"daysRemaining":{"type":["number","null"]},"label":{"type":"string"}},"required":["status","reviewDue","daysRemaining","label"]}},"required":["id","status","version","issueDate","revisionDate","currency"]},"supplierName":{"type":["string","null"]},"casNumbers":{"type":"array","items":{"type":"string"}}},"required":["id","name","signalWord","pictograms","hazardCodes","isHazardous","isDangerousGood","dgClass","subsidiaryRisks","unNumber","packingGroup","sds","supplierName","casNumbers"]},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"number"},"unit":{"type":"string"}},"required":["id","name","quantity","unit"]}},"totalQuantity":{"type":"number"},"unit":{"type":"string"},"schedule11Category":{"type":["string","null"]}},"required":["product","locations","totalQuantity","unit","schedule11Category"]}},"summary":{"type":"object","properties":{"products":{"type":"number"},"hazardous":{"type":"number"},"dangerousGoods":{"type":"number"},"sdsExpired":{"type":"number"},"sdsMissing":{"type":"number"}},"required":["products","hazardous","dangerousGoods","sdsExpired","sdsMissing"]}},"required":["site","generatedAt","entries","summary"]},"ThresholdReport":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"categories":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"placard":{"type":"number"},"manifest":{"type":"number"},"unit":{"type":"string"},"basis":{"type":"string"},"total":{"type":"number"},"placardRequired":{"type":"boolean"},"manifestRequired":{"type":"boolean"},"percentOfPlacard":{"type":"number"},"percentOfManifest":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"number"},"reason":{"type":"string"},"inferred":{"type":"boolean"}},"required":["quantity","reason","inferred"]}}},"required":["id","label","placard","manifest","unit","basis","total","placardRequired","manifestRequired","percentOfPlacard","percentOfManifest","items"]}},"placardRequired":{"type":"boolean"},"manifestRequired":{"type":"boolean"},"uncounted":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"reason":{"type":"string"}},"required":["reason"]}},"disclaimer":{"type":"string"}},"required":["site","categories","placardRequired","manifestRequired","uncounted","disclaimer"]},"CompatibilityResult":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"dgClass":{"type":["string","null"]},"subsidiaryRisks":{"type":"array","items":{"type":"string"}},"reactiveGroups":{"type":"array","items":{"type":"string"}}},"required":["id","name","dgClass","subsidiaryRisks","reactiveGroups"]}},"level":{"type":"string","enum":["compatible","caution","keep_apart","segregate","isolate"]},"label":{"type":"string"},"guidance":{"type":"string"},"pairs":{"type":"array","items":{"type":"object","properties":{"a":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"b":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"level":{"type":"string","enum":["compatible","caution","keep_apart","segregate","isolate"]},"label":{"type":"string"},"guidance":{"type":"string"},"reasons":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["class","reactive","inferred"]},"level":{"type":"string","enum":["compatible","caution","keep_apart","segregate","isolate"]},"detail":{"type":"string"}},"required":["source","level","detail"]}}},"required":["a","b","level","label","guidance","reasons"]}},"conflicts":{"type":"array","items":{"type":"object","properties":{"a":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"b":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"level":{"type":"string","enum":["compatible","caution","keep_apart","segregate","isolate"]},"label":{"type":"string"},"guidance":{"type":"string"},"reasons":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["class","reactive","inferred"]},"level":{"type":"string","enum":["compatible","caution","keep_apart","segregate","isolate"]},"detail":{"type":"string"}},"required":["source","level","detail"]}}},"required":["a","b","level","label","guidance","reasons"]}},"disclaimer":{"type":"string"}},"required":["items","level","label","guidance","pairs","conflicts","disclaimer"]},"CompatibilityInput":{"type":"object","properties":{"productIds":{"type":"array","items":{"type":"string"},"maxItems":50},"locationId":{"type":"string"},"classes":{"type":"array","items":{"type":"string"},"maxItems":20}}},"LocationUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"type":{"type":"string","enum":["area","room","store","cabinet","shelf","cage","outdoor","vehicle"]},"description":{"type":["string","null"],"maxLength":1000},"parentId":{"type":["string","null"]}}},"InventoryInput":{"type":"object","properties":{"locationId":{"type":"string"},"productId":{"type":"string"},"containerSize":{"type":"number","exclusiveMinimum":0},"containerUnit":{"type":"string","enum":["mL","L","kL","m3","g","kg","t","each"]},"containerCount":{"type":"number","minimum":0},"maxQuantity":{"type":["number","null"],"exclusiveMinimum":0},"notes":{"type":["string","null"],"maxLength":1000}},"required":["locationId","productId","containerSize","containerUnit"]},"InventoryUpdate":{"type":"object","properties":{"locationId":{"type":"string"},"productId":{"type":"string"},"containerSize":{"type":"number","exclusiveMinimum":0},"containerUnit":{"type":"string","enum":["mL","L","kL","m3","g","kg","t","each"]},"containerCount":{"type":"number","minimum":0},"maxQuantity":{"type":["number","null"],"exclusiveMinimum":0},"notes":{"type":["string","null"],"maxLength":1000},"markChecked":{"type":"boolean"}}},"RiskAssessment":{"type":"object","properties":{"id":{"type":"string"},"product":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"pictograms":{"type":"array","items":{"type":"string"}},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]}},"required":["id","name","pictograms","signalWord"]},"location":{"type":["object","null"],"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"title":{"type":"string"},"task":{"type":["string","null"]},"frequency":{"type":["string","null"]},"amount":{"type":"string","enum":["small","medium","large"]},"inherent":{"type":"object","properties":{"likelihood":{"type":"number"},"consequence":{"type":"number"},"score":{"type":"number"},"rating":{"type":"string","enum":["low","medium","high","extreme"]},"label":{"type":"string"},"action":{"type":"string"}},"required":["likelihood","consequence","score","rating","label","action"]},"controls":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["elimination","substitution","isolation","engineering","administrative","ppe"]},"description":{"type":"string","minLength":1,"maxLength":2000},"status":{"type":"string","enum":["existing","proposed","implemented"]}},"required":["type","description","status"]}},"residual":{"type":["object","null"],"properties":{"likelihood":{"type":"number"},"consequence":{"type":"number"},"score":{"type":"number"},"rating":{"type":"string","enum":["low","medium","high","extreme"]},"label":{"type":"string"},"action":{"type":"string"}},"required":["likelihood","consequence","score","rating","label","action"]},"controlBanding":{"type":["object","null"],"properties":{"hazardGroup":{"type":"string","enum":["A","B","C","D","E"]},"hazardDrivers":{"type":"array","items":{"type":"string"}},"release":{"type":"string","enum":["low","medium_volatility","medium_dustiness","high"]},"amount":{"type":"string","enum":["small","medium","large"]},"approach":{"type":"number"},"approachLabel":{"type":"string"},"approachDescription":{"type":"string"},"skinProtection":{"type":"boolean"},"recommendations":{"type":"array","items":{"type":"string"}},"ppe":{"type":"array","items":{"type":"string"}},"suggestedConsequence":{"type":"number"},"inherentRisk":{"type":"object","properties":{"likelihood":{"type":"number"},"consequence":{"type":"number"},"score":{"type":"number"},"rating":{"type":"string","enum":["low","medium","high","extreme"]},"label":{"type":"string"},"action":{"type":"string"}},"required":["likelihood","consequence","score","rating","label","action"]},"disclaimer":{"type":"string"}},"required":["hazardGroup","hazardDrivers","release","amount","approach","approachLabel","approachDescription","skinProtection","recommendations","ppe","suggestedConsequence","disclaimer"]},"status":{"type":"string","enum":["draft","approved","archived"]},"assessor":{"type":["string","null"]},"reviewDate":{"type":["string","null"]},"approvedAt":{"type":["string","null"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","product","location","title","task","frequency","amount","inherent","controls","residual","controlBanding","status","assessor","reviewDate","approvedAt","createdAt","updatedAt"]},"RiskAssessmentInput":{"type":"object","properties":{"productId":{"type":"string"},"locationId":{"type":["string","null"]},"title":{"type":"string","minLength":1,"maxLength":300},"task":{"type":["string","null"],"maxLength":5000},"frequency":{"type":["string","null"],"maxLength":100},"amount":{"type":"string","enum":["small","medium","large"]},"likelihood":{"type":"integer","minimum":1,"maximum":5},"consequence":{"type":"integer","minimum":1,"maximum":5},"controls":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["elimination","substitution","isolation","engineering","administrative","ppe"]},"description":{"type":"string","minLength":1,"maxLength":2000},"status":{"type":"string","enum":["existing","proposed","implemented"]}},"required":["type","description","status"]},"maxItems":50},"residualLikelihood":{"type":["integer","null"],"minimum":1,"maximum":5},"residualConsequence":{"type":["integer","null"],"minimum":1,"maximum":5},"status":{"type":"string","enum":["draft","approved","archived"]},"assessor":{"type":["string","null"],"maxLength":200},"reviewDate":{"type":["string","null"]}},"required":["productId","title","likelihood","consequence"]},"ControlBanding":{"type":"object","properties":{"hazardGroup":{"type":"string","enum":["A","B","C","D","E"]},"hazardDrivers":{"type":"array","items":{"type":"string"}},"release":{"type":"string","enum":["low","medium_volatility","medium_dustiness","high"]},"amount":{"type":"string","enum":["small","medium","large"]},"approach":{"type":"number"},"approachLabel":{"type":"string"},"approachDescription":{"type":"string"},"skinProtection":{"type":"boolean"},"recommendations":{"type":"array","items":{"type":"string"}},"ppe":{"type":"array","items":{"type":"string"}},"suggestedConsequence":{"type":"number"},"inherentRisk":{"type":"object","properties":{"likelihood":{"type":"number"},"consequence":{"type":"number"},"score":{"type":"number"},"rating":{"type":"string","enum":["low","medium","high","extreme"]},"label":{"type":"string"},"action":{"type":"string"}},"required":["likelihood","consequence","score","rating","label","action"]},"disclaimer":{"type":"string"}},"required":["hazardGroup","hazardDrivers","release","amount","approach","approachLabel","approachDescription","skinProtection","recommendations","ppe","suggestedConsequence","disclaimer"]},"RiskSuggestInput":{"type":"object","properties":{"productId":{"type":"string"},"hazardCodes":{"type":"array","items":{"type":"string"}},"physicalState":{"type":["string","null"],"enum":["solid","liquid","gas",null]},"amount":{"type":"string","enum":["small","medium","large"]},"release":{"type":"string","enum":["low","medium_volatility","medium_dustiness","high"]},"processTempC":{"type":"number"},"likelihood":{"type":"integer","minimum":1,"maximum":5}},"required":["amount"]},"RiskAssessmentUpdate":{"type":"object","properties":{"productId":{"type":"string"},"locationId":{"type":["string","null"]},"title":{"type":"string","minLength":1,"maxLength":300},"task":{"type":["string","null"],"maxLength":5000},"frequency":{"type":["string","null"],"maxLength":100},"amount":{"type":"string","enum":["small","medium","large"]},"likelihood":{"type":"integer","minimum":1,"maximum":5},"consequence":{"type":"integer","minimum":1,"maximum":5},"controls":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["elimination","substitution","isolation","engineering","administrative","ppe"]},"description":{"type":"string","minLength":1,"maxLength":2000},"status":{"type":"string","enum":["existing","proposed","implemented"]}},"required":["type","description","status"]},"maxItems":50},"residualLikelihood":{"type":["integer","null"],"minimum":1,"maximum":5},"residualConsequence":{"type":["integer","null"],"minimum":1,"maximum":5},"status":{"type":"string","enum":["draft","approved","archived"]},"assessor":{"type":["string","null"],"maxLength":200},"reviewDate":{"type":["string","null"]}}},"Dashboard":{"type":"object","properties":{"counts":{"type":"object","properties":{"products":{"type":"number"},"hazardous":{"type":"number"},"dangerousGoods":{"type":"number"},"sites":{"type":"number"},"locations":{"type":"number"},"inventoryItems":{"type":"number"},"riskAssessments":{"type":"number"},"sdsDrafts":{"type":"number"}},"required":["products","hazardous","dangerousGoods","sites","locations","inventoryItems","riskAssessments","sdsDrafts"]},"sdsCurrency":{"type":"object","properties":{"current":{"type":"number"},"due_soon":{"type":"number"},"expired":{"type":"number"},"unknown":{"type":"number"}},"required":["current","due_soon","expired","unknown"]},"byDgClass":{"type":"array","items":{"type":"object","properties":{"dgClass":{"type":"string"},"count":{"type":"number"}},"required":["dgClass","count"]}},"byPictogram":{"type":"array","items":{"type":"object","properties":{"pictogram":{"type":"string"},"count":{"type":"number"}},"required":["pictogram","count"]}},"riskByRating":{"type":"object","properties":{"low":{"type":"number"},"medium":{"type":"number"},"high":{"type":"number"},"extreme":{"type":"number"}},"required":["low","medium","high","extreme"]},"sites":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"placardRequired":{"type":"boolean"},"manifestRequired":{"type":"boolean"},"itemCount":{"type":"number"}},"required":["id","name","placardRequired","manifestRequired","itemCount"]}},"attention":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"severity":{"type":"string","enum":["info","warning","critical"]},"title":{"type":"string"},"detail":{"type":"string"},"href":{"type":["string","null"]}},"required":["kind","severity","title","detail","href"]}},"recentActivity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"actorType":{"type":"string","enum":["user","api_key","system"]},"actorName":{"type":["string","null"]},"action":{"type":"string"},"entityType":{"type":"string"},"entityId":{"type":["string","null"]},"summary":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","actorType","actorName","action","entityType","entityId","summary","createdAt"]}}},"required":["counts","sdsCurrency","byDgClass","byPictogram","riskByRating","sites","attention","recentActivity"]},"ClassifyResult":{"type":"object","properties":{"hazardCodes":{"type":"array","items":{"type":"string"}},"unknownCodes":{"type":"array","items":{"type":"string"}},"pictograms":{"type":"array","items":{"type":"string"}},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"hazardClasses":{"type":"array","items":{"type":"string"}},"isHazardous":{"type":"boolean"},"notes":{"type":"array","items":{"type":"string"}},"hazardStatements":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"text":{"type":"string"}},"required":["code","text"]}}},"required":["hazardCodes","unknownCodes","pictograms","signalWord","hazardClasses","isHazardous","notes","hazardStatements"]},"ClassifyInput":{"type":"object","properties":{"hazardCodes":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100}},"required":["hazardCodes"]},"PublicSds":{"type":"object","properties":{"product":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"synonyms":{"type":"array","items":{"type":"string"}},"productCode":{"type":["string","null"]},"supplierName":{"type":["string","null"]},"scope":{"type":"string","enum":["library","organization"]},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"pictograms":{"type":"array","items":{"type":"string"}},"hazardCodes":{"type":"array","items":{"type":"string"}},"isHazardous":{"type":"boolean"},"isDangerousGood":{"type":"boolean"},"dgClass":{"type":["string","null"]},"subsidiaryRisks":{"type":"array","items":{"type":"string"}},"unNumber":{"type":["string","null"]},"packingGroup":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]},"physicalState":{"type":["string","null"],"enum":["solid","liquid","gas",null]},"casNumbers":{"type":"array","items":{"type":"string"}},"sds":{"type":["object","null"],"properties":{"id":{"type":"string"},"status":{"type":"string"},"version":{"type":["string","null"]},"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"currency":{"type":"object","properties":{"status":{"type":"string","enum":["current","due_soon","expired","unknown"]},"reviewDue":{"type":["string","null"]},"daysRemaining":{"type":["number","null"]},"label":{"type":"string"}},"required":["status","reviewDue","daysRemaining","label"]}},"required":["id","status","version","issueDate","revisionDate","currency"]},"updatedAt":{"type":"string"},"description":{"type":["string","null"]},"precautionaryCodes":{"type":"array","items":{"type":"string"}},"properShippingName":{"type":["string","null"]},"flashPointC":{"type":["number","null"]},"boilingPointC":{"type":["number","null"]},"poisonsSchedule":{"type":["string","null"]},"reactiveGroups":{"type":"array","items":{"type":"string"}},"hazardStatements":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"text":{"type":"string"}},"required":["code","text"]}},"precautionaryStatements":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"text":{"type":"string"}},"required":["code","text"]}},"hazardClasses":{"type":"array","items":{"type":"string"}},"ingredients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"cas":{"type":["string","null"]},"concentration":{"type":["string","null"]},"concentrationMin":{"type":["number","null"]},"concentrationMax":{"type":["number","null"]},"hazardCodes":{"type":"array","items":{"type":"string"}},"exposureStandards":{"type":"array","items":{"type":"object","properties":{"substance":{"type":"string"},"cas":{"type":["string","null"]},"twaPpm":{"type":["number","null"]},"twaMgM3":{"type":["number","null"]},"stelPpm":{"type":["number","null"]},"stelMgM3":{"type":["number","null"]},"peakPpm":{"type":["number","null"]},"peakMgM3":{"type":["number","null"]},"notes":{"type":["string","null"]},"source":{"type":["string","null"]}},"required":["substance"]}}},"required":["id","name","cas","concentration","concentrationMin","concentrationMax","hazardCodes","exposureStandards"]}},"createdAt":{"type":"string"}},"required":["id","name","synonyms","productCode","supplierName","scope","signalWord","pictograms","hazardCodes","isHazardous","isDangerousGood","dgClass","subsidiaryRisks","unNumber","packingGroup","hazchemCode","physicalState","casNumbers","sds","updatedAt","description","precautionaryCodes","properShippingName","flashPointC","boilingPointC","poisonsSchedule","reactiveGroups","hazardStatements","precautionaryStatements","hazardClasses","ingredients","createdAt"]},"sds":{"type":"object","properties":{"id":{"type":"string"},"productId":{"type":"string"},"productName":{"type":"string"},"status":{"type":"string","enum":["processing","draft","published","superseded","failed"]},"version":{"type":["string","null"]},"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"language":{"type":"string"},"country":{"type":"string"},"authorName":{"type":["string","null"]},"source":{"type":"string","enum":["upload","library","authored","api"]},"file":{"type":["object","null"],"properties":{"name":{"type":["string","null"]},"size":{"type":["number","null"]},"mimeType":{"type":["string","null"]},"url":{"type":"string"}},"required":["name","size","mimeType","url"]},"sections":{"type":"object","properties":{"identification":{"type":["object","null"],"properties":{"productName":{"type":["string","null"]},"otherNames":{"type":["array","null"],"items":{"type":"string"}},"productCode":{"type":["string","null"]},"recommendedUse":{"type":["string","null"]},"restrictions":{"type":["string","null"]},"supplierName":{"type":["string","null"]},"supplierAddress":{"type":["string","null"]},"supplierPhone":{"type":["string","null"]},"supplierEmail":{"type":["string","null"]},"supplierWebsite":{"type":["string","null"]},"emergencyPhone":{"type":["string","null"]}}},"hazards":{"type":["object","null"],"properties":{"isHazardous":{"type":["boolean","null"]},"classifications":{"type":["array","null"],"items":{"type":"object","properties":{"hazardClass":{"type":"string"},"category":{"type":["string","null"]},"hazardCode":{"type":["string","null"]}},"required":["hazardClass"]}},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"pictograms":{"type":["array","null"],"items":{"type":"string"}},"hazardStatements":{"type":["array","null"],"items":{"type":"string"}},"precautionaryStatements":{"type":["array","null"],"items":{"type":"string"}},"otherHazards":{"type":["string","null"]}}},"composition":{"type":["object","null"],"properties":{"ingredients":{"type":["array","null"],"items":{"type":"object","properties":{"name":{"type":"string"},"cas":{"type":["string","null"]},"ec":{"type":["string","null"]},"concentration":{"type":["string","null"]},"concentrationMin":{"type":["number","null"]},"concentrationMax":{"type":["number","null"]},"hazardCodes":{"type":["array","null"],"items":{"type":"string"}}},"required":["name"]}},"notes":{"type":["string","null"]}}},"firstAid":{"type":["object","null"],"properties":{"inhalation":{"type":["string","null"]},"skin":{"type":["string","null"]},"eyes":{"type":["string","null"]},"ingestion":{"type":["string","null"]},"symptoms":{"type":["string","null"]},"immediateMedicalAttention":{"type":["string","null"]},"notesToPhysician":{"type":["string","null"]},"firstAidFacilities":{"type":["string","null"]}}},"fireFighting":{"type":["object","null"],"properties":{"suitableMedia":{"type":["string","null"]},"unsuitableMedia":{"type":["string","null"]},"specificHazards":{"type":["string","null"]},"advice":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]}}},"accidentalRelease":{"type":["object","null"],"properties":{"personalPrecautions":{"type":["string","null"]},"environmentalPrecautions":{"type":["string","null"]},"containment":{"type":["string","null"]},"cleanup":{"type":["string","null"]}}},"handlingStorage":{"type":["object","null"],"properties":{"handling":{"type":["string","null"]},"storage":{"type":["string","null"]},"incompatibleMaterials":{"type":["string","null"]}}},"exposureControls":{"type":["object","null"],"properties":{"exposureStandards":{"type":["array","null"],"items":{"type":"object","properties":{"substance":{"type":"string"},"cas":{"type":["string","null"]},"twaPpm":{"type":["number","null"]},"twaMgM3":{"type":["number","null"]},"stelPpm":{"type":["number","null"]},"stelMgM3":{"type":["number","null"]},"peakPpm":{"type":["number","null"]},"peakMgM3":{"type":["number","null"]},"notes":{"type":["string","null"]},"source":{"type":["string","null"]}},"required":["substance"]}},"biologicalLimits":{"type":["string","null"]},"engineeringControls":{"type":["string","null"]},"eyeProtection":{"type":["string","null"]},"handProtection":{"type":["string","null"]},"bodyProtection":{"type":["string","null"]},"respiratoryProtection":{"type":["string","null"]},"thermalHazards":{"type":["string","null"]}}},"physicalChemical":{"type":["object","null"],"properties":{"appearance":{"type":["string","null"]},"physicalState":{"type":["string","null"]},"colour":{"type":["string","null"]},"odour":{"type":["string","null"]},"odourThreshold":{"type":["string","null"]},"pH":{"type":["string","null"]},"meltingPoint":{"type":["string","null"]},"boilingPoint":{"type":["string","null"]},"boilingPointC":{"type":["number","null"]},"flashPoint":{"type":["string","null"]},"flashPointC":{"type":["number","null"]},"evaporationRate":{"type":["string","null"]},"flammability":{"type":["string","null"]},"explosiveLimits":{"type":["string","null"]},"vapourPressure":{"type":["string","null"]},"vapourDensity":{"type":["string","null"]},"relativeDensity":{"type":["string","null"]},"solubility":{"type":["string","null"]},"partitionCoefficient":{"type":["string","null"]},"autoIgnitionTemperature":{"type":["string","null"]},"decompositionTemperature":{"type":["string","null"]},"viscosity":{"type":["string","null"]},"other":{"type":["string","null"]}}},"stabilityReactivity":{"type":["object","null"],"properties":{"reactivity":{"type":["string","null"]},"chemicalStability":{"type":["string","null"]},"hazardousReactions":{"type":["string","null"]},"conditionsToAvoid":{"type":["string","null"]},"incompatibleMaterials":{"type":["string","null"]},"hazardousDecompositionProducts":{"type":["string","null"]}}},"toxicology":{"type":["object","null"],"properties":{"routesOfExposure":{"type":["string","null"]},"acuteToxicity":{"type":["string","null"]},"skinCorrosionIrritation":{"type":["string","null"]},"eyeDamageIrritation":{"type":["string","null"]},"sensitisation":{"type":["string","null"]},"mutagenicity":{"type":["string","null"]},"carcinogenicity":{"type":["string","null"]},"reproductiveToxicity":{"type":["string","null"]},"stotSingle":{"type":["string","null"]},"stotRepeated":{"type":["string","null"]},"aspiration":{"type":["string","null"]},"other":{"type":["string","null"]}}},"ecological":{"type":["object","null"],"properties":{"ecotoxicity":{"type":["string","null"]},"persistence":{"type":["string","null"]},"bioaccumulation":{"type":["string","null"]},"mobility":{"type":["string","null"]},"otherEffects":{"type":["string","null"]}}},"disposal":{"type":["object","null"],"properties":{"methods":{"type":["string","null"]},"containerDisposal":{"type":["string","null"]},"notes":{"type":["string","null"]}}},"transport":{"type":["object","null"],"properties":{"notDangerousGoods":{"type":["boolean","null"]},"unNumber":{"type":["string","null"]},"properShippingName":{"type":["string","null"]},"dgClass":{"type":["string","null"]},"subsidiaryRisks":{"type":["array","null"],"items":{"type":"string"}},"packingGroup":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]},"environmentalHazard":{"type":["boolean","null"]},"specialPrecautions":{"type":["string","null"]},"seaTransport":{"type":["string","null"]},"airTransport":{"type":["string","null"]}}},"regulatory":{"type":["object","null"],"properties":{"poisonsSchedule":{"type":["string","null"]},"inventoryListing":{"type":["string","null"]},"otherRegulations":{"type":["string","null"]}}},"otherInfo":{"type":["object","null"],"properties":{"issueDate":{"type":["string","null"]},"revisionDate":{"type":["string","null"]},"version":{"type":["string","null"]},"revisionNotes":{"type":["string","null"]},"abbreviations":{"type":["string","null"]},"references":{"type":["string","null"]},"disclaimer":{"type":["string","null"]}}}}},"extraction":{"type":["object","null"],"properties":{"method":{"type":"string"},"confidence":{"type":"number"},"warnings":{"type":"array","items":{"type":"string"}},"model":{"type":"string"},"error":{"type":"string"},"durationMs":{"type":"number"},"pages":{"type":"number"}},"required":["method"]},"currency":{"type":"object","properties":{"status":{"type":"string","enum":["current","due_soon","expired","unknown"]},"reviewDue":{"type":["string","null"]},"daysRemaining":{"type":["number","null"]},"label":{"type":"string"}},"required":["status","reviewDue","daysRemaining","label"]},"publishedAt":{"type":["string","null"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","productId","productName","status","version","issueDate","revisionDate","language","country","authorName","source","file","sections","extraction","currency","publishedAt","createdAt","updatedAt"]},"emergency":{"type":"object","properties":{"productName":{"type":"string"},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"hazards":{"type":"array","items":{"type":"string"}},"firstAid":{"type":"object","properties":{"inhalation":{"type":["string","null"]},"skin":{"type":["string","null"]},"eyes":{"type":["string","null"]},"ingestion":{"type":["string","null"]},"medical":{"type":["string","null"]}},"required":["inhalation","skin","eyes","ingestion","medical"]},"fire":{"type":"object","properties":{"media":{"type":["string","null"]},"unsuitable":{"type":["string","null"]},"hazards":{"type":["string","null"]},"hazchemCode":{"type":["string","null"]}},"required":["media","unsuitable","hazards","hazchemCode"]},"spill":{"type":"object","properties":{"precautions":{"type":["string","null"]},"containment":{"type":["string","null"]},"cleanup":{"type":["string","null"]}},"required":["precautions","containment","cleanup"]},"ppe":{"type":"object","properties":{"eyes":{"type":["string","null"]},"hands":{"type":["string","null"]},"body":{"type":["string","null"]},"respiratory":{"type":["string","null"]}},"required":["eyes","hands","body","respiratory"]},"emergencyPhone":{"type":["string","null"]},"poisonsInformation":{"type":"string"},"transport":{"type":["object","null"],"properties":{"unNumber":{"type":["string","null"]},"dgClass":{"type":["string","null"]},"packingGroup":{"type":["string","null"]}},"required":["unNumber","dgClass","packingGroup"]}},"required":["productName","signalWord","hazards","firstAid","fire","spill","ppe","emergencyPhone","poisonsInformation","transport"]},"organization":{"type":["object","null"],"properties":{"name":{"type":"string"}},"required":["name"]}},"required":["product","sds","emergency","organization"]},"PublicLocation":{"type":"object","properties":{"organization":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"site":{"type":"object","properties":{"name":{"type":"string"},"address":{"type":["string","null"]}},"required":["name","address"]},"location":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"description":{"type":["string","null"]}},"required":["name","type","description"]},"items":{"type":"array","items":{"type":"object","properties":{"productName":{"type":"string"},"signalWord":{"type":["string","null"],"enum":["Danger","Warning",null]},"pictograms":{"type":"array","items":{"type":"string"}},"dgClass":{"type":["string","null"]},"unNumber":{"type":["string","null"]},"quantity":{"type":"string"},"sdsUrl":{"type":["string","null"]}},"required":["productName","signalWord","pictograms","dgClass","unNumber","quantity","sdsUrl"]}}},"required":["organization","site","location","items"]}},"parameters":{}},"paths":{"/v1/auth/signup":{"post":{"tags":["Auth"],"summary":"Create an account and organisation","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInput"}}}},"responses":{"201":{"description":"Signed up","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/auth/login":{"post":{"tags":["Auth"],"summary":"Sign in","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginInput"}}}},"responses":{"200":{"description":"Signed in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"description":"Authentication required","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/auth/logout":{"post":{"tags":["Auth"],"summary":"Sign out","responses":{"204":{"description":"No content"}}}},"/v1/auth/me":{"get":{"tags":["Auth"],"summary":"Current user and organisation","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Current session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"description":"Authentication required","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/auth/switch-org":{"post":{"tags":["Auth"],"summary":"Switch the active organisation","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orgId":{"type":"string"}},"required":["orgId"]}}}},"responses":{"200":{"description":"Switched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/org":{"get":{"tags":["Organisation"],"summary":"Get organisation","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Organisation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"401":{"description":"Authentication required","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"tags":["Organisation"],"summary":"Update organisation","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrganizationInput"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/org/members":{"get":{"tags":["Organisation"],"summary":"List members","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Members","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Member"}}},"required":["data"]}}}}}},"post":{"tags":["Organisation"],"summary":"Add a member","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberInput"}}}},"responses":{"201":{"description":"Added","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberResult"}}}},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/org/members/{userId}":{"patch":{"tags":["Organisation"],"summary":"Change a member's role","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["owner","admin","editor","viewer"]}},"required":["role"]}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Member"}}}},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["Organisation"],"summary":"Remove a member","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/api-keys":{"get":{"tags":["API keys"],"summary":"List API keys","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"API keys","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}}},"required":["data"]}}}},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"tags":["API keys"],"summary":"Create an API key (the key is returned once)","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyInput"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedApiKey"}}}},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/api-keys/{id}":{"delete":{"tags":["API keys"],"summary":"Revoke an API key","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"No content"},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhooks":{"get":{"tags":["Webhooks"],"summary":"List webhooks","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Webhooks","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}}},"required":["data"]}}}}}},"post":{"tags":["Webhooks"],"summary":"Create a webhook (the signing secret is returned once)","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookInput"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedWebhook"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhooks/{id}":{"patch":{"tags":["Webhooks"],"summary":"Update a webhook","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdate"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["Webhooks"],"summary":"Delete a webhook","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"No content"},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhooks/{id}/deliveries":{"get":{"tags":["Webhooks"],"summary":"Recent deliveries","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Deliveries","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}},"required":["data"]}}}}}}},"/v1/webhooks/{id}/test":{"post":{"tags":["Webhooks"],"summary":"Send a test event","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"202":{"description":"Queued","content":{"application/json":{"schema":{"type":"object","properties":{"deliveryId":{"type":"string"}},"required":["deliveryId"]}}}}}}},"/v1/audit-events":{"get":{"tags":["Operations"],"summary":"Activity log","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string"},"required":false,"name":"entityType","in":"query"}],"responses":{"200":{"description":"Audit events","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AuditEvent"}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"]}}}}}}},"/v1/products":{"get":{"tags":["Products"],"summary":"Search products (chemicals)","description":"Full-text and fuzzy search across names, synonyms, product codes, suppliers, CAS numbers and UN numbers.","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"q","in":"query"},{"schema":{"type":"string","enum":["all","library","organization","mine"]},"required":false,"name":"scope","in":"query"},{"schema":{"type":"string"},"required":false,"name":"dgClass","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"hazardous","in":"query"},{"schema":{"type":"string"},"required":false,"name":"pictogram","in":"query"},{"schema":{"type":"string","enum":["current","due_soon","expired","unknown"]},"required":false,"name":"sdsStatus","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Products","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProductSummary"}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"]}}}},"401":{"description":"Authentication required","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"tags":["Products"],"summary":"Create a private product","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductInput"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}}},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/products/{id}":{"get":{"tags":["Products"],"summary":"Get a product","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Product","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"tags":["Products"],"summary":"Update a product you own","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductUpdate"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}}},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["Products"],"summary":"Archive a product you own","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/products/{id}/library":{"put":{"tags":["Products"],"summary":"Add to My chemicals","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"No content"},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["Products"],"summary":"Remove from My chemicals","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"No content"},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/products/{id}/sds":{"get":{"tags":["SDS"],"summary":"All SDS versions for a product","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Versions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SdsSummary"}}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/products/{id}/sds/current":{"get":{"tags":["SDS"],"summary":"Current published SDS","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"SDS","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdsDocument"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/products/{id}/sds/current/sections/{section}":{"get":{"tags":["SDS"],"summary":"One section (1–16) of the current SDS","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":16,"example":4},"required":true,"name":"section","in":"path"}],"responses":{"200":{"description":"Section","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdsSection"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/products/{id}/emergency":{"get":{"tags":["Products"],"summary":"Emergency summary (first aid, fire, spill, PPE)","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Emergency information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmergencySummary"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/products/{id}/label":{"get":{"tags":["Products"],"summary":"GHS label content","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","enum":["large","medium","small"]},"required":false,"name":"size","in":"query"}],"responses":{"200":{"description":"Label","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Label"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/products/{id}/locations":{"get":{"tags":["Inventory"],"summary":"Where a product is stored","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Inventory items","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InventoryItem"}}},"required":["data"]}}}}}}},"/v1/sds/upload":{"post":{"tags":["SDS"],"summary":"Upload an SDS (PDF or text) for extraction","description":"Returns 202 with the document in `processing` status. Poll GET /v1/sds/{id} or subscribe to the `sds.processed` webhook.","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"PDF file"},"text":{"type":"string","description":"SDS text, if not uploading a PDF"},"productId":{"type":"string","description":"Attach as a new version of one of your products"}}}}}},"responses":{"202":{"description":"Accepted for processing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdsDocument"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"File too large"},"415":{"description":"Not a PDF"},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sds":{"get":{"tags":["SDS"],"summary":"List your organisation's SDS documents","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["processing","draft","published","superseded","failed"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Documents","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SdsSummary"}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"]}}}}}}},"/v1/sds/review-due":{"get":{"tags":["SDS"],"summary":"Products whose SDS is missing, expired or due for review","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":["integer","null"],"minimum":0,"maximum":3650},"required":false,"name":"withinDays","in":"query"}],"responses":{"200":{"description":"Products","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProductSummary"}}},"required":["data"]}}}}}}},"/v1/sds/{id}":{"get":{"tags":["SDS"],"summary":"Get an SDS document","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"SDS","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdsDocument"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"tags":["SDS"],"summary":"Edit extracted SDS data","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSdsInput"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdsDocument"}}}},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["SDS"],"summary":"Delete a draft or failed SDS","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"No content"},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sds/{id}/publish":{"post":{"tags":["SDS"],"summary":"Publish a reviewed SDS as the current version","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishSdsInput"}}}},"responses":{"200":{"description":"Published","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdsDocument"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sds/{id}/reprocess":{"post":{"tags":["SDS"],"summary":"Re-run extraction","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"202":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdsDocument"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sds/{id}/sections/{section}":{"get":{"tags":["SDS"],"summary":"One section (1–16) of an SDS document","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":16,"example":4},"required":true,"name":"section","in":"path"}],"responses":{"200":{"description":"Section","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdsSection"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sds/{id}/share":{"post":{"tags":["SDS"],"summary":"Get a public share link","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Share link","content":{"application/json":{"schema":{"type":"object","properties":{"shareUrl":{"type":"string"}},"required":["shareUrl"]}}}},"403":{"description":"Forbidden — missing scope or role","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sds/{id}/pdf":{"get":{"tags":["SDS"],"summary":"Printable PDF generated from the structured SDS","description":"Available for every SDS, including reference-library records that have no supplier PDF.","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"PDF","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sds/{id}/file":{"get":{"tags":["SDS"],"summary":"Download the original PDF","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"PDF","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sites":{"get":{"tags":["Sites & locations"],"summary":"List sites","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Sites","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Site"}}},"required":["data"]}}}}}},"post":{"tags":["Sites & locations"],"summary":"Create a site","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteInput"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Site"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sites/{id}":{"get":{"tags":["Sites & locations"],"summary":"Get a site","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Site","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Site"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"tags":["Sites & locations"],"summary":"Update a site","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteUpdate"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Site"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["Sites & locations"],"summary":"Delete an empty site","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"No content"},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sites/{id}/locations":{"get":{"tags":["Sites & locations"],"summary":"List locations on a site","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Locations","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Location"}}},"required":["data"]}}}}}},"post":{"tags":["Sites & locations"],"summary":"Create a storage location","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationInput"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Location"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sites/{id}/register":{"get":{"tags":["Registers & compliance"],"summary":"Hazardous chemicals register","description":"Register of hazardous chemicals at the site (WHS Regulations r346). Add `?format=csv` for a spreadsheet.","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","enum":["json","csv"]},"required":false,"name":"format","in":"query"}],"responses":{"200":{"description":"Register","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Register"}},"text/csv":{"schema":{"type":"string"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sites/{id}/thresholds":{"get":{"tags":["Registers & compliance"],"summary":"Schedule 11 placard and manifest screening","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Threshold report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThresholdReport"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/compatibility":{"post":{"tags":["Registers & compliance"],"summary":"Check storage compatibility","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompatibilityInput"}}}},"responses":{"200":{"description":"Compatibility","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompatibilityResult"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/locations/{id}":{"get":{"tags":["Sites & locations"],"summary":"Get a location","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Location","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Location"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"tags":["Sites & locations"],"summary":"Update a location","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationUpdate"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Location"}}}}}},"delete":{"tags":["Sites & locations"],"summary":"Delete an empty location","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"No content"},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/locations/{id}/compatibility":{"get":{"tags":["Registers & compliance"],"summary":"Compatibility of everything stored at a location","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Compatibility","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompatibilityResult"}}}}}}},"/v1/locations/{id}/qr":{"get":{"tags":["Sites & locations"],"summary":"QR code (SVG) linking to the public location page","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"SVG","content":{"image/svg+xml":{"schema":{"type":"string"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/inventory":{"get":{"tags":["Inventory"],"summary":"List inventory","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"siteId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"locationId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"productId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"q","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Inventory","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InventoryItem"}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"]}}}}}},"post":{"tags":["Inventory"],"summary":"Add stock to a location","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryInput"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryItem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/inventory/{id}":{"get":{"tags":["Inventory"],"summary":"Get an inventory item","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryItem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"tags":["Inventory"],"summary":"Update quantity or details","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryUpdate"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryItem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["Inventory"],"summary":"Remove an inventory item","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"No content"},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/risk-assessments":{"get":{"tags":["Risk assessments"],"summary":"List risk assessments","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"productId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"locationId","in":"query"},{"schema":{"type":"string","enum":["draft","approved","archived"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Risk assessments","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RiskAssessment"}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"]}}}}}},"post":{"tags":["Risk assessments"],"summary":"Create a risk assessment","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskAssessmentInput"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskAssessment"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/risk-assessments/suggest":{"post":{"tags":["Risk assessments"],"summary":"Suggest controls by control banding","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskSuggestInput"}}}},"responses":{"200":{"description":"Suggested controls","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ControlBanding"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/risk-assessments/{id}":{"get":{"tags":["Risk assessments"],"summary":"Get a risk assessment","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Risk assessment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskAssessment"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"tags":["Risk assessments"],"summary":"Update or approve a risk assessment","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskAssessmentUpdate"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskAssessment"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["Risk assessments"],"summary":"Delete a risk assessment","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","example":"prd_0123456789abcdef"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"No content"},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/dashboard":{"get":{"tags":["Operations"],"summary":"Compliance dashboard","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}}}}}},"/v1/reference/hazard-statements":{"get":{"tags":["Reference"],"summary":"GHS hazard statements (incl. Australian AUH)","responses":{"200":{"description":"Hazard statements","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["data"]}}}}}}},"/v1/reference/precautionary-statements":{"get":{"tags":["Reference"],"summary":"GHS precautionary statements","responses":{"200":{"description":"Precautionary statements","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["data"]}}}}}}},"/v1/reference/pictograms":{"get":{"tags":["Reference"],"summary":"GHS pictograms with SVG","responses":{"200":{"description":"Pictograms","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["data"]}}}}}}},"/v1/reference/dg-classes":{"get":{"tags":["Reference"],"summary":"Dangerous goods classes and divisions","responses":{"200":{"description":"DG classes","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["data"]}}}}}}},"/v1/reference/reactive-groups":{"get":{"tags":["Reference"],"summary":"Reactive groups used by the compatibility checker","responses":{"200":{"description":"Reactive groups","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"description":{"type":"string"}},"required":["code","description"]}}},"required":["data"]}}}}}}},"/v1/reference/segregation-chart":{"get":{"tags":["Reference"],"summary":"Class-by-class segregation guidance","responses":{"200":{"description":"Chart","content":{"application/json":{"schema":{"type":"object","properties":{"classes":{"type":"array","items":{"type":"string"}},"codes":{"type":"array","items":{"type":"array","items":{"type":"string"}}},"cells":{"type":"array","items":{"type":"array","items":{"type":"string"}}},"guidance":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"guidance":{"type":"string"}},"required":["label","guidance"]}}},"required":["classes","codes","cells","guidance"]}}}}}}},"/v1/reference/classify":{"post":{"tags":["Reference"],"summary":"Derive pictograms and signal word from hazard codes","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyInput"}}}},"responses":{"200":{"description":"Classification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyResult"}}}},"422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/public/sds/{token}":{"get":{"tags":["Public"],"summary":"Public SDS view (QR code / share link)","parameters":[{"schema":{"type":"string","minLength":8,"maxLength":64},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"SDS","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicSds"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/public/locations/{token}":{"get":{"tags":["Public"],"summary":"Public list of chemicals at a location","parameters":[{"schema":{"type":"string","minLength":8,"maxLength":64},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Location","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLocation"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/public/sds/{token}/file":{"get":{"tags":["Public"],"summary":"Public PDF download","parameters":[{"schema":{"type":"string","minLength":8,"maxLength":64},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"PDF","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/public/sds/{token}/pdf":{"get":{"tags":["Public"],"summary":"Public printable PDF generated from the structured SDS","parameters":[{"schema":{"type":"string","minLength":8,"maxLength":64},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"PDF","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"webhooks":{}}