{"openapi":"3.1.0","info":{"title":"FixTools Public API","version":"1.0.0","description":"Read-only discovery for FixTools tools, public pages, curated open models, and Claude developer resources.","termsOfService":"https://www.fixtools.io/terms","contact":{"url":"https://www.fixtools.io/contact"}},"servers":[{"url":"https://www.fixtools.io"}],"tags":[{"name":"Discovery"},{"name":"Tools"},{"name":"Models"},{"name":"Claude"},{"name":"Pages"},{"name":"Search"},{"name":"Retrieval"},{"name":"Insights"}],"paths":{"/api":{"get":{"tags":["Discovery"],"summary":"Discover API resources","responses":{"200":{"description":"API discovery document"}}}},"/api/v1/tools":{"get":{"tags":["Tools"],"summary":"List embeddable FixTools utilities","parameters":[{"name":"q","in":"query","description":"Case-insensitive search text, limited to 100 characters.","schema":{"type":"string","maxLength":100}},{"name":"category","in":"query","description":"Exact category filter where supported.","schema":{"type":"string","maxLength":50}},{"name":"locale","in":"query","description":"Locale filter: en, es, fr, de, pt, or id.","schema":{"type":"string","enum":["en","es","fr","de","pt","id"]}},{"name":"limit","in":"query","description":"Number of records to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","description":"Zero-based result offset.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"$ref":"#/components/responses/ListResponse"}}}},"/api/v1/models":{"get":{"tags":["Models"],"summary":"List curated open models","parameters":[{"name":"q","in":"query","description":"Case-insensitive search text, limited to 100 characters.","schema":{"type":"string","maxLength":100}},{"name":"category","in":"query","description":"Exact category filter where supported.","schema":{"type":"string","maxLength":50}},{"name":"limit","in":"query","description":"Number of records to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","description":"Zero-based result offset.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"$ref":"#/components/responses/ListResponse"}}}},"/api/v1/claude":{"get":{"tags":["Claude"],"summary":"List Claude developer tools and guides","parameters":[{"name":"q","in":"query","description":"Case-insensitive search text, limited to 100 characters.","schema":{"type":"string","maxLength":100}},{"name":"limit","in":"query","description":"Number of records to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","description":"Zero-based result offset.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"$ref":"#/components/responses/ListResponse"}}}},"/api/v1/pages":{"get":{"tags":["Pages"],"summary":"List canonical public FixTools pages","parameters":[{"name":"q","in":"query","description":"Case-insensitive search text, limited to 100 characters.","schema":{"type":"string","maxLength":100}},{"name":"category","in":"query","description":"Exact category filter where supported.","schema":{"type":"string","maxLength":50}},{"name":"locale","in":"query","description":"Locale filter: en, es, fr, de, pt, or id.","schema":{"type":"string","enum":["en","es","fr","de","pt","id"]}},{"name":"limit","in":"query","description":"Number of records to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","description":"Zero-based result offset.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"$ref":"#/components/responses/ListResponse"}}}},"/api/v1/search":{"get":{"tags":["Search"],"summary":"Search across every public catalog","parameters":[{"name":"q","in":"query","description":"Case-insensitive search text, limited to 100 characters.","schema":{"type":"string","maxLength":100}},{"name":"limit","in":"query","description":"Number of records to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","description":"Zero-based result offset.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"$ref":"#/components/responses/ListResponse"}}}}},"/api/v1/retrieve":{"get":{"tags":["Retrieval"],"summary":"Retrieve ranked, compact, citation-preserving context","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":160}},{"name":"types","in":"query","description":"Comma-separated tool, model, claude, and page filters.","schema":{"type":"string","example":"tool,model"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":20,"default":8}},{"name":"maxChars","in":"query","schema":{"type":"integer","minimum":1000,"maximum":30000,"default":12000}}],"responses":{"200":{"description":"Ranked context, summary, citations, and compact records."}}}},"/api/v1/insights":{"get":{"tags":["Insights"],"summary":"Summarize public catalog coverage and composition","responses":{"200":{"description":"Public catalog counts, distributions, and retrieval entry points."}}}},"components":{"responses":{"ListResponse":{"description":"A bounded, paginated API response.","content":{"application/json":{"schema":{"type":"object","required":["apiVersion","updatedAt","data","pagination"],"properties":{"apiVersion":{"type":"string","const":"v1"},"updatedAt":{"type":"string","format":"date"},"resource":{"type":"string"},"data":{"type":"array","items":{"type":"object"}},"pagination":{"type":"object","required":["total","limit","offset","hasMore"],"properties":{"total":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0},"hasMore":{"type":"boolean"}}}}}}}}}}}