{"openapi":"3.1.0","info":{"title":"Quantag Public API","version":"1.0.0","summary":"Read-only HVAC reference data for AI agents and integrators.","description":"Quantag's public surface exposes verified HVAC reference data — the manufacturer registry, verified equipment error codes, and the verified parts catalog. The full diagnostic platform (scans, equipment profiles, service history, AI diagnosis chains) is gated behind customer accounts and is not part of this API. To integrate as a partner platform, contact Aaron@sentriuslabs.com.","contact":{"name":"Quantag (Sentrius Labs)","email":"Aaron@sentriuslabs.com","url":"https://quantag.ca"},"license":{"name":"Proprietary — read-only public access","url":"https://quantag.ca/terms"}},"servers":[{"url":"https://quantag.ca","description":"Production"}],"tags":[{"name":"Reference","description":"Verified HVAC reference data — safe for agents to cite."},{"name":"Discovery","description":"Endpoints describing the API itself."}],"paths":{"/api/public/manufacturers":{"get":{"tags":["Reference"],"summary":"List verified HVAC manufacturers","description":"Returns every manufacturer Quantag treats as a verified anchor for equipment research. Use the slug as the canonical identifier when calling other endpoints.","responses":{"200":{"description":"Verified manufacturer registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturerList"}}}}}}},"/api/public/error-codes":{"get":{"tags":["Reference"],"summary":"Look up verified error codes","description":"Search the verified error-code library by manufacturer (required), with optional code, model, and limit filters. Codes are normalized for matching: 'E-3', 'E3', and 'e3' are all equivalent.","parameters":[{"name":"manufacturer","in":"query","required":true,"schema":{"type":"string"},"example":"Carrier"},{"name":"code","in":"query","required":false,"schema":{"type":"string"},"description":"Error code as displayed on the equipment (case/punctuation tolerant).","example":"33"},{"name":"model","in":"query","required":false,"schema":{"type":"string"},"description":"Optional model number. Codes scoped to a model_pattern only return when the model matches."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"Matching error codes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorCodeList"}}}},"400":{"description":"Missing required parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/parts":{"get":{"tags":["Reference"],"summary":"Look up verified parts","description":"Search the verified parts catalog by manufacturer (required), with optional part_number, part_type, model, and limit filters. Part numbers are normalized for matching.","parameters":[{"name":"manufacturer","in":"query","required":true,"schema":{"type":"string"},"example":"Trane"},{"name":"part_number","in":"query","required":false,"schema":{"type":"string"}},{"name":"part_type","in":"query","required":false,"schema":{"type":"string"},"description":"e.g. 'igniter', 'capacitor', 'flame_sensor'"},{"name":"model","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"Matching parts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartList"}}}},"400":{"description":"Missing required parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/openapi":{"get":{"tags":["Discovery"],"summary":"Return this OpenAPI 3.1 specification","responses":{"200":{"description":"OpenAPI document","content":{"application/json":{}}}}}},"/api/mcp":{"get":{"tags":["Discovery"],"summary":"MCP server discovery doc","description":"Returns a small JSON document describing Quantag's MCP server (Streamable HTTP transport, stateless). The MCP traffic itself is POST JSON-RPC 2.0; this endpoint does not follow OpenAPI semantics for that. See https://quantag.ca/llms.txt for the full tool list.","responses":{"200":{"description":"MCP discovery document","content":{"application/json":{}}}}}}},"components":{"schemas":{"Manufacturer":{"type":"object","required":["slug","name"],"properties":{"slug":{"type":"string","example":"carrier"},"name":{"type":"string","example":"Carrier"},"domain":{"type":["string","null"],"example":"carrier.com"},"aliases":{"type":"array","items":{"type":"string"}}}},"ManufacturerList":{"type":"object","required":["count","manufacturers"],"properties":{"count":{"type":"integer"},"manufacturers":{"type":"array","items":{"$ref":"#/components/schemas/Manufacturer"}}}},"ErrorCode":{"type":"object","required":["manufacturer","code","description"],"properties":{"manufacturer":{"type":"string"},"model_pattern":{"type":["string","null"]},"code":{"type":"string"},"description":{"type":"string"},"likely_cause":{"type":["string","null"]},"reset_procedure":{"type":["string","null"]},"severity":{"type":["string","null"],"enum":["lockout","warning","info",null]},"source_url":{"type":["string","null"]}}},"ErrorCodeList":{"type":"object","required":["count","results"],"properties":{"query":{"type":"object"},"count":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ErrorCode"}}}},"Part":{"type":"object","required":["manufacturer","part_name","part_number"],"properties":{"manufacturer":{"type":"string"},"model_pattern":{"type":["string","null"]},"equipment_type":{"type":["string","null"]},"part_name":{"type":"string"},"part_number":{"type":"string"},"part_type":{"type":["string","null"]},"description":{"type":["string","null"]},"cross_references":{"type":"array","items":{"type":"string"}},"source_url":{"type":["string","null"]}}},"PartList":{"type":"object","required":["count","results"],"properties":{"query":{"type":"object"},"count":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Part"}}}},"Error":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","example":"missing_parameter"},"message":{"type":"string"}}}}},"x-rate-limits":{"default":{"window_seconds":60,"requests":60,"response_headers":["X-RateLimit-Limit","X-RateLimit-Remaining","X-RateLimit-Reset","Retry-After"]}}}