{"openapi":"3.1.0","info":{"title":"OpenTool Public API","version":"1.0.0","description":"Machine-readable endpoints for OpenTool (https://opentool.tech), a free collection of ~300 browser-based utilities for PDFs, images, conversions and calculations. All tool pages are plain server-rendered HTML and can also be fetched as markdown with `Accept: text/markdown`, or directly via `/markdown/<path>`.","contact":{"name":"OpenTool Support","email":"support@opentool.tech","url":"https://opentool.tech/contact"}},"servers":[{"url":"https://opentool.tech","description":"Production"}],"paths":{"/":{"get":{"summary":"Site home","description":"Lists every category and popular tools.","operationId":"getHome","parameters":[{"name":"Accept","in":"header","required":false,"description":"Send text/markdown to receive the markdown representation instead of HTML.","schema":{"type":"string"}}],"responses":{"200":{"description":"Markdown home page with all categories and links.","headers":{"Vary":{"schema":{"type":"string","example":"Accept"}}},"content":{"text/html":{},"text/markdown":{}}}}}},"/tools/{category}/{toolId}":{"get":{"summary":"A specific tool page","description":"One page per tool; ready to use in a browser with no onboarding.","operationId":"getTool","parameters":[{"name":"Accept","in":"header","required":false,"description":"Send text/markdown to receive the markdown representation instead of HTML.","schema":{"type":"string"}},{"name":"category","in":"path","required":true,"schema":{"type":"string","examples":["pdf","image","convert","utility","finance"]},"description":"Tool category id"},{"name":"toolId","in":"path","required":true,"schema":{"type":"string","example":"merge"},"description":"Tool id"}],"responses":{"200":{"description":"Tool page as HTML or markdown.","headers":{"Vary":{"schema":{"type":"string","example":"Accept"}}},"content":{"text/html":{},"text/markdown":{}}}}}},"/blog/{slug}":{"get":{"summary":"Blog article","operationId":"getBlogPost","parameters":[{"name":"Accept","in":"header","required":false,"description":"Send text/markdown to receive the markdown representation instead of HTML.","schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Article as HTML or markdown.","headers":{"Vary":{"schema":{"type":"string","example":"Accept"}}},"content":{"text/html":{},"text/markdown":{}}}}}},"/markdown/{path}":{"get":{"summary":"Markdown representation of any page","description":"Always returns text/markdown regardless of Accept header. Unknown paths return HTTP 404 with a markdown body listing recovery links (/llms.txt, /sitemap.xml, /developers).","operationId":"getMarkdown","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string"},"description":"Page path without leading slash, e.g. tools/pdf/merge or blog/<slug>"}],"responses":{"200":{"description":"text/markdown body","headers":{"Vary":{"schema":{"type":"string","example":"Accept"}}}},"404":{"description":"Unknown path; markdown body with recovery links","headers":{"Vary":{"schema":{"type":"string","example":"Accept"}}}}}}},"/api/fx":{"get":{"summary":"Live currency exchange rates","description":"Latest daily reference rates for ~30 currencies (ECB data). Used by /currency.","operationId":"getFx","parameters":[{"name":"base","in":"query","required":false,"schema":{"type":"string","default":"USD","example":"EUR"}}],"responses":{"200":{"description":"Rates keyed by currency code","content":{"application/json":{"schema":{"type":"object","properties":{"rates":{"type":"object","additionalProperties":{"type":"number"}},"updatedAt":{"type":"integer","description":"Unix ms"}},"required":["rates","updatedAt"]}}}},"502":{"description":"Upstream unavailable"}}}},"/llms.txt":{"get":{"summary":"Site guide for LLMs","description":"llmstxt.org-format guide: what OpenTool is, when to use it, key URLs.","operationId":"getLlmsTxt","responses":{"200":{"description":"text/markdown guide","content":{"text/markdown":{}}}}}},"/openapi.json":{"get":{"summary":"This document","operationId":"getOpenApi","responses":{"200":{"description":"application/json"}}}},"/sitemap.xml":{"get":{"summary":"Full URL list","operationId":"getSitemap","responses":{"200":{"description":"XML sitemap of every public page"}}}},"/robots.txt":{"get":{"summary":"Crawl policy","operationId":"getRobots","responses":{"200":{"description":"robots.txt"}}}}}}