{"openapi":"3.1.0","info":{"title":"Convertto Tools API","version":"1.0.0","summary":"330 browser tools, callable over HTTP.","description":"Free online converters and tools that run entirely in your browser. No uploads, no sign-up, no limits.\n\nThis API runs the same tool functions the website runs. Each tool is a pure function of its inputs: no network access, no file system, no stored state — so a call has no side effects and is safe to retry.\n\n### What is not here\n\nTools that need a browser (canvas, media devices, WebAssembly), that take file uploads, or that produce binary files are excluded rather than exposed and left to fail. Their web pages still work.\n\n### Reading a tool schema at runtime\n\n`GET /api/v1/tools` returns the whole callable catalogue with an `inputSchema` for each entry. `GET /api/v1/tools/{slug}` returns one tool, its input schema and its output schema. This document describes the same thing statically, one operation per tool.\n\n### MCP\n\nThe same catalogue is callable over the Model Context Protocol at `https://convertto.tech/api/mcp` (Streamable HTTP, stateless). The `inputSchema` an MCP client receives is generated by the same code as the request bodies below.\n\n### Limits\n\nRequest body 256 KB; one run 5000 ms; response 1024 KB; 60 requests per minute per client (best effort).","contact":{"name":"Convertto","email":"hello@convertto.tech","url":"https://convertto.tech"},"license":{"name":"Free to use","url":"https://convertto.tech/terms"}},"servers":[{"url":"https://convertto.tech","description":"Production"}],"tags":[{"name":"catalogue","description":"Discovery."},{"name":"mcp","description":"Model Context Protocol."},{"name":"a11y","description":"7 tools."},{"name":"ai","description":"5 tools."},{"name":"calculators","description":"46 tools."},{"name":"color","description":"9 tools."},{"name":"crypto","description":"12 tools."},{"name":"css","description":"31 tools."},{"name":"data","description":"31 tools."},{"name":"datetime","description":"17 tools."},{"name":"developer","description":"29 tools."},{"name":"encoding","description":"16 tools."},{"name":"health","description":"8 tools."},{"name":"image","description":"1 tools."},{"name":"media","description":"5 tools."},{"name":"network","description":"1 tools."},{"name":"number","description":"11 tools."},{"name":"random","description":"9 tools."},{"name":"samples","description":"12 tools."},{"name":"seo","description":"10 tools."},{"name":"social","description":"4 tools."},{"name":"text","description":"44 tools."},{"name":"unit","description":"22 tools."}],"externalDocs":{"description":"Tool index for language models","url":"https://convertto.tech/llms.txt"},"paths":{"/api/v1/tools":{"get":{"operationId":"listTools","summary":"List every callable tool","description":"The catalogue, with the JSON Schema for each tool's input. Filterable by category, slug list or free text.","tags":["catalogue"],"parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated category names."},{"name":"tools","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated tool slugs."},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Free-text match on slug, title, tags and keywords."},{"name":"schema","in":"query","required":false,"schema":{"type":"string","enum":["0","1"]},"description":"Set to 0 to omit input schemas."}],"responses":{"200":{"description":"The callable catalogue.","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"string"},"total":{"type":"integer"},"count":{"type":"integer"},"categories":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"}}}},"tools":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["version","tools"]}}}}}}},"/api/mcp":{"post":{"operationId":"mcp","summary":"Model Context Protocol endpoint (Streamable HTTP)","description":"JSON-RPC 2.0 over HTTP. Supports `initialize`, `ping`, `tools/list` and `tools/call`. Stateless — no session id is issued. GET returns 405 because no server-initiated SSE stream is offered.","tags":["mcp"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"A JSON-RPC 2.0 request object.","additionalProperties":true}}}},"responses":{"200":{"description":"JSON-RPC response.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"202":{"description":"Accepted — the message was a notification, so there is nothing to return."},"400":{"description":"Malformed JSON-RPC, or an unsupported MCP-Protocol-Version header."}}}},"/api/v1/tools/acronym-generator":{"post":{"operationId":"runAcronymGenerator","summary":"Acronym Generator","description":"An acronym generator takes the first letter of each significant word in a phrase and joins them. Small connecting words such as \"of\" and \"the\" are skipped by default, since real acronyms almost always drop them — PDF comes from Portable Document Format, not PDoF.\n\nTool page: https://convertto.tech/t/acronym-generator","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcronymGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/add-line-numbers":{"post":{"operationId":"runAddLineNumbers","summary":"Add Line Numbers","description":"To add line numbers, paste your text above and choose the starting number, the separator style and whether numbers should be zero-padded to equal width. Numbering is applied to every line including blank ones, so line positions stay accurate.\n\nTool page: https://convertto.tech/t/add-line-numbers","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddLineNumbersInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/age-calculator":{"post":{"operationId":"runAgeCalculator","summary":"Age Calculator","description":"To calculate age, enter a date of birth and optionally a reference date. The result gives exact years, months and days, using real calendar month lengths rather than a 30-day approximation, plus totals in weeks, days and hours and a countdown to the next birthday.\n\nTool page: https://convertto.tech/t/age-calculator","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgeCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/agenda-timer":{"post":{"operationId":"runAgendaTimer","summary":"Meeting Agenda Timer","description":"An agenda timer converts a list of items and durations into a timed schedule, showing when each item starts and ends and what share of the meeting it consumes. Add a buffer between items to account for transitions, which is where most meetings quietly overrun.\n\nTool page: https://convertto.tech/t/agenda-timer","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgendaTimerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/ai-crawler-robots-txt-generator":{"post":{"operationId":"runAiCrawlerRobotsTxtGenerator","summary":"AI Crawler robots.txt Generator","description":"This generator produces robots.txt rules for 21 named AI crawlers, grouped by what the crawl is actually for: model training, AI search indexing, or fetching a single page a user asked about. The default blocks training while leaving search and user fetches allowed, because those two send readers rather than only taking content. Path-level rules, allow exceptions and crawl delay are all supported.\n\nTool page: https://convertto.tech/t/ai-crawler-robots-txt-generator","tags":["seo"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiCrawlerRobotsTxtGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/alt-text-checker":{"post":{"operationId":"runAltTextChecker","summary":"Alt Text Checker","description":"Alt text fails in predictable ways: a missing attribute, an empty one on a meaningful image, the filename copied in, a redundant \"image of\" prefix, or a description so long that screen readers truncate it. This checker finds all five in pasted HTML and explains what each image needs instead.\n\nTool page: https://convertto.tech/t/alt-text-checker","tags":["a11y"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AltTextCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/angle-converter":{"post":{"operationId":"runAngleConverter","summary":"Angle Converter","description":"To convert angle, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 7 supported units. A full turn is 360 degrees, 2π radians or 400 gradians. Trigonometric functions in most programming languages expect radians.\n\nTool page: https://convertto.tech/t/angle-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AngleConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/api-request-builder":{"post":{"operationId":"runApiRequestBuilder","summary":"API Request Builder","description":"An API request builder turns a method, URL, headers and body into working code — curl, fetch, axios, Python requests, Go or PHP. This one deliberately does not send the request: firing it would mean proxying through a server, and any Authorization header you pasted would then have been seen by that server. Generating code keeps credentials on your machine.\n\nTool page: https://convertto.tech/t/api-request-builder","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiRequestBuilderInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/area-converter":{"post":{"operationId":"runAreaConverter","summary":"Area Converter","description":"To convert area, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 10 supported units. An acre is 4046.8564224 m² exactly, and a hectare is 10,000 m². One hectare is about 2.471 acres.\n\nTool page: https://convertto.tech/t/area-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/aria-roles-reference":{"post":{"operationId":"runAriaRolesReference","summary":"ARIA Roles Reference","description":"ARIA roles tell assistive technology what an element is when the HTML does not. This reference lists 30 common roles with the native HTML element that already provides each one, the attributes the role requires to work, and the mistake most often made with it — including that an unnamed section or form is not a landmark at all.\n\nTool page: https://convertto.tech/t/aria-roles-reference","tags":["a11y"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AriaRolesReferenceInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/ascii-art-generator":{"post":{"operationId":"runAsciiArtGenerator","summary":"ASCII Art Text Generator","description":"To create ASCII art text, type a word and choose a font. Each letter is rendered from a FIGlet font definition into a large character-based banner, ready to paste into a terminal, a README file or a code comment block.\n\nTool page: https://convertto.tech/t/ascii-art-generator","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsciiArtGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/ascii-table-formatter":{"post":{"operationId":"runAsciiTableFormatter","summary":"ASCII Table Formatter","description":"An ASCII table formatter aligns delimited rows into a readable fixed-width table. Paste CSV, tab or pipe separated data and get box-drawing, ASCII, Markdown or plain aligned output, with numeric columns right-aligned automatically so figures line up on the decimal.\n\nTool page: https://convertto.tech/t/ascii-table-formatter","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsciiTableFormatterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/aspect-ratio-calculator":{"post":{"operationId":"runAspectRatioCalculator","summary":"Aspect Ratio Calculator","description":"To calculate an aspect ratio, enter the original width and height and the simplified ratio appears instantly, along with the CSS aspect-ratio declaration. Enter a new width and the matching height is worked out so the image scales without distortion.\n\nTool page: https://convertto.tech/t/aspect-ratio-calculator","tags":["image"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AspectRatioCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/base32-encode-decode":{"post":{"operationId":"runBase32EncodeDecode","summary":"Base32 Encoder & Decoder","description":"To encode Base32, paste your text and the RFC 4648 encoded string appears. Base32 uses only uppercase letters and digits 2 to 7, making it case-insensitive and safe to read aloud or type by hand — which is why TOTP two-factor secrets use it.\n\nTool page: https://convertto.tech/t/base32-encode-decode","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Base32EncodeDecodeInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/base58-encode-decode":{"post":{"operationId":"runBase58EncodeDecode","summary":"Base58 Encoder & Decoder","description":"To encode Base58, paste your text above. Base58 removes the characters 0, O, I and l from the alphabet because they are easily confused when read or transcribed, which is why Bitcoin addresses and IPFS hashes use it instead of Base64.\n\nTool page: https://convertto.tech/t/base58-encode-decode","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Base58EncodeDecodeInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/bill-splitter":{"post":{"operationId":"runBillSplitter","summary":"Bill Splitter","description":"Splitting a bill fairly means allocating the tip in proportion to what each person spent, not dividing it equally on top of unequal orders. This tool handles both an even split and an itemised one, and pushes any rounding remainder onto the largest share so the parts always add up to the total exactly.\n\nTool page: https://convertto.tech/t/bill-splitter","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillSplitterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/binary-to-decimal":{"post":{"operationId":"runBinaryToDecimal","summary":"Binary to Decimal Converter","description":"To convert binary to decimal, enter a string of ones and zeros above. Each digit is weighted by its power of two and summed, and the tool also shows the same value in octal and hexadecimal for comparison.\n\nTool page: https://convertto.tech/t/binary-to-decimal","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BinaryToDecimalInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/binary-to-text":{"post":{"operationId":"runBinaryToText","summary":"Binary to Text Converter","description":"To convert text to binary, paste your text and each byte becomes eight ones and zeros. Decoding strips any spacing and rebuilds the original UTF-8 string, so accented characters and emoji — which use several bytes each — survive the conversion.\n\nTool page: https://convertto.tech/t/binary-to-text","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BinaryToTextInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/bingo-card-generator":{"post":{"operationId":"runBingoCardGenerator","summary":"Bingo Card Generator","description":"A bingo card generator builds grids from your own list of items rather than numbers, which is what makes it useful for classrooms, conferences and meeting bingo. Each card draws a different random subset, and odd-sized grids can carry a free space in the centre.\n\nTool page: https://convertto.tech/t/bingo-card-generator","tags":["random"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BingoCardGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/bionic-reading-converter":{"post":{"operationId":"runBionicReadingConverter","summary":"Bionic Reading Converter","description":"Bionic reading bolds the first few letters of every word so the eye fixates there and skims the rest, which some readers find speeds them up. Choose a fixation strength and output as HTML, Markdown or Unicode bold that survives pasting into any application.\n\nTool page: https://convertto.tech/t/bionic-reading-converter","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BionicReadingConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/blob-shape-generator":{"post":{"operationId":"runBlobShapeGenerator","summary":"Blob Shape Generator","description":"A blob is an organic rounded shape used as a background. This designs one on a real canvas — pick the aspect ratio you are working to, and the shape is sized from it rather than floating as a circle in the middle. Points are scattered around an ellipse and joined in one of four ways: smooth curves, looser waves, straight peaks or right-angled steps, which is what turns the same points into a soft cell, a crystal or a staircase. Add a gradient, stack layers for depth, switch to an outline, then export as SVG, PNG at up to 3×, or an eight-value CSS border-radius. Every shape has a seed, so the URL recreates it exactly.\n\nTool page: https://convertto.tech/t/blob-shape-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlobShapeGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"custom\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/bmi-calculator":{"post":{"operationId":"runBmiCalculator","summary":"BMI Calculator","description":"To calculate BMI, enter your weight and height in metric or imperial units. BMI is weight in kilograms divided by height in metres squared, and the result is placed into the World Health Organization categories along with the healthy weight range for your height.\n\nTool page: https://convertto.tech/t/bmi-calculator","tags":["health"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BmiCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/bmr-tdee-calculator":{"post":{"operationId":"runBmrTdeeCalculator","summary":"BMR & Calorie Calculator","description":"To estimate your calorie needs, enter your age, sex, weight, height and activity level. Basal metabolic rate is calculated with the Mifflin-St Jeor equation, then multiplied by an activity factor to give total daily energy expenditure and targets for gradual weight change.\n\nTool page: https://convertto.tech/t/bmr-tdee-calculator","tags":["health"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BmrTdeeCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/body-fat-calculator":{"post":{"operationId":"runBodyFatCalculator","summary":"Body Fat Percentage Calculator","description":"To estimate body fat percentage, measure your neck, waist and — for women — hips, then enter them with your height. The US Navy circumference method is used, which typically lands within three to four percentage points of a DEXA scan.\n\nTool page: https://convertto.tech/t/body-fat-calculator","tags":["health"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BodyFatCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/border-radius-generator":{"post":{"operationId":"runBorderRadiusGenerator","summary":"CSS Border Radius Generator","description":"A corner is four independent things: how far it reaches sideways, how far it reaches down, whether it curves away from the box or into it, and how square the curve itself is. Drag the eight handles on the preview to set the first two — that is the a / b eight-value syntax, and it is what makes a blob or an egg rather than a rounded rectangle. Cut a corner and it bites inward, which border-radius cannot express at all; raise the squircle exponent and the curve flattens toward the iOS corner. The tool says which CSS each shape needs and hands you border-radius, clip-path, an SVG clipPath, a mask or a Tailwind class to match.\n\nTool page: https://convertto.tech/t/border-radius-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BorderRadiusGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"custom\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/box-shadow-generator":{"post":{"operationId":"runBoxShadowGenerator","summary":"CSS Box Shadow Generator","description":"To generate a CSS box-shadow, adjust the horizontal and vertical offset, blur radius, spread and colour opacity. The tool outputs ready-to-paste CSS plus a layered two-shadow version, which reads as far more realistic elevation than a single shadow.\n\nTool page: https://convertto.tech/t/box-shadow-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoxShadowGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/break-even-calculator":{"post":{"operationId":"runBreakEvenCalculator","summary":"Break-Even Point Calculator","description":"To find your break-even point, enter your fixed costs, selling price and variable cost per unit. The difference between price and variable cost is the contribution margin, and dividing fixed costs by it gives the number of units needed to cover everything.\n\nTool page: https://convertto.tech/t/break-even-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BreakEvenCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/caesar-cipher":{"post":{"operationId":"runCaesarCipher","summary":"Caesar Cipher Encoder","description":"To use a Caesar cipher, enter your text and a shift amount. Each letter moves that many places through the alphabet, wrapping from Z back to A. A shift of 13 gives ROT13, which is its own inverse — applying it twice returns the original text.\n\nTool page: https://convertto.tech/t/caesar-cipher","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaesarCipherInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/cagr-calculator":{"post":{"operationId":"runCagrCalculator","summary":"CAGR Calculator","description":"CAGR is the constant annual rate that would take a starting value to an ending value over a period, smoothing out the volatility in between. It is calculated as the ending value divided by the starting value, raised to the power of one over the number of years, minus one.\n\nTool page: https://convertto.tech/t/cagr-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CagrCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/calorie-calculator":{"post":{"operationId":"runCalorieCalculator","summary":"Calorie Calculator","description":"A calorie target is your maintenance level adjusted by a percentage: a 15% deficit is the usual steady rate, giving roughly 0.5 kg a week. The 7,700 kcal per kilogram conversion is a linear approximation — real loss slows as you get lighter, because a smaller body needs fewer calories to maintain.\n\nTool page: https://convertto.tech/t/calorie-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalorieCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/case-converter":{"post":{"operationId":"runCaseConverter","summary":"Case Converter","description":"To change text case, paste your text and pick a target case. Your chosen case is shown as the headline result, and every other case — UPPERCASE, lowercase, Title, Sentence, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE and dot.case — is listed underneath so you can compare and copy any of them.\n\nTool page: https://convertto.tech/t/case-converter","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/case-detector":{"post":{"operationId":"runCaseDetector","summary":"Naming Convention Converter","description":"To convert a naming convention, paste an identifier and every common form is produced at once — camelCase, PascalCase, snake_case, CONSTANT_CASE, kebab-case and more. Acronyms are handled correctly, so HTTPServer splits into \"http\" and \"server\".\n\nTool page: https://convertto.tech/t/case-detector","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseDetectorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/checklist-to-markdown":{"post":{"operationId":"runChecklistToMarkdown","summary":"Checklist to Markdown","description":"Converting a plain list into a Markdown task list adds the checkbox syntax that GitHub, GitLab and most note applications render as interactive tick boxes. Indentation is preserved as nesting, and the same list can be emitted as bullets, HTML checkboxes or a numbered outline.\n\nTool page: https://convertto.tech/t/checklist-to-markdown","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistToMarkdownInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/clothing-size-converter":{"post":{"operationId":"runClothingSizeConverter","summary":"Clothing Size Converter","description":"To convert clothing size, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 6 supported units. Clothing sizes are not standardised — vanity sizing means two garments with the same label can differ by several centimetres. Treat these as a starting point, then check the garment's measurements.\n\nTool page: https://convertto.tech/t/clothing-size-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClothingSizeConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/code-minifier":{"post":{"operationId":"runCodeMinifier","summary":"HTML, CSS & JS Minifier","description":"To minify code, paste it and choose the language. Comments and unnecessary whitespace are removed and the size saving is reported. This is a safe textual minifier — it never renames variables, so the output stays debuggable.\n\nTool page: https://convertto.tech/t/code-minifier","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeMinifierInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/color-blindness-simulator":{"post":{"operationId":"runColorBlindnessSimulator","summary":"Colour Blindness Simulator","description":"To simulate colour blindness, pick a colour and see how it appears under protanopia, deuteranopia, tritanopia and achromatopsia. This matters most for red-green pairs used to signal success and error, which can become indistinguishable to around 8% of men.\n\nTool page: https://convertto.tech/t/color-blindness-simulator","tags":["color"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorBlindnessSimulatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/color-converter":{"post":{"operationId":"runColorConverter","summary":"Colour Converter","description":"To convert a colour, paste any HEX, RGB, HSL or CSS colour name. Every format appears at once — HEX, RGB, HSL, HSV, CMYK, CIELAB, Android and Swift — along with WCAG contrast against five common backgrounds, a ten-step tint and shade scale, colour harmonies and ready-to-paste CSS custom properties.\n\nTool page: https://convertto.tech/t/color-converter","tags":["color"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/color-mixer":{"post":{"operationId":"runColorMixer","summary":"Colour Mixer & Blender","description":"To mix two colours, pick both and choose how many intermediate steps you want. RGB blending matches what CSS gradients do by default, while HSL blending travels around the colour wheel and keeps the middle steps vivid rather than washing out to grey.\n\nTool page: https://convertto.tech/t/color-mixer","tags":["color"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorMixerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/color-palette-generator":{"post":{"operationId":"runColorPaletteGenerator","summary":"Colour Palette Generator","description":"To generate a colour palette, pick a base colour and a harmony rule. Complementary rotates the hue 180 degrees for maximum contrast, analogous stays within 30 degrees for a calm scheme, and triadic spaces three hues evenly for balanced variety.\n\nTool page: https://convertto.tech/t/color-palette-generator","tags":["color"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorPaletteGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/color-shades-generator":{"post":{"operationId":"runColorShadesGenerator","summary":"Colour Tints & Shades Generator","description":"To generate tints and shades, pick a base colour and choose how many steps you want in each direction. Tints are produced by mixing toward white and shades by mixing toward black, keeping the hue constant so the whole scale reads as one colour family.\n\nTool page: https://convertto.tech/t/color-shades-generator","tags":["color"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorShadesGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/columns-to-lines":{"post":{"operationId":"runColumnsToLines","summary":"Columns to Lines Converter","description":"To convert between columns and lines, paste your data above and choose a direction. Delimited text is split on your chosen separator into one item per line, or a list of lines is joined back into a single delimited row, with surrounding whitespace trimmed either way.\n\nTool page: https://convertto.tech/t/columns-to-lines","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColumnsToLinesInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/comment-remover":{"post":{"operationId":"runCommentRemover","summary":"Code Comment Remover","description":"Removing comments from code is harder than deleting everything after a marker, because \"//\" inside a URL string and \"#\" inside a quoted value are not comments. This tool scans character by character while tracking string state, so literals survive intact — and it can preserve a licence header.\n\nTool page: https://convertto.tech/t/comment-remover","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentRemoverInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/compound-interest-calculator":{"post":{"operationId":"runCompoundInterestCalculator","summary":"Compound Interest Calculator","description":"To calculate compound interest, enter your starting amount, any regular monthly contribution, the expected annual return and the number of years. The projection separates what you put in from what the interest earned, and shows the effective annual rate after compounding.\n\nTool page: https://convertto.tech/t/compound-interest-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompoundInterestCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/contrast-checker":{"post":{"operationId":"runContrastChecker","summary":"WCAG Contrast Checker","description":"To check colour contrast, pick a text colour and a background colour. The ratio is calculated using the WCAG relative luminance formula and checked against AA and AAA thresholds, adjusted automatically for large or bold text.\n\nTool page: https://convertto.tech/t/contrast-checker","tags":["color"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContrastCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/cooking-converter":{"post":{"operationId":"runCookingConverter","summary":"Cooking Measurement Converter","description":"To convert cooking measurement, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 10 supported units. A US cup is 236.6 mL, a metric cup is 250 mL and an Australian tablespoon is 20 mL rather than 15 mL. Recipe origin matters.\n\nTool page: https://convertto.tech/t/cooking-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CookingConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/countdown-calculator":{"post":{"operationId":"runCountdownCalculator","summary":"Countdown Calculator","description":"A countdown calculator measures the gap between today and a future date in years, months, weeks, days, hours and minutes at once. The years-and-months figure is calendar-accurate rather than dividing by 365, so a gap of exactly one year reads as one year regardless of leap days.\n\nTool page: https://convertto.tech/t/countdown-calculator","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountdownCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/crc32-checksum":{"post":{"operationId":"runCrc32Checksum","summary":"CRC32 Checksum Calculator","description":"To calculate a CRC32 checksum, paste text above and the 32-bit value appears in hexadecimal, decimal and signed forms. CRC32 is designed for speed and detecting accidental transmission errors, which is why ZIP archives and PNG images embed it.\n\nTool page: https://convertto.tech/t/crc32-checksum","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Crc32ChecksumInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/cron-expression-generator":{"post":{"operationId":"runCronExpressionGenerator","summary":"Cron Expression Parser","description":"To read a cron expression, paste it above and it is translated into plain English with each field labelled. The five fields are minute, hour, day of month, month and day of week; a six-field expression adds seconds at the front.\n\nTool page: https://convertto.tech/t/cron-expression-generator","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CronExpressionGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/cron-next-run":{"post":{"operationId":"runCronNextRun","summary":"Cron Next Run Calculator","description":"A cron expression has five fields — minute, hour, day of month, month and weekday — and this calculator expands them to show exactly when a job next runs. It handles ranges, steps, lists, month and day names, @daily shortcuts, and the rule that day-of-month and day-of-week combine with OR rather than AND.\n\nTool page: https://convertto.tech/t/cron-next-run","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CronNextRunInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/csp-generator":{"post":{"operationId":"runCspGenerator","summary":"Content Security Policy Generator","description":"To generate a Content Security Policy, choose a preset and each directive is explained alongside the header. Report-only mode is on by default because an enforced CSP that blocks your own scripts takes a site down immediately — deploy in report-only, check the console, then enforce.\n\nTool page: https://convertto.tech/t/csp-generator","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CspGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-animation-generator":{"post":{"operationId":"runCssAnimationGenerator","summary":"CSS Animation Generator","description":"To generate a CSS animation, pick an effect and adjust the duration, easing and repeat count. The preview loops continuously so you can judge the motion. Animating only transform and opacity keeps the animation on the compositor and off the main thread.\n\nTool page: https://convertto.tech/t/css-animation-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssAnimationGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"html\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-button-generator":{"post":{"operationId":"runCssButtonGenerator","summary":"CSS Button Generator","description":"A button is not finished when it looks right at rest. It needs a hover state, a pressed state, a focus ring that appears for keyboard users but not for mouse clicks, and a disabled state — and the generated CSS includes all of them. Padding is set separately across and down because a button's proportions carry more of its character than its radius does. The focus ring uses :focus-visible rather than :focus, so clicking does not leave an outline behind while tabbing still shows one.\n\nTool page: https://convertto.tech/t/css-button-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssButtonGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-clamp-generator":{"post":{"operationId":"runCssClampGenerator","summary":"CSS Clamp Generator","description":"To create fluid typography, set the size you want at your smallest viewport and at your largest. The generator solves for the slope and intercept and produces a clamp() value that scales linearly between them, then locks at each end.\n\nTool page: https://convertto.tech/t/css-clamp-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssClampGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-clip-path-generator":{"post":{"operationId":"runCssClipPathGenerator","summary":"CSS Clip Path Generator","description":"clip-path cuts an element down to a shape, hiding everything outside it. Percentages are relative to the element's own box, so one value works at any size — a hexagon stays a hexagon whether the element is 40 pixels wide or 400. Polygons take a list of corner points; circle, ellipse and inset take a size and a position. The clipped area stops receiving pointer events too, so a clipped button is only clickable where you can see it.\n\nTool page: https://convertto.tech/t/css-clip-path-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssClipPathGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-columns-generator":{"post":{"operationId":"runCssColumnsGenerator","summary":"CSS Multi-Column Generator","description":"CSS columns flow a single block of text into multiple columns without splitting the markup. Sizing by column-width rather than column-count is almost always the better choice: it names an ideal width and lets the browser fit as many columns as there is room for, so the layout is responsive with no media queries at all. Add break-inside: avoid to figures and cards so they are not sliced across a gap, and break-after: avoid to headings so they are not stranded at the foot of a column.\n\nTool page: https://convertto.tech/t/css-columns-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssColumnsGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-cursor-generator":{"post":{"operationId":"runCssCursorGenerator","summary":"CSS Cursor Reference & Generator","description":"CSS has 36 cursor keywords and the browser draws each one from the operating system, so they look native rather than like an image you shipped. The ones worth knowing: pointer for anything clickable, not-allowed for a disabled control, grab and grabbing for draggable items, col-resize and row-resize for table and panel dividers, and progress for \"still working, but you can carry on\". Hover the preview to see the real cursor for the value you picked.\n\nTool page: https://convertto.tech/t/css-cursor-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssCursorGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-filter-generator":{"post":{"operationId":"runCssFilterGenerator","summary":"CSS Filter Generator","description":"CSS filters apply graphical effects to an element and everything inside it. Functions compose left to right, so the order changes the result — blur then invert is not the same image as invert then blur. Filters are GPU-accelerated in every current browser, which makes them far cheaper than the equivalent image processing.\n\nTool page: https://convertto.tech/t/css-filter-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssFilterGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-formatter":{"post":{"operationId":"runCssFormatter","summary":"CSS, SCSS & Less Formatter","description":"To format CSS, paste your stylesheet and it is reprinted with one declaration per line, consistent spacing and correctly indented nested rules. SCSS and Less are supported too, including nesting, mixins and variables.\n\nTool page: https://convertto.tech/t/css-formatter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssFormatterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-grid-generator":{"post":{"operationId":"runCssGridGenerator","summary":"CSS Grid Generator","description":"To build a CSS Grid, enter your column and row track definitions and the preview renders immediately. Values like repeat(auto-fit, minmax(200px, 1fr)) create fully responsive layouts that reflow without a single media query.\n\nTool page: https://convertto.tech/t/css-grid-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssGridGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"html\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-hover-effects-generator":{"post":{"operationId":"runCssHoverEffectsGenerator","summary":"CSS Hover Effect Generator","description":"Every effect here animates only transform and opacity, which the browser composites without laying out or repainting — the difference between a smooth hover and a janky one is almost always which property you animated. Each recipe also fires on :focus-visible as well as :hover, because a hover-only affordance does not exist for keyboard users and does not exist on touch at all. The sliding underline uses scaleX with a shifting transform-origin so it enters from one side and leaves from the other.\n\nTool page: https://convertto.tech/t/css-hover-effects-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssHoverEffectsGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-loader-generator":{"post":{"operationId":"runCssLoaderGenerator","summary":"CSS Loader Generator","description":"A CSS loader is one element and one keyframe rule — no image to download, no JavaScript to run, and it keeps animating while the main thread is busy, which is exactly when a loader is on screen. A ring spinner is a circle with one coloured border side rotating; a pulse scales opacity and size; a sweeping bar animates a background position. Each one is a single element with no pseudo-elements, and each comes with a prefers-reduced-motion fallback so it stops for people who have asked their system for less movement.\n\nTool page: https://convertto.tech/t/css-loader-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssLoaderGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-named-colors":{"post":{"operationId":"runCssNamedColors","summary":"CSS Named Colours Reference","description":"To look up a CSS colour name, type part of the name or a hex value to filter the list. Each colour shows its HEX, RGB, HSL or OKLCH value — switchable — along with its contrast against whichever of black or white reads better on it, so you can see at a glance which names can carry text. The list sorts by hue or lightness as well as alphabetically, and the whole grid can be viewed through a colour-vision filter.\n\nTool page: https://convertto.tech/t/css-named-colors","tags":["color"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssNamedColorsInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-pattern-generator":{"post":{"operationId":"runCssPatternGenerator","summary":"CSS Pattern & Texture Generator","description":"CSS background patterns are built from repeating gradients rather than image files — a stripe is one repeating-linear-gradient, a checkerboard is two offset by half a tile, and dots are a radial gradient tiled by background-size. They scale to any resolution, cost nothing to download and can be recoloured with a single value.\n\nTool page: https://convertto.tech/t/css-pattern-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssPatternGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-scrollbar-generator":{"post":{"operationId":"runCssScrollbarGenerator","summary":"CSS Scrollbar Styler","description":"There are two ways to style a scrollbar and you need both for now. scrollbar-width and scrollbar-color are the standard properties, supported by Firefox and by Chrome from version 121; the ::-webkit-scrollbar pseudo-elements are the older approach that Safari and earlier Chrome still rely on. The standard version only offers auto, thin or none for the width, so exact pixel control remains WebKit-only. Hiding a scrollbar entirely does not stop the element scrolling, which is worth checking before you do it.\n\nTool page: https://convertto.tech/t/css-scrollbar-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssScrollbarGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-shape-generator":{"post":{"operationId":"runCssShapeGenerator","summary":"CSS Shape Generator","description":"To create a CSS shape, pick one and adjust the size and colour. Triangles use the classic border trick, while stars, hexagons and arrows use clip-path polygons. Both approaches need no images and scale cleanly at any resolution.\n\nTool page: https://convertto.tech/t/css-shape-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssShapeGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"html\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-specificity-calculator":{"post":{"operationId":"runCssSpecificityCalculator","summary":"CSS Specificity Calculator","description":"Specificity is three numbers compared left to right: IDs, then classes and attributes and pseudo-classes, then elements and pseudo-elements. Any number of classes loses to a single ID, because the comparison never carries — 0,99,0 is beaten by 1,0,0. Two things trip people up most: :where() contributes nothing at all, which makes it the tool for writing overridable defaults, while :is(), :not() and :has() take the specificity of their most specific argument. When two rules tie, the one written later wins.\n\nTool page: https://convertto.tech/t/css-specificity-calculator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssSpecificityCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-tooltip-generator":{"post":{"operationId":"runCssTooltipGenerator","summary":"CSS Tooltip Generator","description":"A CSS tooltip is a pseudo-element reading its text from a data attribute, so the markup stays one element and there is no JavaScript to load or position. It appears on hover and on :focus-visible, which is what makes it reachable by keyboard rather than mouse-only. The arrow is a second pseudo-element built from a transparent border — a border-only box with three sides transparent renders as a triangle, which is why no image is needed.\n\nTool page: https://convertto.tech/t/css-tooltip-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssTooltipGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/css-transform-generator":{"post":{"operationId":"runCssTransformGenerator","summary":"CSS Transform Generator","description":"CSS transforms move, rotate, scale and skew an element without affecting layout — the space it originally occupied stays reserved, which is why transforms are cheap to animate. Functions apply right to left, so `translate(50px) rotate(45deg)` rotates first and then moves along the unrotated axis.\n\nTool page: https://convertto.tech/t/css-transform-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CssTransformGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/csv-analyser":{"post":{"operationId":"runCsvAnalyser","summary":"CSV Analyser","description":"A CSV analyser profiles each column: its inferred type, how many values are missing, how many are distinct, the range or spread, and example values. It also flags data quality problems — ragged rows, constant columns, columns that are mostly empty, and exact duplicate rows.\n\nTool page: https://convertto.tech/t/csv-analyser","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CsvAnalyserInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/csv-column-extractor":{"post":{"operationId":"runCsvColumnExtractor","summary":"CSV Column Extractor","description":"A CSV column extractor keeps only the columns you name, in the order you list them. Reference columns by header name or by 1-based position, and output the result as CSV, TSV, JSON or a plain list — with proper RFC 4180 parsing, so quoted fields containing commas survive intact.\n\nTool page: https://convertto.tech/t/csv-column-extractor","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CsvColumnExtractorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/csv-deduplicator":{"post":{"operationId":"runCsvDeduplicator","summary":"CSV Duplicate Remover","description":"Removing duplicates from a CSV means deciding what counts as a duplicate. Match on every column, or name a key such as email so rows are treated as the same record even when other fields differ. You can keep the first occurrence, the last, or drop every row that was duplicated at all.\n\nTool page: https://convertto.tech/t/csv-deduplicator","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CsvDeduplicatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/csv-merger":{"post":{"operationId":"runCsvMerger","summary":"CSV Merger & Joiner","description":"Merging two CSV files means either stacking their rows or joining them on a shared key. An inner join keeps only rows present in both, a left join keeps everything from the first file, and a full outer join keeps everything from both — the same semantics as SQL, and as a spreadsheet VLOOKUP.\n\nTool page: https://convertto.tech/t/csv-merger","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CsvMergerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/csv-splitter":{"post":{"operationId":"runCsvSplitter","summary":"CSV Splitter","description":"A CSV splitter breaks one file into several — either fixed chunks of N rows for batch processing and import limits, or one part per distinct value in a column, which is how you separate a combined export back into per-region or per-customer files.\n\nTool page: https://convertto.tech/t/csv-splitter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CsvSplitterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/csv-viewer":{"post":{"operationId":"runCsvViewer","summary":"CSV Viewer & Table Converter","description":"To view CSV data, paste it above and it is parsed into a readable table with the delimiter detected automatically. Quoted fields containing commas and newlines are handled correctly, and parse errors report the exact row so bad data is easy to find.\n\nTool page: https://convertto.tech/t/csv-viewer","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CsvViewerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/cubic-bezier-generator":{"post":{"operationId":"runCubicBezierGenerator","summary":"Cubic Bezier Easing Generator","description":"To build a custom easing curve, adjust the two control points and watch both the curve and an animated demo update. Y values outside 0 to 1 overshoot, which is what creates a spring or bounce feel rather than a plain ease-out.\n\nTool page: https://convertto.tech/t/cubic-bezier-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CubicBezierGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"html\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/curl-to-code":{"post":{"operationId":"runCurlToCode","summary":"cURL to Code Converter","description":"To convert a cURL command to code, paste it above and pick a target. The parser reads the method, URL, headers and request body — including multi-line commands with backslash continuations — and produces equivalent fetch, axios, Python requests or HTTPie code.\n\nTool page: https://convertto.tech/t/curl-to-code","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurlToCodeInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/data-anonymiser":{"post":{"operationId":"runDataAnonymiser","summary":"CSV Data Anonymiser","description":"A data anonymiser replaces personal information in a CSV so the file can be shared for testing or analysis. Choose masking to keep the shape of each value, hashing for a consistent pseudonym, realistic fake replacements, or full redaction — with columns detected automatically from their names.\n\nTool page: https://convertto.tech/t/data-anonymiser","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataAnonymiserInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/data-extractor":{"post":{"operationId":"runDataExtractor","summary":"Email, URL & Number Extractor","description":"To extract data from text, paste it and choose what to find — emails, URLs, IP addresses, phone numbers, hashtags, mentions, numbers, hex colours or dates. Results are returned as a list, comma-separated string and JSON array, with duplicates removed by default.\n\nTool page: https://convertto.tech/t/data-extractor","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataExtractorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/data-format-converter":{"post":{"operationId":"runDataFormatConverter","summary":"Data Format Converter","description":"To convert between data formats, paste your content, pick the format it is in and the format you want. Conversion between JSON, YAML, XML, CSV, TSV and TOML happens entirely in your browser, so API payloads, config files and customer data are never uploaded to a server.\n\nTool page: https://convertto.tech/t/data-format-converter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFormatConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/data-storage-converter":{"post":{"operationId":"runDataStorageConverter","summary":"Data Storage Converter","description":"To convert data size, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 11 supported units. Drive manufacturers use decimal units (1 GB = 1000 MB) while Windows reports binary units (1 GiB = 1024 MiB). That is why a \"1 TB\" drive appears as 931 GB.\n\nTool page: https://convertto.tech/t/data-storage-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStorageConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/data-transfer-rate-converter":{"post":{"operationId":"runDataTransferRateConverter","summary":"Data Transfer Rate Converter","description":"To convert transfer rate, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 8 supported units. Internet plans are sold in megabits (Mbps) but downloads are shown in megabytes (MB/s). Divide Mbps by 8 to get MB/s — a 100 Mbps line tops out near 12.5 MB/s.\n\nTool page: https://convertto.tech/t/data-transfer-rate-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataTransferRateConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/data-uri-generator":{"post":{"operationId":"runDataUriGenerator","summary":"Data URI Generator","description":"To create a data URI, paste your content and pick its MIME type. The result can be inlined directly in an img src, a CSS background or a fetch call, removing one network request. URL-encoding is usually smaller than Base64 for SVG.\n\nTool page: https://convertto.tech/t/data-uri-generator","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataUriGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/date-add-subtract":{"post":{"operationId":"runDateAddSubtract","summary":"Add or Subtract Days from a Date","description":"To add or subtract time from a date, enter the starting date, an amount and a unit. The result shows the new date with its day of the week. Enable working days to skip weekends, which is how notice periods and delivery windows are usually counted.\n\nTool page: https://convertto.tech/t/date-add-subtract","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DateAddSubtractInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/date-difference-calculator":{"post":{"operationId":"runDateDifferenceCalculator","summary":"Date Difference Calculator","description":"To find the difference between two dates, enter both and the total is given in days, weeks, months and years, along with a separate count of working days. Enabling \"include the end date\" counts both endpoints, which is how contracts and hire periods are usually measured.\n\nTool page: https://convertto.tech/t/date-difference-calculator","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DateDifferenceCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/date-format-converter":{"post":{"operationId":"runDateFormatConverter","summary":"Date Format Converter","description":"A date format converter parses dates written in any common form — ISO, slashed, written out, or a Unix timestamp — and reformats them consistently. Output as ISO 8601, US or European slashed, long form, RFC 2822, a Unix timestamp, or a custom pattern built from YYYY, MM, DD and month-name tokens.\n\nTool page: https://convertto.tech/t/date-format-converter","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DateFormatConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/day-of-year-calculator":{"post":{"operationId":"runDayOfYearCalculator","summary":"Day of Year Calculator","description":"The day of the year, or ordinal date, counts from 1 on 1 January to 365 or 366 on 31 December. This calculator also gives the ISO week number, the quarter, the Julian Day Number used in astronomy, the Unix timestamp, and the percentage of the year elapsed.\n\nTool page: https://convertto.tech/t/day-of-year-calculator","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DayOfYearCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/debt-payoff-calculator":{"post":{"operationId":"runDebtPayoffCalculator","summary":"Debt Payoff Calculator","description":"The avalanche method pays the highest-interest debt first and always costs less overall; the snowball method clears the smallest balance first for quicker visible progress. This calculator simulates both across all your debts month by month, rolling each freed minimum payment into the next debt.\n\nTool page: https://convertto.tech/t/debt-payoff-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebtPayoffCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/decision-matrix":{"post":{"operationId":"runDecisionMatrix","summary":"Weighted Decision Matrix","description":"A weighted decision matrix scores each option against each criterion, multiplies by the criterion's importance, and totals the result. Its value is in making the reasoning explicit rather than producing an objective answer — which is why this tool also shows which single criterion decided the outcome.\n\nTool page: https://convertto.tech/t/decision-matrix","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionMatrixInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/density-converter":{"post":{"operationId":"runDensityConverter","summary":"Density Converter","description":"To convert density, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 6 supported units. Water at 4 °C has a density of exactly 1 g/cm³, which is 1000 kg/m³ — a convenient reference point for most conversions.\n\nTool page: https://convertto.tech/t/density-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DensityConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/depreciation-calculator":{"post":{"operationId":"runDepreciationCalculator","summary":"Depreciation Calculator","description":"Depreciation spreads an asset's cost over its useful life. Straight line charges the same amount each year; declining balance and sum of the years' digits front-load the charge to match assets that lose value fastest when new. All methods write off the same total — cost minus salvage value.\n\nTool page: https://convertto.tech/t/depreciation-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepreciationCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/dice-probability-calculator":{"post":{"operationId":"runDiceProbabilityCalculator","summary":"Dice Probability Calculator","description":"Dice notation like 3d6+2 means roll three six-sided dice and add two. This calculator computes the exact probability of every possible total by convolution rather than simulation, so the figures are precise — and shows the cumulative \"at least\" probability that matters for target numbers.\n\nTool page: https://convertto.tech/t/dice-probability-calculator","tags":["random"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiceProbabilityCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/dice-roller":{"post":{"operationId":"runDiceRoller","summary":"Dice Roller","description":"To roll dice, choose how many and how many sides each has, plus any modifier. Each die is rolled independently using the browser's cryptographic random source, and the result shows the individual rolls alongside the total and the statistically expected average.\n\nTool page: https://convertto.tech/t/dice-roller","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiceRollerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/diff-checker":{"post":{"operationId":"runDiffChecker","summary":"Text Diff Checker","description":"To compare two texts, paste the original on the left and the changed version on the right. Additions are highlighted in green and removals in red, and you can compare by line, word or character depending on how fine-grained you need the diff.\n\nTool page: https://convertto.tech/t/diff-checker","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiffCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"diff\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/diff-to-patch":{"post":{"operationId":"runDiffToPatch","summary":"Unified Diff & Patch Generator","description":"A unified diff records the changes between two versions of a file as hunks of context, removed and added lines. This generator computes the longest common subsequence, groups changes into hunks with the context you choose, and emits a patch that both git apply and the patch command accept.\n\nTool page: https://convertto.tech/t/diff-to-patch","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiffToPatchInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/discount-calculator":{"post":{"operationId":"runDiscountCalculator","summary":"Discount Calculator","description":"To calculate a discount, enter the original price and the percentage off. If a second \"extra percent off\" applies, it is calculated on the already-reduced price, which is how retailers actually stack offers — the combined saving is always less than adding the two percentages.\n\nTool page: https://convertto.tech/t/discount-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/duration-calculator":{"post":{"operationId":"runDurationCalculator","summary":"Time Duration Calculator","description":"A duration calculator adds, subtracts or averages spans of time written in any common form — 1h 30m, 1:30:00, 90m or a bare number of minutes. The result is shown as HH:MM:SS, in words, as decimal hours for timesheets, and as an ISO 8601 duration.\n\nTool page: https://convertto.tech/t/duration-calculator","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DurationCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/edge-case-string-generator":{"post":{"operationId":"runEdgeCaseStringGenerator","summary":"Edge Case Test String Generator","description":"Edge case test strings are the inputs that break naive validation: empty and whitespace-only values, combining diacritics, emoji ZWJ sequences, right-to-left overrides, boundary lengths at 255 and 256 characters, numeric limits, quoting and escaping traps, mixed line endings, and awkward real-world names. Feed them through your input path to find what your code assumes.\n\nTool page: https://convertto.tech/t/edge-case-string-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EdgeCaseStringGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/email-header-analyzer":{"post":{"operationId":"runEmailHeaderAnalyzer","summary":"Email Header Analyzer","description":"Paste a raw email header block and every Received field is read in the order the message actually travelled, with the delay between each hop, the first public IP address it was sent from, and the SPF, DKIM and DMARC results the receiving server recorded in its Authentication-Results header. Parsing happens in your browser, so nothing is uploaded.\n\nTool page: https://convertto.tech/t/email-header-analyzer","tags":["network"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailHeaderAnalyzerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/emergency-fund-calculator":{"post":{"operationId":"runEmergencyFundCalculator","summary":"Emergency Fund Calculator","description":"An emergency fund is measured in months of essential expenses, not a round number. Count only what you must pay — housing, food, utilities, transport, insurance and minimum debt payments — and multiply by the months of cover you need, which depends on how stable and how numerous your income sources are.\n\nTool page: https://convertto.tech/t/emergency-fund-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmergencyFundCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/emoji-picker":{"post":{"operationId":"runEmojiPicker","summary":"Emoji Search & Picker","description":"To find an emoji, type part of its name such as \"fire\" or \"heart\" and matching characters appear with their Unicode code points. The code point is useful when you need the escape sequence for source code rather than the character itself.\n\nTool page: https://convertto.tech/t/emoji-picker","tags":["social"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmojiPickerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/energy-converter":{"post":{"operationId":"runEnergyConverter","summary":"Energy Converter","description":"To convert energy, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 9 supported units. The \"calorie\" on food labels is actually a kilocalorie — 4184 joules. Nutrition labels in the EU show both kcal and kJ.\n\nTool page: https://convertto.tech/t/energy-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnergyConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/env-file-validator":{"post":{"operationId":"runEnvFileValidator","summary":".env File Validator","description":"A .env validator catches the mistakes that silently break configuration: duplicate keys where the last quietly wins, whitespace around the equals sign, unquoted values containing spaces or hash characters, and secrets given a NEXT_PUBLIC or VITE prefix that bundles them into client-side JavaScript.\n\nTool page: https://convertto.tech/t/env-file-validator","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvFileValidatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/env-to-json":{"post":{"operationId":"runEnvToJson","summary":".env to JSON Converter","description":"To convert a .env file to JSON, paste its contents above. Comments and blank lines are ignored, export prefixes are stripped, and quoted values are unwrapped. Reverse the direction to turn a JSON config object into .env syntax for deployment.\n\nTool page: https://convertto.tech/t/env-to-json","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvToJsonInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/exponent-logarithm-calculator":{"post":{"operationId":"runExponentLogarithmCalculator","summary":"Exponent, Root & Logarithm Calculator","description":"To calculate exponents, roots and logarithms, choose the operation and enter your values. Powers, nth roots, logarithms in any base, natural logs and exponentials are all supported, and each result shows the working so you can check it.\n\nTool page: https://convertto.tech/t/exponent-logarithm-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExponentLogarithmCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/fake-address-generator":{"post":{"operationId":"runFakeAddressGenerator","summary":"Fake Address Generator","description":"A fake address generator produces test addresses that match a country's real formatting rules — the right postcode pattern, region codes, street conventions and phone number shape — without corresponding to a real property. Use them to test checkout forms, address validation and shipping labels without exposing anyone's real details.\n\nTool page: https://convertto.tech/t/fake-address-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FakeAddressGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/fancy-text-generator":{"post":{"operationId":"runFancyTextGenerator","summary":"Fancy Text Generator","description":"To create fancy text, type above and pick a style. The generator maps letters onto Unicode mathematical alphanumeric symbols, so the styled text is real characters you can paste into Instagram bios, X posts and usernames rather than an image.\n\nTool page: https://convertto.tech/t/fancy-text-generator","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FancyTextGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/fd-calculator":{"post":{"operationId":"runFdCalculator","summary":"FD Calculator","description":"A fixed deposit maturity value is principal × (1 + r/n)^(n×t), where n is the number of compounding periods a year — quarterly for most Indian banks. ₹1,00,000 at 7.1% for five years matures to about ₹1,42,300. The effective yield is higher than the quoted rate because interest compounds four times a year rather than once.\n\nTool page: https://convertto.tech/t/fd-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FdCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/find-and-replace":{"post":{"operationId":"runFindAndReplace","summary":"Find and Replace Text","description":"To find and replace text, paste your document above, enter what to search for and what to replace it with. Enable regular expressions for pattern matching with capture groups referenced as $1 and $2, or leave it off for literal matching where special characters are escaped automatically.\n\nTool page: https://convertto.tech/t/find-and-replace","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindAndReplaceInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/flexbox-generator":{"post":{"operationId":"runFlexboxGenerator","summary":"CSS Flexbox Generator","description":"To build a flexbox layout, choose a direction and alignment and the preview updates instantly. The key idea is that justify-content works along the main axis and align-items across it — so changing direction to column swaps which property controls horizontal position.\n\nTool page: https://convertto.tech/t/flexbox-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlexboxGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"html\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/force-converter":{"post":{"operationId":"runForceConverter","summary":"Force Converter","description":"To convert force, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 6 supported units. One newton is the force that accelerates 1 kg at 1 m/s². Standard gravity converts mass to weight: 1 kgf = 9.80665 N.\n\nTool page: https://convertto.tech/t/force-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForceConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/fraction-calculator":{"post":{"operationId":"runFractionCalculator","summary":"Fraction Calculator","description":"To calculate with fractions, enter two fractions and choose an operation. Addition and subtraction use a common denominator, multiplication multiplies across, and division multiplies by the reciprocal. The answer is reduced and also shown as a mixed number, decimal and percentage.\n\nTool page: https://convertto.tech/t/fraction-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FractionCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/fraction-to-decimal":{"post":{"operationId":"runFractionToDecimal","summary":"Fraction to Decimal Converter","description":"To convert a fraction to a decimal, enter it as 3/8 and the decimal value appears instantly. Enter a decimal instead and the tool finds the closest simplified fraction using continued fractions, along with the mixed number and percentage forms.\n\nTool page: https://convertto.tech/t/fraction-to-decimal","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FractionToDecimalInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/freelance-rate-calculator":{"post":{"operationId":"runFreelanceRateCalculator","summary":"Freelance Rate Calculator","description":"A freelance rate has to cover more than the hours you bill. Start from the income you want to take home, add tax and business costs to get the gross you must invoice, then divide by billable hours only — typically 60 to 70% of your working time, once admin, sales and learning are excluded.\n\nTool page: https://convertto.tech/t/freelance-rate-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreelanceRateCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/frequency-converter":{"post":{"operationId":"runFrequencyConverter","summary":"Frequency Converter","description":"To convert frequency, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 6 supported units. One hertz is one cycle per second. RPM divides by 60: a 3000 rpm engine turns at 50 Hz.\n\nTool page: https://convertto.tech/t/frequency-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrequencyConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/fuel-economy-converter":{"post":{"operationId":"runFuelEconomyConverter","summary":"Fuel Economy Converter","description":"To convert fuel economy, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 5 supported units. MPG and L/100km are inverses of each other, so the relationship is not linear: going from 20 to 25 mpg saves far more fuel than going from 40 to 45 mpg.\n\nTool page: https://convertto.tech/t/fuel-economy-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuelEconomyConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/gcd-lcm-calculator":{"post":{"operationId":"runGcdLcmCalculator","summary":"GCD & LCM Calculator","description":"To find the GCD and LCM, enter two or more whole numbers separated by commas. The greatest common divisor is computed with the Euclidean algorithm and the lowest common multiple is derived from it, along with the simplified ratio of your inputs.\n\nTool page: https://convertto.tech/t/gcd-lcm-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GcdLcmCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/gguf-size-calculator":{"post":{"operationId":"runGgufSizeCalculator","summary":"GGUF Quantisation Size Calculator","description":"A GGUF file is parameters × effective bits per weight ÷ 8. The effective figure is higher than the nominal one because each block of weights carries its own scale — Q4_K_M is 4.83 bits per weight, not 4 — so an 8B model at Q4_K_M is about 4.5 GB rather than 4. This calculator gives the size at all eight common levels with what each costs in quality.\n\nTool page: https://convertto.tech/t/gguf-size-calculator","tags":["ai"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GgufSizeCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/git-command-builder":{"post":{"operationId":"runGitCommandBuilder","summary":"Git Command Builder","description":"Git commands for common tasks are easy to half-remember and dangerous to guess. This builder produces the exact command for fifteen frequent jobs — undoing commits, renaming branches, squashing history, bisecting for a bug — with an explanation of what it does and an explicit warning wherever the operation destroys work or rewrites shared history.\n\nTool page: https://convertto.tech/t/git-command-builder","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitCommandBuilderInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/gitignore-generator":{"post":{"operationId":"runGitignoreGenerator","summary":".gitignore Generator","description":"To generate a .gitignore, pick your project type and the relevant build artefacts, caches and dependency folders are included. The secrets section is the one worth keeping — .env files and private keys committed by accident are among the most common security incidents.\n\nTool page: https://convertto.tech/t/gitignore-generator","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitignoreGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/glassmorphism-generator":{"post":{"operationId":"runGlassmorphismGenerator","summary":"Glassmorphism CSS Generator","description":"To create a glassmorphism effect, adjust the blur, opacity and saturation and the frosted panel updates live over a colourful backdrop. The effect relies on backdrop-filter, which blurs whatever sits behind the element — so it only looks like glass over varied content.\n\nTool page: https://convertto.tech/t/glassmorphism-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlassmorphismGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"html\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/glitch-text-generator":{"post":{"operationId":"runGlitchTextGenerator","summary":"Glitch Text Generator","description":"To create glitch text, type a word above and raise the intensity slider. The generator stacks Unicode combining diacritical marks on each character, producing the corrupted \"Zalgo\" effect that can be pasted into most apps and social platforms.\n\nTool page: https://convertto.tech/t/glitch-text-generator","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlitchTextGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/gradient-generator":{"post":{"operationId":"runGradientGenerator","summary":"CSS Gradient Generator","description":"To create a CSS gradient, choose linear, radial or conic, set the start and end colours and pick a direction. The generated CSS is ready to paste, and adding intermediate stops produces a smoother ramp between distant hues.\n\nTool page: https://convertto.tech/t/gradient-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GradientGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/gradient-text-generator":{"post":{"operationId":"runGradientTextGenerator","summary":"Gradient Text Generator","description":"Gradient text is a background gradient clipped to the glyph shapes: set the gradient as the element's background-image, clip it to the text with background-clip, and make the text itself transparent so the gradient shows through. The metallic presets work by reversing the gradient partway along, because a highlight band is what reads as a reflection where a plain fade reads as a fade. Keep a solid color as a fallback — if background-clip fails the text becomes invisible rather than merely unstyled.\n\nTool page: https://convertto.tech/t/gradient-text-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GradientTextGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/graphql-formatter":{"post":{"operationId":"runGraphqlFormatter","summary":"GraphQL Formatter","description":"A GraphQL formatter indents a query, mutation or schema so its selection sets are readable, or minifies it by stripping every optional space. Because it tokenises rather than pattern-matching, braces inside string literals and comments cannot corrupt the indentation.\n\nTool page: https://convertto.tech/t/graphql-formatter","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphqlFormatterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/gst-calculator":{"post":{"operationId":"runGstCalculator","summary":"GST Calculator","description":"To add GST, multiply the amount by 1 plus the rate — ₹1,000 at 18% becomes ₹1,180. To remove GST from an inclusive total, divide by that same figure: ₹1,180 ÷ 1.18 = ₹1,000. Subtracting 18% from the inclusive total gives ₹967.60, which is wrong by ₹32.40 and is the most common error in this calculation.\n\nTool page: https://convertto.tech/t/gst-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GstCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/hashtag-generator":{"post":{"operationId":"runHashtagGenerator","summary":"Hashtag Generator","description":"To generate hashtags, enter your keywords or phrases one per line. Spaces and punctuation are removed and each phrase becomes a single hashtag. CamelCase is the default because screen readers can pronounce it as separate words.\n\nTool page: https://convertto.tech/t/hashtag-generator","tags":["social"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashtagGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/heading-structure-validator":{"post":{"operationId":"runHeadingStructureValidator","summary":"Heading Structure Validator","description":"Heading structure must form a logical outline: exactly one H1, no skipped levels, and no empty headings. Screen reader users navigate by heading, so a page that jumps from H1 to H3 loses a rung on the ladder. This validator lists the outline and flags every break against WCAG 1.3.1 and 2.4.6.\n\nTool page: https://convertto.tech/t/heading-structure-validator","tags":["a11y"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadingStructureValidatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/heart-rate-zone-calculator":{"post":{"operationId":"runHeartRateZoneCalculator","summary":"Heart Rate Zone Calculator","description":"To calculate heart rate training zones, enter your age and resting heart rate. Zones are derived with the Karvonen heart-rate-reserve method, which accounts for your fitness level rather than using a flat percentage of maximum heart rate.\n\nTool page: https://convertto.tech/t/heart-rate-zone-calculator","tags":["health"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeartRateZoneCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/hex-to-decimal":{"post":{"operationId":"runHexToDecimal","summary":"Hex to Decimal Converter","description":"To convert hexadecimal to decimal, enter a hex value above with or without a 0x prefix. Hexadecimal digits run 0 to 9 then A to F, and the converter shows the equivalent decimal, binary and octal representations together.\n\nTool page: https://convertto.tech/t/hex-to-decimal","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HexToDecimalInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/hex-to-text":{"post":{"operationId":"runHexToText","summary":"Hex to Text Converter","description":"To convert text to hexadecimal, paste your text and each byte is shown as two hex digits. Decoding accepts hex with spaces, colons, dashes or 0x prefixes and reassembles the original UTF-8 text, so multi-byte characters round-trip correctly.\n\nTool page: https://convertto.tech/t/hex-to-text","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HexToTextInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/hmac-generator":{"post":{"operationId":"runHmacGenerator","summary":"HMAC Generator","description":"To generate an HMAC, enter your message and secret key and pick a hash algorithm. HMAC proves both integrity and authenticity because only someone holding the key can produce a matching signature — which is how webhook payloads from Stripe, GitHub and Slack are verified.\n\nTool page: https://convertto.tech/t/hmac-generator","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HmacGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/html-entity-encode-decode":{"post":{"operationId":"runHtmlEntityEncodeDecode","summary":"HTML Entity Encoder & Decoder","description":"To encode HTML entities, paste text containing angle brackets, ampersands or quotes and they are replaced with safe entity references. This is the standard defence against cross-site scripting when displaying untrusted content inside a web page.\n\nTool page: https://convertto.tech/t/html-entity-encode-decode","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HtmlEntityEncodeDecodeInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/html-formatter":{"post":{"operationId":"runHtmlFormatter","summary":"HTML Formatter","description":"To format HTML, paste your markup and it is re-indented with proper nesting. Prettier understands which elements are whitespace-sensitive, so it will not insert line breaks that would visibly change how inline elements such as span and a are rendered.\n\nTool page: https://convertto.tech/t/html-formatter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HtmlFormatterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/html-landmark-checker":{"post":{"operationId":"runHtmlLandmarkChecker","summary":"HTML Landmark Checker","description":"Landmarks are the regions screen reader users jump between: main, banner, navigation, contentinfo, complementary, search, form and region. This checker reports which are present, flags duplicates of the ones that should appear only once, and warns when a section or form lacks the accessible name it needs to count as a landmark at all.\n\nTool page: https://convertto.tech/t/html-landmark-checker","tags":["a11y"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HtmlLandmarkCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/http-header-analyser":{"post":{"operationId":"runHttpHeaderAnalyser","summary":"HTTP Security Header Analyser","description":"HTTP security headers instruct the browser to enforce protections the server cannot apply alone. This analyser grades pasted response headers against eight of them — CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy and the two cross-origin policies — and flags headers that disclose your software versions.\n\nTool page: https://convertto.tech/t/http-header-analyser","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpHeaderAnalyserInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/http-status-codes":{"post":{"operationId":"runHttpStatusCodes","summary":"HTTP Status Code Reference","description":"To look up an HTTP status code, type the number or a keyword. Each entry explains what the code means and when it applies, including the difference between 301 and 302 redirects and why 401 is about authentication rather than authorisation.\n\nTool page: https://convertto.tech/t/http-status-codes","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpStatusCodesInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/illuminance-converter":{"post":{"operationId":"runIlluminanceConverter","summary":"Illuminance Converter","description":"To convert illuminance, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 5 supported units. Office lighting is typically 300–500 lux; direct sunlight is above 100,000 lux. One foot-candle equals 10.764 lux.\n\nTool page: https://convertto.tech/t/illuminance-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IlluminanceConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/inflation-calculator":{"post":{"operationId":"runInflationCalculator","summary":"Inflation Calculator","description":"To calculate the effect of inflation, enter an amount, two years and an average annual inflation rate. The result shows the equivalent value in the later year, the cumulative inflation over the period, and how much purchasing power was lost.\n\nTool page: https://convertto.tech/t/inflation-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InflationCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/ini-parser":{"post":{"operationId":"runIniParser","summary":"INI & Config File Parser","description":"INI files are section headings in square brackets followed by key/value pairs. This parses them — along with .conf, .cfg and .properties files — into JSON, YAML, TOML or .env format, inferring types so that `port = 8080` becomes a number and `tls = true` becomes a boolean, while a quoted value stays a string.\n\nTool page: https://convertto.tech/t/ini-parser","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IniParserInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/javascript-formatter":{"post":{"operationId":"runJavascriptFormatter","summary":"JavaScript & TypeScript Formatter","description":"To format JavaScript or TypeScript, paste your code and it is parsed into an abstract syntax tree by Prettier and reprinted with consistent style. Because it parses rather than pattern-matches, template literals, JSX and comments survive intact, and a syntax error is reported with its location.\n\nTool page: https://convertto.tech/t/javascript-formatter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JavascriptFormatterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/json-diff":{"post":{"operationId":"runJsonDiff","summary":"JSON Diff","description":"A JSON diff walks two documents in parallel and reports every path where they differ — keys added, keys removed, values changed, and values whose type changed. Arrays can be compared by position or as sets, and the result is also emitted in JSON Patch form.\n\nTool page: https://convertto.tech/t/json-diff","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonDiffInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/json-flattener":{"post":{"operationId":"runJsonFlattener","summary":"JSON Flattener","description":"To flatten JSON, paste a nested object and every leaf value is rewritten with a dot-notation path key such as user.address.city. This makes deeply nested API responses easy to diff, search, load into a spreadsheet or feed into a translation file.\n\nTool page: https://convertto.tech/t/json-flattener","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonFlattenerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/json-formatter":{"post":{"operationId":"runJsonFormatter","summary":"JSON Formatter & Validator","description":"To format JSON, paste it above and it is validated, pretty-printed and analysed instantly. You can then explore it as a collapsible tree, a table of records or a JSONPath query, and malformed input is repaired automatically — trailing commas, comments, single quotes, unquoted keys, Python literals and NDJSON.\n\nTool page: https://convertto.tech/t/json-formatter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonFormatterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/json-merge":{"post":{"operationId":"runJsonMerge","summary":"JSON Merge","description":"JSON merge combines several documents into one, recursing into nested objects so configuration layers accumulate rather than replacing each other wholesale. Later documents win on conflict, and arrays can be replaced, concatenated or unioned depending on what you need.\n\nTool page: https://convertto.tech/t/json-merge","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMergeInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/json-schema-generator":{"post":{"operationId":"runJsonSchemaGenerator","summary":"JSON Schema Generator","description":"A JSON Schema generator infers a schema from example data: it walks the structure, assigns types, detects string formats such as email, date-time, uuid and uri, marks present keys as required, and merges the item types of a mixed array into an anyOf rather than guessing a single type.\n\nTool page: https://convertto.tech/t/json-schema-generator","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonSchemaGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/json-sorter":{"post":{"operationId":"runJsonSorter","summary":"JSON Key Sorter","description":"Sorting JSON keys puts a document into a canonical order so two versions can be compared meaningfully. Object key order is not significant in JSON, so a diff between differently-ordered documents is noise — sorting both first removes it.\n\nTool page: https://convertto.tech/t/json-sorter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonSorterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/json-to-typescript":{"post":{"operationId":"runJsonToTypescript","summary":"JSON to TypeScript Converter","description":"To generate TypeScript from JSON, paste a sample payload above and an interface is inferred from its shape, including nested objects and arrays. The same tool also emits Zod schemas, Go structs, Python dataclasses, Rust serde structs and Kotlin data classes from the same input.\n\nTool page: https://convertto.tech/t/json-to-typescript","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonToTypescriptInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/json-validator":{"post":{"operationId":"runJsonValidator","summary":"JSON Validator","description":"A JSON validator tells you not just that a document is invalid but where. This converts the parser's character offset into a line and column, shows the offending line with a caret under it, and names the likely cause — trailing comma, single quotes, unquoted key or a comment, which cover almost every real JSON error.\n\nTool page: https://convertto.tech/t/json-validator","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonValidatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/jsonpath-tester":{"post":{"operationId":"runJsonpathTester","summary":"JSONPath Tester","description":"To test a JSONPath expression, paste your JSON and enter a path such as $.store.book[*].title. Matches appear immediately with their index, so you can refine wildcards, filters and recursive descent before putting the expression into code.\n\nTool page: https://convertto.tech/t/jsonpath-tester","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonpathTesterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/jwt-decoder":{"post":{"operationId":"runJwtDecoder","summary":"JWT Decoder","description":"To decode a JWT, paste the token above and its header and payload are Base64-decoded and shown as formatted JSON, along with issued-at and expiry timestamps in readable form. Decoding happens entirely in your browser, so the token is never transmitted or logged.\n\nTool page: https://convertto.tech/t/jwt-decoder","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JwtDecoderInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/jwt-verifier":{"post":{"operationId":"runJwtVerifier","summary":"JWT Verifier","description":"To verify a JWT, paste the token and its shared secret. The HS256, HS384 or HS512 signature is recomputed with the Web Crypto API in your browser and compared to the one in the token — nothing is transmitted. Expiry, not-before and issued-at claims are checked against the current time, and RS/ES tokens are refused rather than given a meaningless tick.\n\nTool page: https://convertto.tech/t/jwt-verifier","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JwtVerifierInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/keyword-density-checker":{"post":{"operationId":"runKeywordDensityChecker","summary":"Keyword Density Checker","description":"To check keyword density, paste your content and the tool counts single words and two- and three-word phrases, excluding common stop words. Density above roughly 3% for any single term usually reads as unnatural to both people and search engines.\n\nTool page: https://convertto.tech/t/keyword-density-checker","tags":["seo"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordDensityCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/leap-year-checker":{"post":{"operationId":"runLeapYearChecker","summary":"Leap Year Checker","description":"A year is a leap year if it is divisible by 4, except century years, which must also be divisible by 400. So 2024 and 2000 are leap years but 1900 and 2100 are not. The exception exists because a solar year is 365.2422 days, so adding a day every four years slightly overcorrects.\n\nTool page: https://convertto.tech/t/leap-year-checker","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeapYearCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/leetspeak-converter":{"post":{"operationId":"runLeetspeakConverter","summary":"Leetspeak Converter","description":"To write in leetspeak, paste your text above and choose an intensity. Light mode substitutes only vowels, keeping the text readable, while heavy mode replaces every mapped letter with its numeric or symbolic equivalent for full 1337 styling.\n\nTool page: https://convertto.tech/t/leetspeak-converter","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeetspeakConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/length-converter":{"post":{"operationId":"runLengthConverter","summary":"Length Converter","description":"To convert length, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 14 supported units. The inch is defined as exactly 25.4 mm and the mile as exactly 1609.344 m, so metric–imperial length conversions are exact rather than approximate.\n\nTool page: https://convertto.tech/t/length-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LengthConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/letter-frequency-analyser":{"post":{"operationId":"runLetterFrequencyAnalyser","summary":"Letter Frequency Analyser","description":"Letter frequency analysis counts how often each character appears and compares it to the standard distribution of written English, where E, T and A are most common. It is the classic first step in breaking a substitution cipher and a quick way to check whether text is a pangram.\n\nTool page: https://convertto.tech/t/letter-frequency-analyser","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LetterFrequencyAnalyserInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/line-endings-converter":{"post":{"operationId":"runLineEndingsConverter","summary":"Line Endings Converter","description":"Line endings differ by platform: Unix and macOS use LF, Windows uses CRLF, and classic Mac OS used a bare CR. Mixed endings in one file break diffs, shell scripts and some parsers. This converter normalises them all and can strip trailing whitespace at the same time.\n\nTool page: https://convertto.tech/t/line-endings-converter","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineEndingsConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/line-sorter":{"post":{"operationId":"runLineSorter","summary":"Line Sorter","description":"To sort lines, paste your list above and choose an order: alphabetical, reverse alphabetical, by line length, or simply reversed. Natural order is on by default, so item2 sorts before item10 rather than after it.\n\nTool page: https://convertto.tech/t/line-sorter","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineSorterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/line-wrapper":{"post":{"operationId":"runLineWrapper","summary":"Wrap Lines in Quotes or Brackets","description":"Wrapping lines means adding the same prefix and suffix to each one and joining them with a separator — the fastest way to turn a pasted column of values into a SQL IN clause, a JavaScript array or a CSV row. Ready-made forms for all four are produced alongside your custom result.\n\nTool page: https://convertto.tech/t/line-wrapper","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineWrapperInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/link-text-checker":{"post":{"operationId":"runLinkTextChecker","summary":"Link Text Checker","description":"Screen reader users frequently pull up a list of every link on a page with no surrounding text, so \"click here\" and \"read more\" become meaningless. This checker flags vague wording, empty links, bare URLs read out character by character, identical text pointing to different places, and new tabs opened without warning.\n\nTool page: https://convertto.tech/t/link-text-checker","tags":["a11y"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkTextCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/list-comparison":{"post":{"operationId":"runListComparison","summary":"List Comparison & Set Operations","description":"Comparing two lists means answering four questions: what is in both, what is only in the first, what is only in the second, and what does the combined set look like. Paste one item per line and get all four at once, plus counts of duplicates within each list.\n\nTool page: https://convertto.tech/t/list-comparison","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListComparisonInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/list-randomizer":{"post":{"operationId":"runListRandomizer","summary":"List Randomizer & Shuffler","description":"To shuffle a list, paste one item per line and the order is randomised using a Fisher-Yates shuffle. Leave the seed at zero for cryptographically random results, or set any number to get a repeatable shuffle you can reproduce and share.\n\nTool page: https://convertto.tech/t/list-randomizer","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListRandomizerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/llm-model-comparison":{"post":{"operationId":"runLlmModelComparison","summary":"LLM Model Comparison","description":"This table compares 25 current models from 7 providers on the specifications that decide a choice: price per million input and output tokens, cached-input rate, context window, maximum output, supported modalities and tokeniser. It ranks them by the cost of a workload with your own input-to-output ratio, because a summarisation workload and a generation workload rank models in a completely different order.\n\nTool page: https://convertto.tech/t/llm-model-comparison","tags":["ai"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmModelComparisonInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/llm-vram-calculator":{"post":{"operationId":"runLlmVramCalculator","summary":"LLM VRAM Calculator","description":"A local model needs memory for three things: the weights (parameters × bits per weight ÷ 8), the KV cache (2 × layers × KV heads × head dimension × context length × concurrent sequences × bytes per element), and about a gigabyte of runtime overhead. This calculator computes all three for twelve real architectures at eight quantisation levels, and shows how the requirement grows with context length — the part every VRAM table omits.\n\nTool page: https://convertto.tech/t/llm-vram-calculator","tags":["ai"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmVramCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/llms-txt-generator":{"post":{"operationId":"runLlmsTxtGenerator","summary":"llms.txt Generator","description":"llms.txt is a Markdown file served at the root of your domain that gives AI assistants a curated map of your site: an H1 with the project name, a blockquote summary, and H2-grouped lists of links with descriptions. This generator builds one and validates it against the spec — absolute URLs, descriptions on every link, and an Optional section that a model may skip when context is tight.\n\nTool page: https://convertto.tech/t/llms-txt-generator","tags":["seo"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmsTxtGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/loan-emi-calculator":{"post":{"operationId":"runLoanEmiCalculator","summary":"Loan & EMI Calculator","description":"To calculate loan repayments, enter the amount borrowed, the annual interest rate and the term. The tool uses the standard amortisation formula to give the payment amount, total interest and how the very first payment splits between interest and principal.\n\nTool page: https://convertto.tech/t/loan-emi-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanEmiCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/log-parser":{"post":{"operationId":"runLogParser","summary":"Log File Parser","description":"A log parser turns raw access-log lines into a sortable table. It recognises the Apache and Nginx combined format plus JSON-per-line, extracts the client IP, timestamp, method, path, status and byte count, then summarises traffic by status code, path, client or method with an error rate.\n\nTool page: https://convertto.tech/t/log-parser","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogParserInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/lorem-ipsum-generator":{"post":{"operationId":"runLoremIpsumGenerator","summary":"Lorem Ipsum Generator","description":"To generate lorem ipsum, choose how many paragraphs and sentences you need and pick a format. Output can be plain text, HTML paragraph tags, Markdown or a bullet list. The generator is deterministic, so the same settings always produce identical text.\n\nTool page: https://convertto.tech/t/lorem-ipsum-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoremIpsumGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/lottery-number-generator":{"post":{"operationId":"runLotteryNumberGenerator","summary":"Lottery Number Generator","description":"A lottery number generator draws random lines for a chosen game. It also computes the real odds using the combinations formula — 1 in 13,983,816 for a 6-from-49 draw — and puts them beside comparisons, because the number alone is hard to feel.\n\nTool page: https://convertto.tech/t/lottery-number-generator","tags":["random"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LotteryNumberGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/macro-calculator":{"post":{"operationId":"runMacroCalculator","summary":"Macro Calculator","description":"To calculate macros, enter your daily calorie target and choose a split. Calories are divided into protein, carbohydrate and fat using 4, 4 and 9 kcal per gram respectively, with an automatic deficit or surplus applied for fat loss or muscle gain.\n\nTool page: https://convertto.tech/t/macro-calculator","tags":["health"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MacroCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/markdown-editor":{"post":{"operationId":"runMarkdownEditor","summary":"Markdown Editor & Viewer","description":"This markdown editor renders your document as you type, with a formatting toolbar, a clickable outline, live word count and reading time, and export to .md, standalone HTML or PDF. It supports GitHub Flavored Markdown — tables, task lists, strikethrough and fenced code — and runs entirely in your browser, so nothing you write is uploaded.\n\nTool page: https://convertto.tech/t/markdown-editor","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkdownEditorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"html\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/markdown-formatter":{"post":{"operationId":"runMarkdownFormatter","summary":"Markdown Formatter","description":"To format Markdown, paste your document and heading spacing, list markers, emphasis characters and table alignment are all normalised. Tables are padded so the source is readable even before rendering, which matters for files reviewed in pull requests.\n\nTool page: https://convertto.tech/t/markdown-formatter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkdownFormatterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/markdown-to-html":{"post":{"operationId":"runMarkdownToHtml","summary":"Markdown to HTML Converter","description":"To convert Markdown to HTML, paste your Markdown above and GitHub-flavoured HTML is produced instantly, including tables, fenced code blocks and task lists. Switch direction to convert existing HTML back into clean Markdown for documentation or a CMS migration.\n\nTool page: https://convertto.tech/t/markdown-to-html","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkdownToHtmlInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/markup-margin-calculator":{"post":{"operationId":"runMarkupMarginCalculator","summary":"Markup & Margin Calculator","description":"Markup is profit divided by cost; margin is profit divided by selling price. A 50% markup is only a 33% margin, which is why the two are so often confused and why pricing set against the wrong one falls short. Enter any two of cost, price, markup or margin and get the rest.\n\nTool page: https://convertto.tech/t/markup-margin-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkupMarginCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/media-query-generator":{"post":{"operationId":"runMediaQueryGenerator","summary":"CSS Media Query Generator","description":"To generate a media query, choose whether you want min-width, max-width, a range, or a preference query for dark mode, reduced motion or print. EM units are recommended over pixels because they respect a user's browser font-size setting.\n\nTool page: https://convertto.tech/t/media-query-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaQueryGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/meeting-cost-calculator":{"post":{"operationId":"runMeetingCostCalculator","summary":"Meeting Cost Calculator","description":"A meeting costs the salary of everyone in it for its full duration, plus employment overhead. Enter the number of attendees, their average salary and the length, and this calculator shows the cost per meeting, per attendee and per minute, plus the annual total for a recurring meeting.\n\nTool page: https://convertto.tech/t/meeting-cost-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingCostCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/meta-tag-generator":{"post":{"operationId":"runMetaTagGenerator","summary":"Meta Tag Generator","description":"To generate meta tags, enter your page title, description and canonical URL. The tool outputs the title tag, meta description, full Open Graph markup and Twitter Card tags, and warns you when the title or description exceeds the length search engines display.\n\nTool page: https://convertto.tech/t/meta-tag-generator","tags":["seo"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaTagGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/mime-type-lookup":{"post":{"operationId":"runMimeTypeLookup","summary":"MIME Type Lookup","description":"To find a MIME type, enter a file extension such as .webp or a type such as image/webp. Sending the correct Content-Type header matters because browsers with nosniff enabled will refuse to execute or render a mislabelled file.\n\nTool page: https://convertto.tech/t/mime-type-lookup","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MimeTypeLookupInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/mock-data-generator":{"post":{"operationId":"runMockDataGenerator","summary":"Mock Data Generator","description":"To generate mock data, pick a ready-made schema such as users, orders or products — or define your own columns from over 100 field types — then choose how many rows and which format. Output is available as JSON, CSV, SQL, XML, YAML, TypeScript and more, generated entirely in your browser.\n\nTool page: https://convertto.tech/t/mock-data-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MockDataGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/moon-phase-calculator":{"post":{"operationId":"runMoonPhaseCalculator","summary":"Moon Phase Calculator","description":"The moon phase depends on how far through the 29.53-day synodic month a date falls, measured from a known new moon. This calculator gives the phase name, the illuminated percentage, the moon's age in days, and the dates of the next new and full moons.\n\nTool page: https://convertto.tech/t/moon-phase-calculator","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonPhaseCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/morse-code-translator":{"post":{"operationId":"runMorseCodeTranslator","summary":"Morse Code Translator","description":"To translate Morse code, paste text to encode it into dots and dashes, or paste Morse to decode it back. Letters are separated by spaces and words by a forward slash, which is the standard written convention for Morse.\n\nTool page: https://convertto.tech/t/morse-code-translator","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MorseCodeTranslatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/mortgage-comparison-calculator":{"post":{"operationId":"runMortgageComparisonCalculator","summary":"Mortgage Comparison Calculator","description":"Comparing two mortgage offers means looking past the headline rate to the true total cost: monthly payment, total interest over the term, and arrangement fees. A lower rate with a large fee only wins if you keep the loan long enough to break even, which this calculator works out for you.\n\nTool page: https://convertto.tech/t/mortgage-comparison-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MortgageComparisonCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/multi-encoder":{"post":{"operationId":"runMultiEncoder","summary":"Multi-Format Encoder","description":"A multi-format encoder shows the same text in every common encoding at once — Base64, Base64url, hexadecimal, binary, decimal bytes, URL percent-encoding, HTML entities, Unicode escapes, ROT13 and a data URI — so you can copy whichever you need without switching tools.\n\nTool page: https://convertto.tech/t/multi-encoder","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiEncoderInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/nanoid-generator":{"post":{"operationId":"runNanoidGenerator","summary":"Nano ID Generator","description":"To generate Nano IDs, set the length and alphabet above. A 21-character URL-safe Nano ID carries about 126 bits of entropy — comparable to a UUID v4 — in 21 characters instead of 36, which keeps URLs and database keys noticeably shorter.\n\nTool page: https://convertto.tech/t/nanoid-generator","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NanoidGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/nato-phonetic-alphabet":{"post":{"operationId":"runNatoPhoneticAlphabet","summary":"NATO Phonetic Alphabet Converter","description":"To spell something with the NATO phonetic alphabet, type it above and each letter is replaced with its code word — Alfa, Bravo, Charlie and so on. This is the ICAO spelling alphabet used in aviation, shipping and emergency services worldwide.\n\nTool page: https://convertto.tech/t/nato-phonetic-alphabet","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NatoPhoneticAlphabetInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/neumorphism-generator":{"post":{"operationId":"runNeumorphismGenerator","summary":"Neumorphism Generator","description":"Neumorphism creates depth with two shadows instead of one: a dark shadow on the side away from the light and a light shadow on the side facing it, both in shades of the background colour. The effect only works when the element and its parent share exactly the same background — that is what makes it look moulded from the surface rather than placed on it.\n\nTool page: https://convertto.tech/t/neumorphism-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NeumorphismGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/npv-irr-calculator":{"post":{"operationId":"runNpvIrrCalculator","summary":"NPV & IRR Calculator","description":"Net present value discounts every future cash flow back to today at a chosen rate and subtracts the initial investment; a positive NPV means the project beats that rate. The internal rate of return is the discount rate at which NPV becomes exactly zero, found here by bisection.\n\nTool page: https://convertto.tech/t/npv-irr-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NpvIrrCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/nth-child-generator":{"post":{"operationId":"runNthChildGenerator","summary":"nth-child Selector Generator","description":"The an + b formula is evaluated with n counting up from zero, not one, which is why 3n + 1 selects the 1st, 4th and 7th items rather than the 3rd, 6th and 9th. Indexes outside the list simply match nothing, and that is what makes negative steps useful: -n + 3 counts down and selects the first three. :nth-child counts every sibling regardless of type, while :nth-of-type counts only siblings of the same element — a difference that quietly breaks selectors when a heading is added to a list of paragraphs.\n\nTool page: https://convertto.tech/t/nth-child-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NthChildGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/number-base-converter":{"post":{"operationId":"runNumberBaseConverter","summary":"Number Base Converter","description":"To convert a number between bases, enter the value, pick the base it is written in and the base you want. This converter supports every base from 2 to 36 and uses arbitrary-precision arithmetic, so numbers far larger than 64 bits convert exactly without rounding.\n\nTool page: https://convertto.tech/t/number-base-converter","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NumberBaseConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/number-to-words":{"post":{"operationId":"runNumberToWords","summary":"Number to Words Converter","description":"To write a number in words, enter it above and the English spelling appears instantly. The converter handles decimals, negative values and numbers into the trillions, and can output plain, Title Case or uppercase text for cheques and contracts.\n\nTool page: https://convertto.tech/t/number-to-words","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NumberToWordsInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/octal-to-decimal":{"post":{"operationId":"runOctalToDecimal","summary":"Octal to Decimal Converter","description":"To convert octal to decimal, enter a base-8 value above using digits 0 to 7. Octal is still used for Unix file permissions, where each digit encodes read, write and execute bits for one class of user.\n\nTool page: https://convertto.tech/t/octal-to-decimal","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OctalToDecimalInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/ordinal-number-converter":{"post":{"operationId":"runOrdinalNumberConverter","summary":"Ordinal Number Converter","description":"English ordinals take st, nd or rd after 1, 2 and 3 — except for 11, 12 and 13, which take th despite their final digit. That exception repeats every hundred, so 111 is 111th but 121 is 121st. This converter handles it, along with written-out words and Roman numerals.\n\nTool page: https://convertto.tech/t/ordinal-number-converter","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdinalNumberConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/palette-accessibility-grader":{"post":{"operationId":"runPaletteAccessibilityGrader","summary":"Palette Accessibility Grader","description":"A palette is accessible only in combination with its backgrounds. This grader computes the WCAG contrast ratio for every foreground and background pair, then grades each against the AA threshold of 4.5:1 for body text, 3:1 for large text and non-text elements, and the AAA threshold of 7:1.\n\nTool page: https://convertto.tech/t/palette-accessibility-grader","tags":["a11y"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaletteAccessibilityGraderInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/passphrase-generator":{"post":{"operationId":"runPassphraseGenerator","summary":"Passphrase Generator","description":"To generate a passphrase, choose how many words you want and a separator. Words are picked using cryptographically secure randomness in the Diceware style, producing phrases that are far easier to remember and type than random character strings of equivalent strength.\n\nTool page: https://convertto.tech/t/passphrase-generator","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassphraseGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/password-generator":{"post":{"operationId":"runPasswordGenerator","summary":"Password Generator","description":"To generate a strong password, set the length and character sets above and press generate. Passwords use crypto.getRandomValues, the browser's cryptographically secure random source, and are created entirely on your device — never sent to or stored on a server.\n\nTool page: https://convertto.tech/t/password-generator","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/password-policy-tester":{"post":{"operationId":"runPasswordPolicyTester","summary":"Password Policy Tester","description":"A password policy tester checks a password against length and composition rules. It also reports the theoretical entropy and an estimated crack time — and explains that NIST dropped composition rules in 2017, because requiring a symbol and a digit produces predictable passwords like Password1! rather than strong ones.\n\nTool page: https://convertto.tech/t/password-policy-tester","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordPolicyTesterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/password-strength-checker":{"post":{"operationId":"runPasswordStrengthChecker","summary":"Password Strength Checker","description":"To check password strength, type it above and the tool estimates entropy from length and character variety, then converts that into an offline crack time. Analysis runs entirely in your browser and the password is never transmitted, logged or stored.\n\nTool page: https://convertto.tech/t/password-strength-checker","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordStrengthCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/percentage-calculator":{"post":{"operationId":"runPercentageCalculator","summary":"Percentage Calculator","description":"To calculate a percentage, choose the type of question and enter your two numbers. The tool covers percentage of a value, percentage change, increases and decreases, and reverse percentages, and shows the working so you can check the arithmetic.\n\nTool page: https://convertto.tech/t/percentage-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PercentageCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/percentage-converter":{"post":{"operationId":"runPercentageConverter","summary":"Percentage Converter","description":"To convert a percentage, enter the value and say what form it is in. The tool shows the equivalent percentage, decimal, simplified fraction, ratio and basis points at once, which is useful when reading financial documents that mix these units.\n\nTool page: https://convertto.tech/t/percentage-converter","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PercentageConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/permutation-combination-calculator":{"post":{"operationId":"runPermutationCombinationCalculator","summary":"Permutation & Combination Calculator","description":"To calculate permutations and combinations, enter the total number of items and how many you are choosing. Permutations count ordered arrangements, combinations count unordered selections, and the tool shows both alongside the relevant factorials.\n\nTool page: https://convertto.tech/t/permutation-combination-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermutationCombinationCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/pig-latin-translator":{"post":{"operationId":"runPigLatinTranslator","summary":"Pig Latin Translator","description":"Pig Latin moves the opening consonant sound of each word to the end and adds \"ay\"; words starting with a vowel take \"way\" instead. This translator handles both directions and offers the two common rules — moving the entire consonant cluster, or only the first letter.\n\nTool page: https://convertto.tech/t/pig-latin-translator","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PigLatinTranslatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/power-converter":{"post":{"operationId":"runPowerConverter","summary":"Power Converter","description":"To convert power, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 7 supported units. Metric horsepower (PS, 735.5 W) and mechanical horsepower (745.7 W) differ by about 1.4%, which is why car specs vary between markets.\n\nTool page: https://convertto.tech/t/power-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PowerConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/pregnancy-due-date-calculator":{"post":{"operationId":"runPregnancyDueDateCalculator","summary":"Pregnancy Due Date Calculator","description":"A due date is estimated as 280 days from the first day of the last menstrual period, or 266 days from conception — a rule of thumb from the 1800s known as Naegele's rule. It assumes a 28-day cycle with ovulation on day 14, so a longer or shorter cycle shifts the date. Fewer than 5% of babies are born on the estimated date.\n\nTool page: https://convertto.tech/t/pregnancy-due-date-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PregnancyDueDateCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/pressure-converter":{"post":{"operationId":"runPressureConverter","summary":"Pressure Converter","description":"To convert pressure, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 10 supported units. Standard atmospheric pressure is 101,325 Pa — that is 1.01325 bar or 14.696 psi.\n\nTool page: https://convertto.tech/t/pressure-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PressureConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/prime-number-checker":{"post":{"operationId":"runPrimeNumberChecker","summary":"Prime Number Checker & Factoriser","description":"To check whether a number is prime, enter it above. The tool performs trial division up to the square root and returns the full prime factorisation in exponent notation, along with the total number of divisors.\n\nTool page: https://convertto.tech/t/prime-number-checker","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrimeNumberCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/profit-margin-calculator":{"post":{"operationId":"runProfitMarginCalculator","summary":"Profit Margin & Markup Calculator","description":"To calculate profit margin, enter your cost and selling price. Margin expresses profit as a percentage of the selling price, while markup expresses it as a percentage of cost. A 50% markup is only a 33% margin, which is why the distinction matters when pricing.\n\nTool page: https://convertto.tech/t/profit-margin-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfitMarginCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/punycode-converter":{"post":{"operationId":"runPunycodeConverter","summary":"Punycode Converter","description":"To convert a domain to Punycode, enter an internationalised domain name and the ASCII-compatible xn-- form appears. DNS only supports ASCII, so every non-Latin domain is stored in this encoded form while browsers display the readable Unicode version.\n\nTool page: https://convertto.tech/t/punycode-converter","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PunycodeConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/px-rem-converter":{"post":{"operationId":"runPxRemConverter","summary":"PX to REM Converter","description":"To convert pixels to rem, enter a pixel value and your root font size, which is 16px by default in every browser. REM units scale with the user's browser font-size preference, which is why they are the accessible choice for typography and spacing.\n\nTool page: https://convertto.tech/t/px-rem-converter","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PxRemConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/quadratic-equation-solver":{"post":{"operationId":"runQuadraticEquationSolver","summary":"Quadratic Equation Solver","description":"To solve a quadratic equation, enter the coefficients a, b and c from ax² + bx + c = 0. The solver reports the discriminant, which determines whether there are two real roots, one repeated root or a complex conjugate pair, plus the vertex of the parabola.\n\nTool page: https://convertto.tech/t/quadratic-equation-solver","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuadraticEquationSolverInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/query-string-converter":{"post":{"operationId":"runQueryStringConverter","summary":"Query String to JSON Converter","description":"To convert a query string to JSON, paste a URL or the query portion and each parameter becomes a key. Repeated keys and bracket notation collapse into arrays, and percent-encoded values are decoded, so the JSON reflects what the server actually receives.\n\nTool page: https://convertto.tech/t/query-string-converter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryStringConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/quoted-printable":{"post":{"operationId":"runQuotedPrintable","summary":"Quoted-Printable Encoder & Decoder","description":"To encode quoted-printable, paste text containing non-ASCII characters and each byte outside the printable range becomes an equals sign followed by two hex digits. Lines are soft-wrapped at 76 characters, as required by the MIME specification for email.\n\nTool page: https://convertto.tech/t/quoted-printable","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotedPrintableInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/random-color-generator":{"post":{"operationId":"runRandomColorGenerator","summary":"Random Colour Generator","description":"A random colour generator produces colours either freely or within a scheme. Pastel, vivid and dark constrain saturation and lightness; analogous, complementary, triadic and monochrome build a harmony around a base colour by rotating its hue on the colour wheel.\n\nTool page: https://convertto.tech/t/random-color-generator","tags":["color"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RandomColorGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/random-date-generator":{"post":{"operationId":"runRandomDateGenerator","summary":"Random Date Generator","description":"A random date generator produces dates uniformly distributed across a range, optionally restricted to weekdays. Output in ISO, US, European, long or Unix timestamp form, seeded so the same settings always produce the same dates.\n\nTool page: https://convertto.tech/t/random-date-generator","tags":["random"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RandomDateGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/random-number-generator":{"post":{"operationId":"runRandomNumberGenerator","summary":"Random Number Generator","description":"To generate random numbers, set a minimum, maximum and how many you want. Values are drawn from the browser's cryptographically secure random source rather than Math.random, and the no-repeats option guarantees distinct values for draws and sampling.\n\nTool page: https://convertto.tech/t/random-number-generator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RandomNumberGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/random-picker":{"post":{"operationId":"runRandomPicker","summary":"Random Picker & Team Generator","description":"To pick randomly from a list, paste your entries one per line and choose whether to pick winners, split into teams or generate a running order. Selection uses an unbiased Fisher-Yates shuffle driven by the browser's cryptographic random source.\n\nTool page: https://convertto.tech/t/random-picker","tags":["random"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RandomPickerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/random-string-generator":{"post":{"operationId":"runRandomStringGenerator","summary":"Random String Generator","description":"To generate random strings, choose a length, a quantity and a character set. All values come from crypto.getRandomValues rather than Math.random, so the output is suitable for API keys, session tokens and anything else that must be unguessable.\n\nTool page: https://convertto.tech/t/random-string-generator","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RandomStringGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/random-team-generator":{"post":{"operationId":"runRandomTeamGenerator","summary":"Random Team Generator","description":"A team generator shuffles a list of people and deals them out so team sizes differ by at most one. Split by the number of teams you want or by how many people should be in each, and set a seed to make the draw reproducible from a shared link.\n\nTool page: https://convertto.tech/t/random-team-generator","tags":["random"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RandomTeamGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/ratio-calculator":{"post":{"operationId":"runRatioCalculator","summary":"Ratio Calculator","description":"To work with ratios, choose whether to simplify, scale or solve a proportion. Simplification handles decimals by scaling to whole numbers first, and the result is also shown as a fraction, decimal, percentage and as parts of the whole.\n\nTool page: https://convertto.tech/t/ratio-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatioCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/rd-calculator":{"post":{"operationId":"runRdCalculator","summary":"RD Calculator","description":"A recurring deposit is calculated instalment by instalment: each monthly payment compounds quarterly for however long it stays invested, then the results are summed. ₹5,000 a month at 6.8% for five years deposits ₹3,00,000 and matures at roughly ₹3,57,000 — a return that looks lower than the rate because the average instalment was only invested for half the term.\n\nTool page: https://convertto.tech/t/rd-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RdCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/readability-scorer":{"post":{"operationId":"runReadabilityScorer","summary":"Readability Score Checker","description":"A readability score estimates how hard text is to read from sentence length and word complexity. This tool reports Flesch Reading Ease plus five grade-level formulas — Flesch-Kincaid, Gunning Fog, SMOG, Coleman-Liau and ARI — along with the sentence and syllable statistics that produce them.\n\nTool page: https://convertto.tech/t/readability-scorer","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadabilityScorerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/redirect-generator":{"post":{"operationId":"runRedirectGenerator","summary":"Redirect Rule Generator","description":"To create a redirect rule, enter the old and new paths and pick your server. Rules are generated for Nginx, Apache, Netlify, Vercel and Next.js. Use 301 for permanent moves so search engines transfer ranking signals to the new URL.\n\nTool page: https://convertto.tech/t/redirect-generator","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/regex-explainer":{"post":{"operationId":"runRegexExplainer","summary":"Regex Explainer","description":"A regex explainer tokenises a regular expression and describes each part in plain English — anchors, character classes, quantifiers, groups, lookarounds and back-references — so you can read a pattern someone else wrote, or confirm that yours says what you meant.\n\nTool page: https://convertto.tech/t/regex-explainer","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegexExplainerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/regex-tester":{"post":{"operationId":"runRegexTester","summary":"Regex Tester","description":"To test a regular expression, enter your pattern and sample text. Every match is listed with its position and all capture groups, including named groups. Patterns use JavaScript regex syntax, so what works here works in Node and the browser.\n\nTool page: https://convertto.tech/t/regex-tester","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegexTesterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/remove-accents":{"post":{"operationId":"runRemoveAccents","summary":"Remove Accents & Diacritics","description":"To remove accents, paste text above and every accented character is decomposed and stripped back to its base ASCII letter. Ligatures and special letters that have no decomposition, such as ß, æ and ø, are mapped explicitly to their conventional ASCII equivalents.\n\nTool page: https://convertto.tech/t/remove-accents","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveAccentsInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/remove-duplicate-lines":{"post":{"operationId":"runRemoveDuplicateLines","summary":"Remove Duplicate Lines","description":"To remove duplicate lines, paste your list above. The first occurrence of each unique line is kept and later repeats are dropped. You can match case-insensitively and optionally sort the result alphabetically instead of preserving the original order.\n\nTool page: https://convertto.tech/t/remove-duplicate-lines","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveDuplicateLinesInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/remove-line-breaks":{"post":{"operationId":"runRemoveLineBreaks","summary":"Remove Line Breaks","description":"To remove line breaks, paste your multi-line text above and choose how the lines should be joined — with a space, a comma, a pipe or nothing at all. Empty lines are dropped and each line is trimmed before joining.\n\nTool page: https://convertto.tech/t/remove-line-breaks","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveLineBreaksInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/rent-vs-buy-calculator":{"post":{"operationId":"runRentVsBuyCalculator","summary":"Rent vs Buy Calculator","description":"Renting versus buying comes down to net cost: what you pay out, minus what you get back. Buying recovers equity but pays interest and maintenance; renting pays no interest but recovers nothing, though the deposit can stay invested. This calculator models both over a period you choose.\n\nTool page: https://convertto.tech/t/rent-vs-buy-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentVsBuyCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/retirement-withdrawal-calculator":{"post":{"operationId":"runRetirementWithdrawalCalculator","summary":"Retirement Withdrawal Calculator","description":"A safe withdrawal rate is the percentage of a retirement pot you can take in the first year, rising with inflation thereafter, without running out. The well-known 4% rule assumes a 30-year retirement and historical market returns; this calculator lets you test other rates, returns and inflation assumptions.\n\nTool page: https://convertto.tech/t/retirement-withdrawal-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetirementWithdrawalCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/robots-txt-generator":{"post":{"operationId":"runRobotsTxtGenerator","summary":"robots.txt Generator","description":"To generate a robots.txt, choose whether crawlers are allowed by default and list any paths to disallow. The file is written to the standard format with your sitemap reference included, plus optional rules for AI training crawlers.\n\nTool page: https://convertto.tech/t/robots-txt-generator","tags":["seo"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RobotsTxtGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/roi-calculator":{"post":{"operationId":"runRoiCalculator","summary":"ROI Calculator","description":"To calculate return on investment, enter what you put in, what it is worth now and how long you held it. Total ROI shows the overall percentage gain, while the annualised CAGR accounts for compounding and is the figure to use when comparing investments of different lengths.\n\nTool page: https://convertto.tech/t/roi-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoiCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/roman-numeral-converter":{"post":{"operationId":"runRomanNumeralConverter","summary":"Roman Numeral Converter","description":"To convert roman numerals, enter a number to get its roman form, or a roman numeral to get its value. The converter covers 1 to 3999 and validates subtractive notation, so it rejects malformed input like IIII or IC and suggests the correct form.\n\nTool page: https://convertto.tech/t/roman-numeral-converter","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RomanNumeralConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/rot13-rotn-cipher":{"post":{"operationId":"runRot13RotnCipher","summary":"ROT13 & ROT-N Cipher","description":"ROT-N shifts every letter forward by a fixed number of places, wrapping around at the end of the alphabet. ROT13 is the best-known variant because shifting 13 places twice returns the original text. ROT47 does the same across all printable ASCII, so it also transforms digits and punctuation.\n\nTool page: https://convertto.tech/t/rot13-rotn-cipher","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rot13RotnCipherInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/running-pace-calculator":{"post":{"operationId":"runRunningPaceCalculator","summary":"Running Pace Calculator","description":"To calculate running pace, enter the distance you covered and your finishing time. The tool returns pace per kilometre and per mile, your average speed, and projected finish times for 5K, 10K, half marathon and marathon at that same pace.\n\nTool page: https://convertto.tech/t/running-pace-calculator","tags":["health"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunningPaceCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/salary-converter":{"post":{"operationId":"runSalaryConverter","summary":"Salary Converter","description":"To convert a salary, enter an amount and say what period it covers, then set your working hours. The tool converts between hourly, daily, weekly, monthly and annual pay. All figures are gross, before tax and deductions.\n\nTool page: https://convertto.tech/t/salary-converter","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalaryConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sample-api-response-generator":{"post":{"operationId":"runSampleApiResponseGenerator","summary":"Sample API Response Generator","description":"A sample API response generator builds realistic JSON payloads in the shapes real APIs use: a paginated REST collection, a single resource, a success envelope, JSON:API, a GraphQL data response, cursor pagination, an error object, or RFC 9457 problem details — complete with links, meta blocks and request identifiers.\n\nTool page: https://convertto.tech/t/sample-api-response-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleApiResponseGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sample-dataset-generator":{"post":{"operationId":"runSampleDatasetGenerator","summary":"Sample Dataset Generator","description":"Sample datasets are ready-made tables of realistic test data — users, employees, customers, products, orders, transactions, blog posts, analytics events, IoT readings, inventory, support tickets and file records. Choose a dataset, a row count and a format, and download it as CSV, JSON, SQL, XML or YAML.\n\nTool page: https://convertto.tech/t/sample-dataset-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleDatasetGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sample-json-generator":{"post":{"operationId":"runSampleJsonGenerator","summary":"Sample JSON Generator","description":"To generate sample JSON from a schema, paste a JSON Schema and the generator walks it to build documents that satisfy every constraint — the declared types, enum values, string formats such as email or date-time, numeric minimums and maximums, array lengths and nested objects, including local $ref pointers.\n\nTool page: https://convertto.tech/t/sample-json-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleJsonGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sample-log-generator":{"post":{"operationId":"runSampleLogGenerator","summary":"Sample Log File Generator","description":"A sample log generator produces realistic log files in Apache combined or common format, structured JSON, syslog RFC 3164, logfmt or an application log with levels. Set the line count, time span, distinct client IP pool and error rate, and the generated traffic mirrors the shape of a real access log.\n\nTool page: https://convertto.tech/t/sample-log-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleLogGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sample-markdown-generator":{"post":{"operationId":"runSampleMarkdownGenerator","summary":"Sample Markdown Generator","description":"A sample Markdown generator produces documents that exercise the full syntax — headings, emphasis, ordered and nested lists, tables, fenced code blocks, blockquotes, task lists, footnotes, images, links and horizontal rules — so you can check that a renderer, converter or style sheet handles every construct.\n\nTool page: https://convertto.tech/t/sample-markdown-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleMarkdownGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sample-person-generator":{"post":{"operationId":"runSamplePersonGenerator","summary":"Random Person Generator","description":"A random person generator produces complete fictional profiles — name, username, email, phone, date of birth, address, job title, company, bank details and a short bio — with every field internally consistent. Use them to populate a staging database, design realistic mockups, or test signup and profile forms.\n\nTool page: https://convertto.tech/t/sample-person-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamplePersonGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sample-sql-generator":{"post":{"operationId":"runSampleSqlGenerator","summary":"Sample SQL Data Generator","description":"A SQL seed data generator produces CREATE TABLE and INSERT statements filled with realistic values. Choose a table shape, a row count and a dialect — PostgreSQL, MySQL, SQLite or SQL Server — and column types, identifier quoting and boolean handling are all adjusted to match that dialect.\n\nTool page: https://convertto.tech/t/sample-sql-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleSqlGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/savings-goal-calculator":{"post":{"operationId":"runSavingsGoalCalculator","summary":"Savings Goal Calculator","description":"To plan a savings goal, enter your target, what you have already saved, your monthly contribution and the expected return. The calculator steps month by month to find when you reach the goal, and also shows what monthly amount would get you there in five years.\n\nTool page: https://convertto.tech/t/savings-goal-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavingsGoalCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/schema-markup-generator":{"post":{"operationId":"runSchemaMarkupGenerator","summary":"Schema Markup Generator","description":"To generate schema markup, choose a type and fill in the details. The tool outputs valid JSON-LD wrapped in a script tag, ready to paste into your page head. JSON-LD is the format Google explicitly recommends over microdata or RDFa.\n\nTool page: https://convertto.tech/t/schema-markup-generator","tags":["seo"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaMarkupGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/scientific-notation-converter":{"post":{"operationId":"runScientificNotationConverter","summary":"Scientific Notation Converter","description":"To convert scientific notation, enter a decimal number to express it as a coefficient times a power of ten, or enter a value like 4.2e-4 to expand it. The tool also shows engineering notation, where the exponent is always a multiple of three.\n\nTool page: https://convertto.tech/t/scientific-notation-converter","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScientificNotationConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/secret-santa-generator":{"post":{"operationId":"runSecretSantaGenerator","summary":"Secret Santa Generator","description":"A Secret Santa generator produces a derangement — an assignment where nobody draws themselves. It also honours exclusions so couples are not paired, and retries until it finds a valid draw or determines that the exclusions make one impossible.\n\nTool page: https://convertto.tech/t/secret-santa-generator","tags":["random"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretSantaGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/semver-checker":{"post":{"operationId":"runSemverChecker","summary":"Semantic Version Checker","description":"Semantic version ranges decide which releases an installer accepts. The caret allows anything that does not change the leftmost non-zero number, the tilde allows patch changes only, and pre-releases always sort below the matching release. This tool tests a list against a range, sorts by precedence, or compares versions directly.\n\nTool page: https://convertto.tech/t/semver-checker","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SemverCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sentence-splitter":{"post":{"operationId":"runSentenceSplitter","summary":"Sentence Splitter","description":"Splitting text into sentences is harder than cutting on every full stop, because abbreviations, decimals and initials all contain one. This tool protects around 20 common abbreviations, decimal numbers and initials before splitting, then reports the length of each sentence so you can find the ones worth shortening.\n\nTool page: https://convertto.tech/t/sentence-splitter","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SentenceSplitterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/serp-preview":{"post":{"operationId":"runSerpPreview","summary":"Google SERP Preview","description":"To preview a Google snippet, enter your title tag, URL and meta description. The tool shows what will actually be displayed after truncation on desktop or mobile, and flags whether each element fits within the space Google typically allocates.\n\nTool page: https://convertto.tech/t/serp-preview","tags":["seo"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SerpPreviewInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/shoe-size-converter":{"post":{"operationId":"runShoeSizeConverter","summary":"Shoe Size Converter","description":"To convert shoe size, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 7 supported units. Shoe sizing is approximate and varies by brand. These conversions use foot length in millimetres (Mondopoint) as the common base — always check the maker's own chart before buying.\n\nTool page: https://convertto.tech/t/shoe-size-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoeSizeConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/simple-interest-calculator":{"post":{"operationId":"runSimpleInterestCalculator","summary":"Simple Interest Calculator","description":"To calculate simple interest, enter the principal, annual rate and time in years. Simple interest applies only to the original principal, so it grows linearly — the tool also shows what compound interest would have produced, which is almost always more.\n\nTool page: https://convertto.tech/t/simple-interest-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimpleInterestCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sip-calculator":{"post":{"operationId":"runSipCalculator","summary":"SIP Calculator","description":"A SIP calculator projects the value of investing a fixed amount every month at an assumed rate of return. It compounds each contribution for the months remaining, optionally increasing the amount each year, and separates how much you paid in from how much came from growth.\n\nTool page: https://convertto.tech/t/sip-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SipCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sitemap-generator":{"post":{"operationId":"runSitemapGenerator","summary":"XML Sitemap Generator","description":"To generate an XML sitemap, paste your URLs one per line. Each entry is written with a lastmod date, change frequency and priority in the sitemaps.org format. URLs are validated first, so a malformed entry is reported rather than silently producing an invalid file.\n\nTool page: https://convertto.tech/t/sitemap-generator","tags":["seo"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SitemapGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sleep-calculator":{"post":{"operationId":"runSleepCalculator","summary":"Sleep Cycle Calculator","description":"To find the best time to sleep or wake, enter your target time. Sleep runs in roughly 90-minute cycles, and waking at the end of a cycle rather than mid-cycle usually feels less groggy. An extra 15 minutes is added for the time it takes to fall asleep.\n\nTool page: https://convertto.tech/t/sleep-calculator","tags":["health"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SleepCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/slug-generator":{"post":{"operationId":"runSlugGenerator","summary":"URL Slug Generator","description":"To create a URL slug, paste your title above. Accented characters are transliterated to ASCII, punctuation and symbols are removed, spaces become hyphens, and the result is truncated on a word boundary so the slug never ends mid-word.\n\nTool page: https://convertto.tech/t/slug-generator","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlugGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/social-character-counter":{"post":{"operationId":"runSocialCharacterCounter","summary":"Social Media Character Counter","description":"To check a post length, paste your text and choose a platform. Characters are counted by Unicode code point so emoji count as one, matching how the platforms themselves count. Hashtags, mentions and links are tallied separately.\n\nTool page: https://convertto.tech/t/social-character-counter","tags":["social"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialCharacterCounterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/speed-converter":{"post":{"operationId":"runSpeedConverter","summary":"Speed Converter","description":"To convert speed, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 7 supported units. A knot is one nautical mile per hour — 1.852 km/h exactly — and remains standard in aviation and shipping.\n\nTool page: https://convertto.tech/t/speed-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeedConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sql-formatter":{"post":{"operationId":"runSqlFormatter","summary":"SQL Formatter","description":"To format SQL, paste your query above and it is re-indented with each clause on its own line. Choose your dialect so that database-specific syntax such as BigQuery backticks or SQL Server brackets is parsed correctly rather than mangled.\n\nTool page: https://convertto.tech/t/sql-formatter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SqlFormatterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sql-in-clause-builder":{"post":{"operationId":"runSqlInClauseBuilder","summary":"SQL IN Clause Builder","description":"A SQL IN clause builder turns a pasted column of values into correctly quoted SQL. It detects whether the values are numeric or textual, escapes embedded single quotes, removes duplicates, and can split the list into batches — necessary because Oracle rejects IN lists longer than 1,000 items.\n\nTool page: https://convertto.tech/t/sql-in-clause-builder","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SqlInClauseBuilderInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/statistics-calculator":{"post":{"operationId":"runStatisticsCalculator","summary":"Mean, Median & Mode Calculator","description":"To calculate the mean, median and mode, paste your numbers separated by spaces, commas or new lines. The tool also returns range, quartiles, interquartile range and both sample and population standard deviation, so you do not need to know which one you need in advance.\n\nTool page: https://convertto.tech/t/statistics-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatisticsCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/string-byte-counter":{"post":{"operationId":"runStringByteCounter","summary":"String Byte Size Calculator","description":"The size of a string depends on the encoding. This tool reports UTF-8, UTF-16 and UTF-32 byte counts alongside JavaScript's string length, the Unicode code point count and the number of grapheme clusters — the last being what a person actually calls a character.\n\nTool page: https://convertto.tech/t/string-byte-counter","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StringByteCounterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/string-escaper":{"post":{"operationId":"runStringEscaper","summary":"String Escaper & Unescaper","description":"To escape a string, paste it above and choose the target format. The tool handles JSON and JavaScript string literals, CSV fields, SQL single-quoted values, XML and HTML entities, POSIX shell quoting and regular-expression metacharacters, and can unescape JSON back to plain text.\n\nTool page: https://convertto.tech/t/string-escaper","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StringEscaperInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/subtitle-converter":{"post":{"operationId":"runSubtitleConverter","summary":"Subtitle Converter","description":"Subtitle formats differ in small but breaking ways: SRT uses a comma before milliseconds and numbers each cue, WebVTT uses a dot and requires a WEBVTT header, and ASS carries styling in a script header. This converter parses all of them into a common model and writes any of them back out.\n\nTool page: https://convertto.tech/t/subtitle-converter","tags":["media"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubtitleConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/subtitle-merger":{"post":{"operationId":"runSubtitleMerger","summary":"Subtitle Merger","description":"Merging subtitles serves two purposes: stacking two languages into bilingual cues for language learning, or joining files for a video split across parts. Bilingual merging pairs cues by timing overlap rather than by index, because translated files rarely share the same cue boundaries.\n\nTool page: https://convertto.tech/t/subtitle-merger","tags":["media"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubtitleMergerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/subtitle-quality-checker":{"post":{"operationId":"runSubtitleQualityChecker","summary":"Subtitle Quality Checker","description":"Subtitle quality standards exist because unreadable subtitles are worse than none. This checker tests reading speed in characters per second, characters per line, lines per cue, minimum and maximum duration, overlapping cues and gaps too small to register — against the values the BBC and Netflix publish.\n\nTool page: https://convertto.tech/t/subtitle-quality-checker","tags":["media"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubtitleQualityCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/subtitle-shifter":{"post":{"operationId":"runSubtitleShifter","summary":"Subtitle Sync & Shifter","description":"Out-of-sync subtitles have two different causes. A constant offset means every cue is early or late by the same amount and needs shifting. Drift that grows through the film means the subtitles were timed for a different frame rate, and needs the timings stretched by a speed factor.\n\nTool page: https://convertto.tech/t/subtitle-shifter","tags":["media"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubtitleShifterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/sunrise-sunset-calculator":{"post":{"operationId":"runSunriseSunsetCalculator","summary":"Sunrise & Sunset Calculator","description":"Sunrise and sunset times depend on latitude, longitude and the date, because the sun's declination changes through the year. This calculator uses the NOAA solar position algorithm to give official sunrise and sunset plus civil, nautical and astronomical twilight, golden hour, solar noon and total day length.\n\nTool page: https://convertto.tech/t/sunrise-sunset-calculator","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunriseSunsetCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/table-to-markdown":{"post":{"operationId":"runTableToMarkdown","summary":"CSV to Markdown Table","description":"Converting a table to Markdown means padding each column to a consistent width and adding the alignment row that Markdown requires. This tool accepts CSV, TSV or data pasted straight from a spreadsheet, right-aligns numeric columns automatically, and also emits HTML and reStructuredText.\n\nTool page: https://convertto.tech/t/table-to-markdown","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TableToMarkdownInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/tabs-spaces-converter":{"post":{"operationId":"runTabsSpacesConverter","summary":"Tabs to Spaces Converter","description":"Converting indentation between tabs and spaces should only touch the leading whitespace on each line. Tabs or spaces used inside a line to align comments, table columns or string contents must be left alone or the alignment breaks — which is why this converter defaults to leading-only.\n\nTool page: https://convertto.tech/t/tabs-spaces-converter","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TabsSpacesConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/tailwind-shade-generator":{"post":{"operationId":"runTailwindShadeGenerator","summary":"Tailwind Colour Shade Generator","description":"To generate a Tailwind colour scale, pick your brand colour and it becomes the 500 shade, with 50 through 950 derived by adjusting lightness and desaturating the pale end. Output is ready to paste into a Tailwind v4 @theme block or a v3 config file.\n\nTool page: https://convertto.tech/t/tailwind-shade-generator","tags":["color"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TailwindShadeGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/temperature-converter":{"post":{"operationId":"runTemperatureConverter","summary":"Temperature Converter","description":"To convert temperature, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 5 supported units. Celsius and Fahrenheit read the same at −40°. Absolute zero is 0 K, −273.15 °C or −459.67 °F.\n\nTool page: https://convertto.tech/t/temperature-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemperatureConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/temperature-top-p-visualizer":{"post":{"operationId":"runTemperatureTopPVisualizer","summary":"Temperature & Top-p Visualizer","description":"Temperature divides the logits before the softmax — below 1 sharpens the distribution, above 1 flattens it, and 0 becomes greedy decoding. Top-p keeps the smallest set of tokens summing to p, top-k keeps a fixed count, and min-p keeps anything above a fraction of the leading token. This visualiser applies them in the order real samplers do and shows exactly which tokens survive.\n\nTool page: https://convertto.tech/t/temperature-top-p-visualizer","tags":["ai"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemperatureTopPVisualizerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/test-credit-card-generator":{"post":{"operationId":"runTestCreditCardGenerator","summary":"Test Credit Card Number Generator","description":"A test credit card number passes the Luhn checksum and matches a brand's prefix and length rules, so a checkout form accepts it as well-formed — but it is not tied to any account and will always be declined by a real payment processor. Use these to test client-side card validation and form handling.\n\nTool page: https://convertto.tech/t/test-credit-card-generator","tags":["samples"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCreditCardGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/text-cleaner":{"post":{"operationId":"runTextCleaner","summary":"Text Cleaner","description":"Text pasted from Word, Google Docs or a PDF carries curly quotes, en and em dashes, ligatures, zero-width spaces and non-breaking spaces that break code, CSV files and search. This cleaner replaces each with its plain ASCII equivalent and reports exactly how many it changed.\n\nTool page: https://convertto.tech/t/text-cleaner","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextCleanerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/text-padder":{"post":{"operationId":"runTextPadder","summary":"Text Padding Tool","description":"Padding aligns lines to a fixed width by adding characters until each reaches the target length. Pad on the right to left-align, on the left to right-align, or on both sides to centre — useful for fixed-width data files, receipt printers and aligned console output.\n\nTool page: https://convertto.tech/t/text-padder","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextPadderInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/text-repeater":{"post":{"operationId":"runTextRepeater","summary":"Text Repeater","description":"To repeat text, enter the text above, set how many copies you want and choose a separator. The tool can generate up to 10,000 repetitions at once, which is useful for load testing, filler content and formatting checks.\n\nTool page: https://convertto.tech/t/text-repeater","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextRepeaterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/text-reverser":{"post":{"operationId":"runTextReverser","summary":"Text Reverser","description":"To reverse text, paste it above and choose whether to reverse characters, words or lines. Character mode is Unicode-aware and handles emoji correctly, so multi-byte characters are not split apart during the reversal.\n\nTool page: https://convertto.tech/t/text-reverser","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextReverserInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/text-shadow-generator":{"post":{"operationId":"runTextShadowGenerator","summary":"CSS Text Shadow Generator","description":"To create a CSS text shadow, set the horizontal and vertical offset, blur and colour, and the preview updates as you type. Five presets built from your chosen colour show common effects: soft drop, hard offset, neon glow, outline and embossed.\n\nTool page: https://convertto.tech/t/text-shadow-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextShadowGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"html\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/text-shuffler":{"post":{"operationId":"runTextShuffler","summary":"Text Shuffler","description":"A text shuffler randomly reorders lines, words, sentences, paragraphs or the letters inside each word. Supply a seed and the same input always produces the same shuffle, which makes the result reproducible from a shared link — leave it blank for a fresh order every run.\n\nTool page: https://convertto.tech/t/text-shuffler","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextShufflerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/text-similarity-checker":{"post":{"operationId":"runTextSimilarityChecker","summary":"Text Similarity Checker","description":"Text similarity can be measured several ways, and they disagree usefully. Levenshtein counts character edits, Jaccard and Dice compare shared vocabulary, and cosine compares word-frequency vectors while ignoring length. This tool reports all four so you can see whether two texts are reworded, reordered or genuinely different.\n\nTool page: https://convertto.tech/t/text-similarity-checker","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextSimilarityCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/text-statistics":{"post":{"operationId":"runTextStatistics","summary":"Word & Character Frequency Counter","description":"To count frequency, paste your text and choose whether to count words, characters, lines or two-word phrases. Results are sorted by frequency with a share percentage and a bar showing relative distribution, which makes repetition immediately visible.\n\nTool page: https://convertto.tech/t/text-statistics","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextStatisticsInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/text-truncator":{"post":{"operationId":"runTextTruncator","summary":"Text Truncator","description":"Truncating text means cutting it to a limit without leaving a half-word dangling. Choose a character, word or sentence limit, decide whether to respect word boundaries, and set what gets appended — the suffix is only added when the text was genuinely shortened.\n\nTool page: https://convertto.tech/t/text-truncator","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextTruncatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/text-wrapper":{"post":{"operationId":"runTextWrapper","summary":"Text Wrap & Truncate","description":"To wrap or truncate text, paste it and choose a mode. Wrapping breaks lines at word boundaries so no word is split, truncation cuts at a word boundary and adds an ellipsis, and unwrapping joins soft-wrapped lines while preserving real paragraph breaks.\n\nTool page: https://convertto.tech/t/text-wrapper","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextWrapperInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/time-converter":{"post":{"operationId":"runTimeConverter","summary":"Time Converter","description":"To convert time, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 11 supported units. Months and years here use average lengths (30.44 days and 365.25 days) because calendar months vary.\n\nTool page: https://convertto.tech/t/time-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/timesheet-calculator":{"post":{"operationId":"runTimesheetCalculator","summary":"Timesheet Calculator","description":"A timesheet calculator totals clock-in and clock-out times into worked hours, subtracting unpaid breaks and applying payroll rounding. It handles overnight shifts where the end time is earlier than the start, and reports the total in hours and minutes, decimal hours for payroll, and optional gross pay with overtime.\n\nTool page: https://convertto.tech/t/timesheet-calculator","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimesheetCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/timestamp-converter":{"post":{"operationId":"runTimestampConverter","summary":"Unix Timestamp Converter","description":"To convert a Unix timestamp, paste the number and the human-readable date appears in UTC, your local timezone and ISO 8601 form. Paste a date instead and the timestamp is produced. Seconds and milliseconds are distinguished automatically by magnitude.\n\nTool page: https://convertto.tech/t/timestamp-converter","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimestampConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/timezone-converter":{"post":{"operationId":"runTimezoneConverter","summary":"Time Zone Converter","description":"To convert a time between zones, enter the date and time and choose the source and target zones. Offsets are calculated for that specific date using the browser's IANA timezone database, so daylight saving is applied correctly rather than assuming a fixed gap.\n\nTool page: https://convertto.tech/t/timezone-converter","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimezoneConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/timezone-meeting-planner":{"post":{"operationId":"runTimezoneMeetingPlanner","summary":"Timezone Meeting Planner","description":"A timezone meeting planner finds the hours that fall inside working time everywhere at once. Pick the locations, set what counts as a working day, and every UTC hour is checked against each zone's local clock on the date you choose — which matters, because daylight saving moves the offsets.\n\nTool page: https://convertto.tech/t/timezone-meeting-planner","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimezoneMeetingPlannerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/tip-calculator":{"post":{"operationId":"runTipCalculator","summary":"Tip Calculator & Bill Splitter","description":"To calculate a tip, enter the bill and the percentage you want to leave, then how many people are splitting it. Rounding each share up puts the remainder into the tip, which avoids the awkward last few cents when settling in cash.\n\nTool page: https://convertto.tech/t/tip-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TipCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/title-case-converter":{"post":{"operationId":"runTitleCaseConverter","summary":"Title Case Converter","description":"Title case rules differ by style guide. AP and APA lowercase words of three letters or fewer; Chicago lowercases prepositions shorter than five letters; MLA lowercases all prepositions regardless of length. Every guide capitalises the first and last word. This tool applies any of them, or compares all four side by side.\n\nTool page: https://convertto.tech/t/title-case-converter","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TitleCaseConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/torque-converter":{"post":{"operationId":"runTorqueConverter","summary":"Torque Converter","description":"To convert torque, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 5 supported units. Torque is force times distance. Car specs use N⋅m in Europe and lb-ft in the US; 1 lb-ft is about 1.356 N⋅m.\n\nTool page: https://convertto.tech/t/torque-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TorqueConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/totp-generator":{"post":{"operationId":"runTotpGenerator","summary":"TOTP Code Generator","description":"To generate a TOTP code, paste the Base32 secret shown during two-factor setup. The code is derived from the secret and the current time using HMAC-SHA1, exactly as Google Authenticator does, and refreshes every 30 seconds.\n\nTool page: https://convertto.tech/t/totp-generator","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TotpGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/touch-target-checker":{"post":{"operationId":"runTouchTargetChecker","summary":"Touch Target Size Checker","description":"A tap target that is too small causes mis-taps for everyone and blocks users with motor impairments entirely. WCAG 2.2 AA requires 24×24 CSS pixels or equivalent spacing, WCAG 2.1 AAA requires 44×44, Apple recommends 44 points and Material Design 48dp. This checker grades a target against all four.\n\nTool page: https://convertto.tech/t/touch-target-checker","tags":["a11y"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TouchTargetCheckerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/tournament-bracket-generator":{"post":{"operationId":"runTournamentBracketGenerator","summary":"Tournament Bracket Generator","description":"A single-elimination bracket must have a power-of-two number of places, so any other field size needs byes. This generator rounds up to the next power of two, awards the byes to the top seeds, and uses standard seeding order so the strongest entrants can only meet in the final.\n\nTool page: https://convertto.tech/t/tournament-bracket-generator","tags":["random"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TournamentBracketGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/transcript-to-subtitles":{"post":{"operationId":"runTranscriptToSubtitles","summary":"Transcript to Subtitles","description":"Converting a transcript to subtitles means splitting the text into cues that fit a character limit and assigning each a duration from its word count and an assumed speaking rate. The result is a structured SRT or WebVTT file that needs adjusting against the audio, but saves the work of typing every timestamp.\n\nTool page: https://convertto.tech/t/transcript-to-subtitles","tags":["media"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptToSubtitlesInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/trigonometry-calculator":{"post":{"operationId":"runTrigonometryCalculator","summary":"Trigonometry Calculator","description":"To calculate trigonometric values, enter an angle in degrees or radians and sine, cosine, tangent and their reciprocals are computed. Undefined values such as tangent at 90 degrees are reported as undefined rather than as a misleading very large number.\n\nTool page: https://convertto.tech/t/trigonometry-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrigonometryCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/twitter-card-validator":{"post":{"operationId":"runTwitterCardValidator","summary":"X (Twitter) Card Validator","description":"Paste your meta tags and the X card is resolved the way the crawler resolves it: twitter:card decides the layout, and any missing twitter:title, twitter:description or twitter:image falls back to the matching Open Graph tag. Each value is then checked against the documented card types, character limits and absolute-URL rule.\n\nTool page: https://convertto.tech/t/twitter-card-validator","tags":["seo"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwitterCardValidatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/type-scale-generator":{"post":{"operationId":"runTypeScaleGenerator","summary":"Type Scale Generator","description":"A modular scale multiplies each size by a fixed ratio, so every step relates to the last in the same way and the whole set reads as one system rather than eight arbitrary numbers. 1.25 (a major third) is a safe default for interfaces; 1.618 gives dramatic headings but leaves a large gap just above body size. Output in rem rather than px so the scale respects a reader who has changed their browser font size — a px scale silently overrides that preference.\n\nTool page: https://convertto.tech/t/type-scale-generator","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TypeScaleGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/unicode-converter":{"post":{"operationId":"runUnicodeConverter","summary":"Unicode Converter","description":"This converts text between the ways a character can be written down: its Unicode code point, its UTF-8 bytes, its UTF-16 code units, an HTML entity and a JavaScript escape. Text is iterated by code point rather than by UTF-16 unit, so emoji and other characters outside the Basic Multilingual Plane are treated as single characters instead of being split into broken surrogate halves.\n\nTool page: https://convertto.tech/t/unicode-converter","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnicodeConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/unicode-escape":{"post":{"operationId":"runUnicodeEscape","summary":"Unicode Escape Converter","description":"To escape Unicode characters, paste text and every non-ASCII character becomes a numeric escape sequence. Choose the style your language expects — \\u00e9 for JavaScript and JSON, \\u{1f389} for ES6, \\0000e9 for CSS, or numeric HTML entities.\n\nTool page: https://convertto.tech/t/unicode-escape","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnicodeEscapeInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/unit-price-comparator":{"post":{"operationId":"runUnitPriceComparator","summary":"Unit Price Comparator","description":"Comparing pack sizes means converting every price to the same unit. Enter each product's price and size — in grams, kilograms, millilitres, litres, ounces, pounds or a plain count — and this tool normalises them all, ranks them by price per kilogram or litre, and shows how much more the worse options cost.\n\nTool page: https://convertto.tech/t/unit-price-comparator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitPriceComparatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/upside-down-text":{"post":{"operationId":"runUpsideDownText","summary":"Upside Down Text Generator","description":"To flip text upside down, type it above. Each character is swapped for a Unicode look-alike that resembles its rotated form, and the whole string is reversed so it reads correctly when the screen or page is turned 180 degrees.\n\nTool page: https://convertto.tech/t/upside-down-text","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsideDownTextInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/url-builder":{"post":{"operationId":"runUrlBuilder","summary":"URL Builder","description":"A URL builder assembles a link from its parts — scheme, host, path, query parameters and fragment — and percent-encodes each value so spaces, ampersands and non-ASCII characters cannot break the query string. It then shows the parsed result so you can confirm the browser reads it as intended.\n\nTool page: https://convertto.tech/t/url-builder","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrlBuilderInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/url-encode-decode":{"post":{"operationId":"runUrlEncodeDecode","summary":"URL Encoder & Decoder","description":"To URL-encode text, paste it above and unsafe characters are replaced with percent-escaped equivalents. Component mode also escapes reserved characters such as slashes and ampersands, which is what you need when placing a value inside a query string.\n\nTool page: https://convertto.tech/t/url-encode-decode","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrlEncodeDecodeInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/url-parser":{"post":{"operationId":"runUrlParser","summary":"URL Parser","description":"To parse a URL, paste it above and every component is separated out — protocol, subdomain, root domain, port, path, each query parameter and the fragment. Percent-encoded parameter values are decoded so you see what the server actually receives.\n\nTool page: https://convertto.tech/t/url-parser","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrlParserInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/user-agent-parser":{"post":{"operationId":"runUserAgentParser","summary":"User Agent Parser","description":"To parse a user-agent string, paste it above and the browser, rendering engine, operating system and device are identified. This is the quickest way to decode the strings in your server logs when investigating a browser-specific bug.\n\nTool page: https://convertto.tech/t/user-agent-parser","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAgentParserInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/username-generator":{"post":{"operationId":"runUsernameGenerator","summary":"Username Generator","description":"To generate usernames, choose a style and how many you want. Names combine curated word lists using the browser's cryptographic random source, and duplicates are filtered out. Availability is not checked — you will need to try them on the platform itself.\n\nTool page: https://convertto.tech/t/username-generator","tags":["random"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsernameGeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/utf8-inspector":{"post":{"operationId":"runUtf8Inspector","summary":"UTF-8 Byte Inspector","description":"To inspect how text is encoded, type it above and every character is broken down into its Unicode code point, decimal value and UTF-8 byte sequence. This is the quickest way to diagnose mojibake, unexpected string lengths and multi-byte truncation bugs.\n\nTool page: https://convertto.tech/t/utf8-inspector","tags":["encoding"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Utf8InspectorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"table\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/utm-link-builder":{"post":{"operationId":"runUtmLinkBuilder","summary":"UTM Link Builder","description":"To build a UTM link, enter your destination URL plus the campaign source and medium, which are both required for Analytics to attribute the visit correctly. Values are lowercased automatically, since Analytics treats different capitalisations as separate sources.\n\nTool page: https://convertto.tech/t/utm-link-builder","tags":["seo"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtmLinkBuilderInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/uuid-inspector":{"post":{"operationId":"runUuidInspector","summary":"UUID Inspector","description":"A UUID inspector reads the version and variant bits to identify which of the eight UUID versions an identifier uses, validates the 8-4-4-4-12 format, and extracts the embedded creation timestamp from versions 1, 6 and 7 — the only versions that carry one.\n\nTool page: https://convertto.tech/t/uuid-inspector","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UuidInspectorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/uuid-v4-generator":{"post":{"operationId":"runUuidV4Generator","summary":"UUID v4 Generator","description":"To generate UUIDs, set how many you need and they are produced instantly using crypto.randomUUID, the browser's built-in RFC 4122 version 4 generator. Version 4 UUIDs are 122 bits of randomness, so collisions are effectively impossible in practice.\n\nTool page: https://convertto.tech/t/uuid-v4-generator","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UuidV4GeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/uuid-v7-generator":{"post":{"operationId":"runUuidV7Generator","summary":"UUID v7 Generator","description":"To generate UUID v7 identifiers, set a count above. Version 7 embeds a millisecond Unix timestamp in the leading bits, so IDs sort chronologically. That makes them far better than v4 as database primary keys because inserts stay sequential and indexes do not fragment.\n\nTool page: https://convertto.tech/t/uuid-v7-generator","tags":["crypto"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UuidV7GeneratorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/validator-suite":{"post":{"operationId":"runValidatorSuite","summary":"Format Validator","description":"To validate a format, paste the value and choose what it should be. The tool checks emails, UUIDs, IPv4 and IPv6 addresses, credit card numbers via the Luhn algorithm, semantic versions, hex colours and URL slugs, explaining exactly which rule failed.\n\nTool page: https://convertto.tech/t/validator-suite","tags":["developer"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorSuiteInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/vat-tax-calculator":{"post":{"operationId":"runVatTaxCalculator","summary":"VAT & Sales Tax Calculator","description":"To calculate VAT, enter the amount and the tax rate, then say whether the figure already includes tax. Adding tax multiplies by 1 plus the rate; removing it divides by the same figure — subtracting the percentage instead is the most common mistake.\n\nTool page: https://convertto.tech/t/vat-tax-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VatTaxCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/volume-converter":{"post":{"operationId":"runVolumeConverter","summary":"Volume Converter","description":"To convert volume, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 16 supported units. US and imperial gallons differ substantially: 3.785 L versus 4.546 L. Always check which one a recipe or spec means.\n\nTool page: https://convertto.tech/t/volume-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/water-intake-calculator":{"post":{"operationId":"runWaterIntakeCalculator","summary":"Daily Water Intake Calculator","description":"To estimate daily water intake, enter your weight, typical exercise duration and climate. The calculation starts from about 35 millilitres per kilogram of body weight and adds roughly 350 millilitres for every 30 minutes of exercise, adjusted for hot or cold conditions.\n\nTool page: https://convertto.tech/t/water-intake-calculator","tags":["health"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaterIntakeCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/week-number-calculator":{"post":{"operationId":"runWeekNumberCalculator","summary":"ISO Week Number Calculator","description":"To find an ISO week number, enter a date. ISO 8601 weeks begin on Monday and week 1 is the week containing the first Thursday of the year, which means the first days of January can belong to week 52 or 53 of the previous year.\n\nTool page: https://convertto.tech/t/week-number-calculator","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WeekNumberCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/weight-converter":{"post":{"operationId":"runWeightConverter","summary":"Weight & Mass Converter","description":"To convert weight, enter a value and pick the units. The result appears instantly with the exact conversion formula, the reverse conversion, a quick-reference table of common values and every one of the 12 supported units. The pound is defined as exactly 0.45359237 kg by the 1959 international yard and pound agreement.\n\nTool page: https://convertto.tech/t/weight-converter","tags":["unit"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WeightConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/weighted-average-calculator":{"post":{"operationId":"runWeightedAverageCalculator","summary":"Weighted Average Calculator","description":"To calculate a weighted average, enter your values and their matching weights, one per line. Weights are normalised automatically, so you can use raw figures such as credit hours or share counts without converting them to percentages first.\n\nTool page: https://convertto.tech/t/weighted-average-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WeightedAverageCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/whitespace-remover":{"post":{"operationId":"runWhitespaceRemover","summary":"Whitespace Remover","description":"To remove extra whitespace, paste your text and pick a mode: collapse repeated spaces into one, strip all whitespace entirely, trim the start or end of each line, or delete blank lines. The cleaned result appears instantly and can be copied in one click.\n\nTool page: https://convertto.tech/t/whitespace-remover","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitespaceRemoverInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"text\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/word-counter":{"post":{"operationId":"runWordCounter","summary":"Word & Character Counter","description":"To count words and characters, paste your text above. The counter reports words, characters with and without spaces, sentences and paragraphs, plus estimated reading and speaking time and a Flesch Reading Ease score with its plain-English interpretation.\n\nTool page: https://convertto.tech/t/word-counter","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WordCounterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/word-frequency-counter":{"post":{"operationId":"runWordFrequencyCounter","summary":"Word Frequency Counter","description":"A word frequency counter tallies how often each word appears in a text and ranks them. Filter out common stop words such as \"the\" and \"and\", set a minimum word length, and see each word's share of the total alongside a bar chart and a lexical-variety figure.\n\nTool page: https://convertto.tech/t/word-frequency-counter","tags":["text"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WordFrequencyCounterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/words-to-number":{"post":{"operationId":"runWordsToNumber","summary":"Words to Number Converter","description":"To convert words into digits, type an English number phrase such as \"two hundred and fifty thousand\" and the numeric value appears immediately. The parser understands scale words up to trillion and ignores filler words like \"and\".\n\nTool page: https://convertto.tech/t/words-to-number","tags":["number"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WordsToNumberInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/words-to-tokens-converter":{"post":{"operationId":"runWordsToTokensConverter","summary":"Words to Tokens Converter","description":"One English word averages about 1.33 tokens, so 1,000 words is roughly 1,330 tokens and 1,000 tokens is roughly 750 words. Source code runs about 2.4 tokens per word and JSON about 2.7, so structured data costs roughly twice as much as prose for the same page count. This converter applies measured ratios for each content type rather than a single average.\n\nTool page: https://convertto.tech/t/words-to-tokens-converter","tags":["ai"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WordsToTokensConverterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/working-days-calculator":{"post":{"operationId":"runWorkingDaysCalculator","summary":"Working Days Calculator","description":"Counting working days means excluding weekends and public holidays from the calendar range. This calculator takes your own holiday list — since they differ by country and company — lets you mark Saturday or Sunday as working, and reports the total in days, hours and working months.\n\nTool page: https://convertto.tech/t/working-days-calculator","tags":["datetime"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkingDaysCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/xml-formatter":{"post":{"operationId":"runXmlFormatter","summary":"XML Formatter","description":"To format XML, paste it in and it is re-indented with each element on its own line — except elements holding only text, which stay on one line because splitting them across three is what makes formatted XML unreadable. The document is parsed by your browser's own XML parser first, so anything not well-formed is reported with its line and column rather than silently mangled.\n\nTool page: https://convertto.tech/t/xml-formatter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/XmlFormatterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/xml-validator":{"post":{"operationId":"runXmlValidator","summary":"XML Validator","description":"An XML validator checks that a document is well-formed: every tag closed and correctly nested, exactly one root element, attributes quoted, and reserved characters escaped. This reports the first error with its line and column, and for a valid document summarises the element count, nesting depth, attributes and namespaces.\n\nTool page: https://convertto.tech/t/xml-validator","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/XmlValidatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"sections\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/yaml-formatter":{"post":{"operationId":"runYamlFormatter","summary":"YAML Formatter & Validator","description":"To format YAML, paste your document and it is parsed and reprinted with consistent indentation and spacing. Because it parses first, an invalid document fails with the location of the error rather than being silently reindented into something different.\n\nTool page: https://convertto.tech/t/yaml-formatter","tags":["data"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/YamlFormatterInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"code\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/youtube-thumbnail-downloader":{"post":{"operationId":"runYoutubeThumbnailDownloader","summary":"YouTube Thumbnail Downloader","description":"To get a YouTube thumbnail, paste a video URL or its 11-character ID and the image URLs for every available size are returned. This tool only produces links to the publicly served thumbnail images — it does not download video content.\n\nTool page: https://convertto.tech/t/youtube-thumbnail-downloader","tags":["social"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/YoutubeThumbnailDownloaderInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/z-index-visualizer":{"post":{"operationId":"runZIndexVisualizer","summary":"Z-Index & Stacking Context Checker","description":"z-index only orders elements within the same stacking context, and a surprising number of ordinary properties create one: any transform, any filter, opacity below 1, a blend mode, will-change naming one of those, position fixed or sticky, and isolation: isolate. Once an ancestor creates a context, its children are sealed inside it — a child with z-index 9999 still cannot paint above something outside, because the whole subtree is composited as one layer at the ancestor's level. The fix is almost always to raise the ancestor, not the child.\n\nTool page: https://convertto.tech/t/z-index-visualizer","tags":["css"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZIndexVisualizerInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/tools/z-score-calculator":{"post":{"operationId":"runZScoreCalculator","summary":"Z-Score Calculator","description":"To calculate a z-score, enter a value, the population mean and the standard deviation. The z-score expresses how many standard deviations the value sits from the mean, and the percentile shows what proportion of a normal distribution falls below it.\n\nTool page: https://convertto.tech/t/z-score-calculator","tags":["calculators"],"requestBody":{"required":true,"description":"The input object. A `{ \"input\": { … } }` wrapper is also accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZScoreCalculatorInput"}}}},"responses":{"200":{"description":"Result. Rendered by the site as \"fields\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"The input did not match the schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request body or result over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The tool rejected the input — e.g. text that is not valid JSON for a JSON formatter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The run exceeded 5000 ms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}},"components":{"schemas":{"ApiError":{"type":"object","title":"ApiError","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_input","unknown_tool","method_not_allowed","unsupported_media_type","payload_too_large","response_too_large","tool_failed","rate_limited","not_supported_server_side","timeout","internal_error"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]},"ToolOutput":{"title":"ToolOutput","description":"The result of a tool run. A bare string or number for simple tools, otherwise a tagged object.","anyOf":[{"type":"string"},{"type":"number"},{"type":"null"},{"type":"object","properties":{"type":{"const":"fields"},"items":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"mono":{"type":"boolean"},"copyable":{"type":"boolean"},"swatch":{"type":"string"}},"required":["label","value"]}},"note":{"type":"string"}},"required":["type","items"]},{"type":"object","properties":{"type":{"const":"table"},"columns":{"type":"array","items":{"type":"string"}},"rows":{"type":"array","items":{"type":"array","items":{"type":["string","number"]}}}},"required":["type","columns","rows"]},{"type":"object","properties":{"type":{"const":"json"},"value":{}},"required":["type","value"]},{"type":"object","properties":{"type":{"const":"code"},"value":{"type":"string"},"language":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"const":"html"},"html":{"type":"string"}},"required":["type","html"]},{"type":"object","properties":{"type":{"const":"diff"},"parts":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"added":{"type":"boolean"},"removed":{"type":"boolean"}},"required":["value"]}},"stats":{"type":"string"}},"required":["type","parts"]},{"type":"object","properties":{"type":{"const":"sections"},"sections":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"collapsed":{"type":"boolean"},"body":{"oneOf":[{"type":"object","properties":{"type":{"const":"fields"},"items":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"mono":{"type":"boolean"},"copyable":{"type":"boolean"},"swatch":{"type":"string"}},"required":["label","value"]}},"note":{"type":"string"}},"required":["type","items"]},{"type":"object","properties":{"type":{"const":"table"},"columns":{"type":"array","items":{"type":"string"}},"rows":{"type":"array","items":{"type":"array","items":{"type":["string","number"]}}},"note":{"type":"string"}},"required":["type","columns","rows"]},{"type":"object","properties":{"type":{"const":"code"},"value":{"type":"string"},"language":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"const":"text"},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"const":"stat"},"value":{"type":"string"},"label":{"type":"string"},"sub":{"type":"string"}},"required":["type","value"]}]}},"required":["body"]}}},"required":["type","sections"]}]},"ToolResult":{"type":"object","title":"ToolResult","properties":{"tool":{"type":"string","description":"Slug of the tool that produced this result."},"output":{"$ref":"#/components/schemas/ToolOutput"},"ms":{"type":"integer","description":"Wall-clock milliseconds the run took."}},"required":["tool","output"]},"AcronymGeneratorInput":{"type":"object","properties":{"text":{"type":"string","description":"Phrase or phrases — Multi-line text.","examples":["Portable Document Format\nas soon as possible\nCascading Style Sheets"]},"style":{"type":"string","enum":["upper","lower","title"],"description":"Style — Options: upper (UPPERCASE), lower (lowercase), title (Title Case)","default":"upper"},"separator":{"type":"string","enum":["none",".","-"],"description":"Separator — Options: none (None — PDF), . (Full stops — P.D.F.), - (Hyphens — P-D-F)","default":"none"},"skipSmall":{"type":"boolean","description":"Skip small words — a, an, the, of, for, and, in, on, to.","default":true}},"title":"Acronym Generator input","description":"Turn a phrase into an acronym or initialism, with control over small words and separators.","required":["text"],"additionalProperties":false},"AddLineNumbersInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["alpha\nbravo\ncharlie"]},"start":{"description":"Start at","type":"number","minimum":0,"default":1},"separator":{"type":"string","enum":["dot","paren","colon","space","tab"],"description":"Separator — Options: dot (1. text), paren (1) text), colon (1: text), space (1 text), tab (1<tab>text)","default":"dot"},"padZeros":{"type":"boolean","description":"Pad with zeros","default":false}},"title":"Add Line Numbers input","description":"Prefix every line with a sequential number, with a custom start, separator and zero padding.","required":["text"],"additionalProperties":false},"AgeCalculatorInput":{"type":"object","properties":{"birthdate":{"type":"string","format":"date","description":"Date of birth — ISO 8601 date, YYYY-MM-DD."},"asOf":{"type":"string","format":"date","description":"Age on this date — Leave blank to use today. — ISO 8601 date, YYYY-MM-DD."}},"title":"Age Calculator input","description":"Work out exact age in years, months and days — plus total days and the next birthday.","required":["birthdate","asOf"],"additionalProperties":false},"AgendaTimerInput":{"type":"object","properties":{"agenda":{"type":"string","description":"Agenda — One item per line: name, then the minutes it should take. — Multi-line text.","examples":["Welcome and context, 5\nLast quarter review, 15\nProduct roadmap, 20\nOpen questions, 10\nActions and close, 5"]},"start":{"type":"string","description":"Start time"},"buffer":{"description":"Buffer between items — Transition time added after each item. — Measured in min.","type":"number","minimum":0,"maximum":30,"default":0}},"title":"Meeting Agenda Timer input","description":"Turn an agenda into a timed schedule with start and end times for every item.","required":["agenda","start"],"additionalProperties":false},"AiCrawlerRobotsTxtGeneratorInput":{"type":"object","properties":{"policy":{"type":"string","enum":["block-training","block-all","allow-all","custom"],"description":"Policy — Training and search are different transactions: one takes your content, the other sends you readers. — Options: block-training (Block training, allow AI search — the usual choice), block-all (Block every AI crawler), allow-all (Allow every AI crawler), custom (Choose crawler by crawler)","default":"block-training"},"blocked":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["gptbot","oai-searchbot","chatgpt-user","claudebot","anthropic-ai","claude-web","claude-searchbot","google-extended","ccbot","perplexitybot","perplexity-user","bytespider","amazonbot","applebot-extended","meta-externalagent","facebookbot","cohere-ai","diffbot","omgili","timpibot","youbot"]},"description":"Block these — Options: gptbot (GPTBot — OpenAI), oai-searchbot (OAI-SearchBot — OpenAI), chatgpt-user (ChatGPT-User — OpenAI), claudebot (ClaudeBot — Anthropic), anthropic-ai (anthropic-ai — Anthropic), claude-web (Claude-Web — Anthropic), claude-searchbot (Claude-SearchBot — Anthropic), google-extended (Google-Extended — Google), ccbot (CCBot — Common Crawl), perplexitybot (PerplexityBot — Perplexity), perplexity-user (Perplexity-User — Perplexity), bytespider (Bytespider — ByteDance), amazonbot (Amazonbot — Amazon), applebot-extended (Applebot-Extended — Apple), meta-externalagent (meta-externalagent — Meta), facebookbot (FacebookBot — Meta), cohere-ai (cohere-ai — Cohere), diffbot (Diffbot — Diffbot), omgili (omgili — Webz.io), timpibot (Timpibot — Timpi), youbot (YouBot — You.com) — Only applies for some combinations of the other fields.","default":["gptbot","claudebot","ccbot","bytespider","google-extended"]},"disallowPaths":{"type":"string","description":"Block only these paths — One path per line. Blank means everything. — Multi-line text."},"allowPaths":{"type":"string","description":"But always allow these — Exceptions carved out of the block. Allow beats Disallow when the matched path is longer. — Multi-line text."},"crawlDelay":{"type":"string","enum":["0","1","5","10","30"],"description":"Crawl delay — Non-standard, and ignored by Google — but honoured by several AI crawlers. — Options: 0 (None), 1 (1 second), 5 (5 seconds), 10 (10 seconds), 30 (30 seconds)","default":"0"},"sitemap":{"type":"string","description":"Sitemap URL"},"keepExisting":{"type":"string","description":"Existing robots.txt — Multi-line text."}},"title":"AI Crawler robots.txt Generator input","description":"Generate the robots.txt rules for 21 AI crawlers, separating training from search and from fetches a real user asked for.","required":["disallowPaths","allowPaths","sitemap","keepExisting"],"additionalProperties":false},"AltTextCheckerInput":{"type":"object","properties":{"html":{"type":"string","description":"HTML — Multi-line text.","examples":["<h1>Our products</h1>\n<p>Welcome to the catalogue.</p>\n<h3>Laptops</h3>\n<img src=\"laptop.png\">\n<img src=\"banner.jpg\" alt=\"banner.jpg\">\n<a href=\"/specs\">click here</a>\n<h2>Phones</h2>\n<img src=\"phone.png\" alt=\"A slate-grey phone standing upright on a desk\">\n<a href=\"/phones\">Browse all phones</a>"],"contentMediaType":"text/html"},"maxLength":{"description":"Flag alt text longer than — Some screen readers truncate around 125 characters. — Measured in chars.","type":"number","minimum":40,"maximum":500,"default":125}},"title":"Alt Text Checker input","description":"Find images with missing, empty, filename-based or overlong alternative text.","required":["html"],"additionalProperties":false},"AngleConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["deg","rad","grad","turn","arcmin","arcsec","mil"],"description":"From — Options: deg (Degrees (°)), rad (Radians (rad)), grad (Gradians (grad)), turn (Turns (turn)), arcmin (Arcminutes (')), arcsec (Arcseconds (\")), mil (Mils (NATO) (mil))","default":"deg"},"to":{"type":"string","enum":["deg","rad","grad","turn","arcmin","arcsec","mil"],"description":"To — Options: deg (Degrees (°)), rad (Radians (rad)), grad (Gradians (grad)), turn (Turns (turn)), arcmin (Arcminutes (')), arcsec (Arcseconds (\")), mil (Mils (NATO) (mil))","default":"rad"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":8}},"title":"Angle Converter input","description":"Convert angle between 7 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"ApiRequestBuilderInput":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],"description":"Method — Options: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS","default":"POST"},"url":{"type":"string","description":"URL","examples":["https://api.example.com/v1/orders"]},"auth":{"type":"string","enum":["none","bearer","basic","apikey"],"description":"Authentication — Options: none (None), bearer (Bearer token), basic (Basic — user:password), apikey (API key header)","default":"none"},"token":{"type":"string","description":"Credential — This page never sends a request, so nothing is transmitted — but generated code gets pasted into chats and commits, so a variable name is still the better habit. — Only applies for some combinations of the other fields."},"headers":{"type":"string","description":"Headers — One per line, as Name: value. — Multi-line text."},"body":{"type":"string","description":"Request body — Multi-line text. — Only applies for some combinations of the other fields.","contentMediaType":"application/json"},"language":{"type":"string","enum":["curl","fetch","axios","python","go","php","httpie"],"description":"Generate for — Options: curl, fetch (JavaScript — fetch), axios (JavaScript — axios), python (Python — requests), go (Go — net/http), php (PHP — cURL), httpie (HTTPie)","default":"curl"},"prettyJson":{"type":"boolean","description":"Format the body as JSON","default":true}},"title":"API Request Builder input","description":"Build an HTTP request visually and get it as curl, fetch, axios, Python, Go or PHP code.","required":["url","headers"],"additionalProperties":false},"AreaConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["mm2","cm2","m2","ha","km2","in2","ft2","yd2","ac","mi2"],"description":"From — Options: mm2 (Square Millimetres (mm²)), cm2 (Square Centimetres (cm²)), m2 (Square Metres (m²)), ha (Hectares (ha)), km2 (Square Kilometres (km²)), in2 (Square Inches (in²)), ft2 (Square Feet (ft²)), yd2 (Square Yards (yd²)), ac (Acres (ac)), mi2 (Square Miles (mi²))","default":"m2"},"to":{"type":"string","enum":["mm2","cm2","m2","ha","km2","in2","ft2","yd2","ac","mi2"],"description":"To — Options: mm2 (Square Millimetres (mm²)), cm2 (Square Centimetres (cm²)), m2 (Square Metres (m²)), ha (Hectares (ha)), km2 (Square Kilometres (km²)), in2 (Square Inches (in²)), ft2 (Square Feet (ft²)), yd2 (Square Yards (yd²)), ac (Acres (ac)), mi2 (Square Miles (mi²))","default":"ft2"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Area Converter input","description":"Convert area between 10 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"AriaRolesReferenceInput":{"type":"object","properties":{"query":{"type":"string","description":"Search"},"category":{"type":"string","enum":["all","widget","landmark","structure","live"],"description":"Category — Options: all (All roles), widget (Widget roles), landmark (Landmark roles), structure (Document structure), live (Live region roles)","default":"all"}},"title":"ARIA Roles Reference input","description":"Search ARIA roles with their required attributes, native HTML equivalents and gotchas.","required":["query"],"additionalProperties":false},"AsciiArtGeneratorInput":{"type":"object","properties":{"text":{"type":"string","description":"Text","examples":["Convertto"]},"font":{"type":"string","enum":["Standard","Big","Slant","Small","Banner","Doom","Ghost","Shadow"],"description":"Font — Options: Standard, Big, Slant, Small, Banner, Doom, Ghost, Shadow","default":"Standard"}},"title":"ASCII Art Text Generator input","description":"Turn words into large ASCII banner text for terminals, READMEs and code comments.","required":["text"],"additionalProperties":false},"AsciiTableFormatterInput":{"type":"object","properties":{"text":{"type":"string","description":"Rows — Multi-line text.","examples":["Name,Role,Years\nAda,Engineer,12\nGrace,Admiral,40\nAlan,Researcher,15"]},"delimiter":{"type":"string","enum":["auto",",","\t","|",";"],"description":"Separator — Options: auto (Detect automatically), , (Comma), \t (Tab), | (Pipe), ; (Semicolon)","default":"auto"},"style":{"type":"string","enum":["box","ascii","markdown","simple"],"description":"Style — Options: box (Box drawing — ┌─┬─┐), ascii (ASCII — +---+), markdown (Markdown), simple (Aligned columns only)","default":"box"},"align":{"type":"string","enum":["auto","left","right","center"],"description":"Alignment — Options: auto (Auto — numbers right, text left), left (All left), right (All right), center (All centred)","default":"auto"},"header":{"type":"boolean","description":"First row is a header","default":true}},"title":"ASCII Table Formatter input","description":"Turn CSV or tab-separated text into an aligned plain-text, Markdown or box-drawing table.","required":["text"],"additionalProperties":false},"AspectRatioCalculatorInput":{"type":"object","properties":{"width":{"description":"Original width — Measured in px.","type":"number","minimum":1,"default":1920},"height":{"description":"Original height — Measured in px.","type":"number","minimum":1,"default":1080},"targetWidth":{"description":"New width — The matching height is calculated for you. — Measured in px.","type":"number","minimum":1,"default":1280}},"title":"Aspect Ratio Calculator input","description":"Work out the aspect ratio of any dimensions and scale them proportionally.","additionalProperties":false},"Base32EncodeDecodeInput":{"type":"object","properties":{"text":{"type":"string","description":"Text or Base32 — Multi-line text.","examples":["Convertto"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Text → Base32), decode (Base32 → Text)","default":"encode"}},"title":"Base32 Encoder & Decoder input","description":"Encode and decode Base32 (RFC 4648) — used by TOTP secrets and case-insensitive identifiers.","required":["text"],"additionalProperties":false},"Base58EncodeDecodeInput":{"type":"object","properties":{"text":{"type":"string","description":"Text or Base58 — Multi-line text.","examples":["Convertto"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Text → Base58), decode (Base58 → Text)","default":"encode"}},"title":"Base58 Encoder & Decoder input","description":"Encode and decode Base58 — the Bitcoin alphabet that omits look-alike characters.","required":["text"],"additionalProperties":false},"BillSplitterInput":{"type":"object","properties":{"method":{"type":"string","enum":["even","itemised"],"description":"Split — Options: even (Evenly between everyone), itemised (By what each person ordered)","default":"even"},"total":{"description":"Bill total before tip — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":10000000,"default":120},"people":{"type":"string","description":"People — For an even split just list names. For itemised, add each person's subtotal after a comma. — Multi-line text.","examples":["Alex, 32.50\nSam, 18.00\nJordan, 41.25\nRiley, 28.25"]},"tipPct":{"description":"Tip — Between 0 and 40 %.","type":"number","minimum":0,"maximum":40,"default":15},"taxPct":{"description":"Tax already included in the amounts — Leave at 0 if the amounts are pre-tax. — Between 0 and 30 %.","type":"number","minimum":0,"maximum":30,"default":0},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Bill Splitter input","description":"Split a bill evenly or by what each person ordered, with tip and tax handled correctly.","required":["people"],"additionalProperties":false},"BinaryToDecimalInput":{"type":"object","properties":{"value":{"type":"string","description":"Value"}},"title":"Binary to Decimal Converter input","description":"Convert binary numbers to decimal, hex and octal instantly.","required":["value"],"additionalProperties":false},"BinaryToTextInput":{"type":"object","properties":{"text":{"type":"string","description":"Text or binary — Multi-line text.","examples":["Hi"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Text → Binary), decode (Binary → Text)","default":"encode"},"separator":{"type":"string","enum":["space","none"],"description":"Separator — Options: space (Space between bytes), none (No separator)","default":"space"}},"title":"Binary to Text Converter input","description":"Translate text into binary ones and zeros, and decode binary back into readable text.","required":["text"],"additionalProperties":false},"BingoCardGeneratorInput":{"type":"object","properties":{"items":{"type":"string","description":"Items — Multi-line text.","examples":["Coffee\nDeadline\nSynergy\nMeeting\nEmail\nDelay\nBudget\nRoadmap\nBlocker\nStandup\nRetro\nSprint\nMetrics\nAlignment\nBandwidth\nCircle back\nLow hanging fruit\nTouch base\nDeep dive\nMove the needle\nAction item\nParking lot\nQuick win\nNorth star\nDouble click"]},"cards":{"description":"Number of cards","type":"number","minimum":1,"maximum":100,"default":4},"size":{"type":"string","enum":["3","4","5"],"description":"Grid — Options: 3 (3 × 3 — 9 squares), 4 (4 × 4 — 16 squares), 5 (5 × 5 — 25 squares)","default":"5"},"freeSpace":{"type":"boolean","description":"Free space in the centre — Odd-sized grids only.","default":true},"seed":{"type":"string","description":"Seed"}},"title":"Bingo Card Generator input","description":"Generate unique bingo cards from your own list of items, with an optional free space.","required":["items","seed"],"additionalProperties":false},"BionicReadingConverterInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["The quick brown fox jumps over the lazy dog. Pack my box with five dozen liquor jugs.\nSphinx of black quartz, judge my vow. How vexingly quick daft zebras jump!"]},"strength":{"description":"Fixation strength — How much of each word is emphasised. — Between 20 and 80 %.","type":"number","minimum":20,"maximum":80,"default":50},"format":{"type":"string","enum":["html","markdown","unicode"],"description":"Output as — Options: html (HTML — <b> tags), markdown (Markdown — **bold**), unicode (Unicode bold — pastes anywhere)","default":"html"}},"title":"Bionic Reading Converter input","description":"Bold the leading letters of each word to guide the eye through long text.","required":["text"],"additionalProperties":false},"BlobShapeGeneratorInput":{"type":"object","properties":{"seed":{"description":"Seed — The same seed always produces the same shape, so a link recreates it exactly.","type":"number","minimum":1,"maximum":9999,"default":42}},"title":"Blob Shape Generator input","description":"Design organic SVG backgrounds: four interpolation styles, gradients, layers and any canvas size.","additionalProperties":false},"BmiCalculatorInput":{"type":"object","properties":{"units":{"type":"string","enum":["metric","imperial"],"description":"Units — Options: metric (Metric (kg, cm)), imperial (Imperial (lb, ft/in))","default":"metric"},"weight":{"description":"Weight","type":"number","minimum":1,"default":70},"height":{"description":"Height — cm in metric, feet in imperial","type":"number","minimum":1,"default":175},"heightIn":{"description":"Inches — Imperial only","type":"number","minimum":0,"maximum":11,"default":0}},"title":"BMI Calculator input","description":"Calculate body mass index in metric or imperial units, with the WHO categories.","additionalProperties":false},"BmrTdeeCalculatorInput":{"type":"object","properties":{"units":{"type":"string","enum":["metric","imperial"],"description":"Units — Options: metric (Metric (kg, cm)), imperial (Imperial (lb, in))","default":"metric"},"sex":{"type":"string","enum":["female","male"],"description":"Sex at birth — The Mifflin-St Jeor equation uses different constants. — Options: female (Female), male (Male)","default":"female"},"age":{"description":"Age — Measured in years.","type":"number","minimum":10,"maximum":120,"default":30},"weight":{"description":"Weight","type":"number","minimum":20,"default":70},"height":{"description":"Height","type":"number","minimum":50,"default":170},"activity":{"type":"string","enum":["1.2","1.375","1.55","1.725","1.9"],"description":"Activity level — Options: 1.2 (Sedentary — desk job, little exercise), 1.375 (Light — exercise 1–3 days a week), 1.55 (Moderate — exercise 3–5 days a week), 1.725 (Active — exercise 6–7 days a week), 1.9 (Very active — physical job or twice-daily training)","default":"1.55"}},"title":"BMR & Calorie Calculator input","description":"Estimate your basal metabolic rate and daily calorie needs using Mifflin-St Jeor.","additionalProperties":false},"BodyFatCalculatorInput":{"type":"object","properties":{"units":{"type":"string","enum":["metric","imperial"],"description":"Units — Options: metric (Metric (cm)), imperial (Imperial (inches))","default":"metric"},"sex":{"type":"string","enum":["male","female"],"description":"Sex at birth — The Navy formula uses different equations. — Options: male (Male), female (Female)","default":"male"},"height":{"description":"Height","type":"number","minimum":50,"default":178},"neck":{"description":"Neck circumference","type":"number","minimum":10,"default":38},"waist":{"description":"Waist circumference","type":"number","minimum":30,"default":85},"hip":{"description":"Hip circumference — Only applies for some combinations of the other fields.","type":"number","minimum":30,"default":95}},"title":"Body Fat Percentage Calculator input","description":"Estimate body fat percentage using the US Navy tape-measure method.","additionalProperties":false},"BorderRadiusGeneratorInput":{"type":"object","properties":{"linked":{"type":"boolean","description":"Link all corners","default":true},"topLeft":{"description":"Top left — Between 0 and 100 px.","type":"number","minimum":0,"maximum":100,"default":24},"topRight":{"description":"Top right — Between 0 and 100 px. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":100,"default":24},"bottomRight":{"description":"Bottom right — Between 0 and 100 px. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":100,"default":24},"bottomLeft":{"description":"Bottom left — Between 0 and 100 px. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":100,"default":24},"unit":{"type":"string","enum":["px","%","rem"],"description":"Unit — Options: px (Pixels), % (Percent), rem (REM)","default":"px"},"color":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Preview colour — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"}},"title":"CSS Border Radius Generator input","description":"Drag eight handles to shape every corner: elliptical radii, inverted corners and squircles.","additionalProperties":false},"BoxShadowGeneratorInput":{"type":"object","properties":{"x":{"description":"Horizontal offset — Measured in px.","type":"number","minimum":-100,"maximum":100,"default":0},"y":{"description":"Vertical offset — Measured in px.","type":"number","minimum":-100,"maximum":100,"default":4},"blur":{"description":"Blur radius — Measured in px.","type":"number","minimum":0,"maximum":200,"default":12},"spread":{"description":"Spread — Measured in px.","type":"number","minimum":-100,"maximum":100,"default":-2},"color":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Shadow colour — A CSS hex colour, e.g. #3366ff.","default":"#000000"},"opacity":{"description":"Opacity — Between 0 and 100 %.","type":"number","minimum":0,"maximum":100,"default":12},"inset":{"type":"boolean","description":"Inset (inner shadow)","default":false}},"title":"CSS Box Shadow Generator input","description":"Design a CSS box-shadow with live values for offset, blur, spread and colour.","additionalProperties":false},"BreakEvenCalculatorInput":{"type":"object","properties":{"fixedCosts":{"description":"Fixed costs","type":"number","minimum":0,"default":5000},"pricePerUnit":{"description":"Price per unit","type":"number","minimum":0,"default":25},"variableCost":{"description":"Variable cost per unit","type":"number","minimum":0,"default":10}},"title":"Break-Even Point Calculator input","description":"Find how many units you must sell to cover your costs.","additionalProperties":false},"CaesarCipherInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["Attack at dawn"]},"shift":{"description":"Shift — A shift of 13 is ROT13.","type":"number","minimum":-25,"maximum":25,"default":13},"direction":{"type":"string","enum":["encode","decode"],"description":"Mode — Options: encode (Encrypt), decode (Decrypt)","default":"encode"}},"title":"Caesar Cipher Encoder input","description":"Encrypt and decrypt text with a Caesar shift cipher, including ROT13.","required":["text"],"additionalProperties":false},"CagrCalculatorInput":{"type":"object","properties":{"start":{"description":"Starting value","type":"number","minimum":0.01,"maximum":1000000000000,"default":10000},"end":{"description":"Ending value","type":"number","minimum":0.01,"maximum":1000000000000,"default":25000},"years":{"description":"Period — Measured in years.","type":"number","minimum":0.1,"maximum":100,"default":5},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"CAGR Calculator input","description":"Compound annual growth rate between two values, with the year-by-year path.","additionalProperties":false},"CalorieCalculatorInput":{"type":"object","properties":{"calories":{"description":"Maintenance calories — Not sure? The BMR & TDEE calculator works this out from your height, weight and activity. — Measured in kcal.","type":"number","minimum":800,"maximum":6000,"default":2200},"goal":{"type":"string","enum":["lose-fast","lose-moderate","lose-slow","maintain","gain-lean","gain-fast"],"description":"Goal — Options: lose-fast (Lose weight quickly — 25% deficit), lose-moderate (Lose weight steadily — 15% deficit), lose-slow (Lose weight slowly — 10% deficit), maintain (Maintain), gain-lean (Gain lean mass — 10% surplus), gain-fast (Gain weight — 20% surplus)","default":"lose-moderate"},"protein":{"description":"Body weight — Used only to suggest a protein target. — Measured in kg.","type":"number","minimum":30,"maximum":250,"default":70},"meals":{"description":"Meals per day","type":"number","minimum":1,"maximum":8,"default":3},"mode":{"type":"string","enum":["metric","imperial"],"description":"Units — Options: metric (Kilograms), imperial (Pounds)","default":"metric"}},"title":"Calorie Calculator input","description":"Turn a daily calorie target into a weekly deficit, a projected rate of change and a per-meal split.","additionalProperties":false},"CaseConverterInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["hello world example text"]},"mode":{"type":"string","enum":["upper","lower","title","sentence","camel","pascal","snake","kebab","constant","dot","alternating","inverse"],"description":"Convert to — Options: upper (UPPERCASE), lower (lowercase), title (Title Case), sentence (Sentence case), camel (camelCase), pascal (PascalCase), snake (snake_case), kebab (kebab-case), constant (CONSTANT_CASE), dot (dot.case), alternating (aLtErNaTiNg), inverse (iNVERSE)","default":"title"}},"title":"Case Converter input","description":"Convert text to UPPERCASE, lowercase, Title Case, camelCase, snake_case, kebab-case and more.","required":["text"],"additionalProperties":false},"CaseDetectorInput":{"type":"object","properties":{"input":{"type":"string","description":"Identifier","examples":["userAccountSettings"]},"mode":{"type":"string","enum":["auto"],"description":"Input is — Options: auto (Detect automatically)","default":"auto"}},"title":"Naming Convention Converter input","description":"Convert an identifier between every common naming convention at once.","required":["input"],"additionalProperties":false},"ChecklistToMarkdownInput":{"type":"object","properties":{"items":{"type":"string","description":"Items — Multi-line text.","examples":["Plan the release\n  Write the changelog\n  Tag the version\nRun the test suite\nDeploy to staging\n  Smoke test\n  Check the logs\nAnnounce"]},"style":{"type":"string","enum":["task","bullet","html","outline","plain"],"description":"Output — Options: task (Markdown task list — [ ]), bullet (Markdown bullets), html (HTML checkboxes), outline (Numbered outline — 1, 1.1, 1.2), plain (Plain text with dashes)","default":"task"},"numbered":{"type":"boolean","description":"Mark completed items — Lines starting with x, ✓ or [x] are output as checked.","default":false},"nested":{"type":"boolean","description":"Preserve indentation","default":true}},"title":"Checklist to Markdown input","description":"Turn a plain list into Markdown task lists, HTML checkboxes or a numbered outline.","required":["items"],"additionalProperties":false},"ClothingSizeConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["us_women","uk_women","eu_women","it_women","fr_women","jp_women"],"description":"From — Options: us_women (US Women's (US)), uk_women (UK Women's (UK)), eu_women (EU Women's (EU)), it_women (IT Women's (IT)), fr_women (FR Women's (FR)), jp_women (JP Women's (JP))","default":"us_women"},"to":{"type":"string","enum":["us_women","uk_women","eu_women","it_women","fr_women","jp_women"],"description":"To — Options: us_women (US Women's (US)), uk_women (UK Women's (UK)), eu_women (EU Women's (EU)), it_women (IT Women's (IT)), fr_women (FR Women's (FR)), jp_women (JP Women's (JP))","default":"eu_women"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":3}},"title":"Clothing Size Converter input","description":"Convert clothing size between 6 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"CodeMinifierInput":{"type":"object","properties":{"code":{"type":"string","description":"Code — Multi-line text.","examples":["/* Card component */\n.card {\n  display: flex;\n  gap: 1rem; /* spacing */\n  padding: 1rem;\n}\n\n.card:hover {\n  transform: translateY(-2px);\n}"],"contentMediaType":"text/css"},"language":{"type":"string","enum":["css","html","js"],"description":"Language — Options: css (CSS), html (HTML), js (JavaScript)","default":"css"},"aggressive":{"type":"boolean","description":"Also shorten values — Trims trailing zeros and collapses #ffffff to #fff.","default":true}},"title":"HTML, CSS & JS Minifier input","description":"Strip whitespace and comments to shrink HTML, CSS and JavaScript for production.","required":["code"],"additionalProperties":false},"ColorBlindnessSimulatorInput":{"type":"object","properties":{"color":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Colour — A CSS hex colour, e.g. #3366ff.","default":"#e11d48"},"type":{"type":"string","enum":["all","protanopia","deuteranopia","tritanopia","achromatopsia"],"description":"Simulate — Options: all (All types), protanopia (Protanopia (no red)), deuteranopia (Deuteranopia (no green)), tritanopia (Tritanopia (no blue)), achromatopsia (Achromatopsia (no colour))","default":"all"}},"title":"Colour Blindness Simulator input","description":"See how a colour appears to people with protanopia, deuteranopia and tritanopia.","additionalProperties":false},"ColorConverterInput":{"type":"object","properties":{"color":{"type":"string","description":"Colour","examples":["#3b82f6"]},"formats":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["formats","contrast","scale","harmony","css"]},"description":"Show sections — Pick which sections appear in the result. — Options: formats (All formats), contrast (Contrast), scale (Tints & shades), harmony (Harmonies), css (CSS snippet)","default":["formats","contrast","scale","harmony","css"]}},"title":"Colour Converter input","description":"Convert any colour to HEX, RGB, HSL, HSV, CMYK, LAB and native code — with contrast, tints and harmonies.","required":["color"],"additionalProperties":false},"ColorMixerInput":{"type":"object","properties":{"from":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Colour A — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"},"to":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Colour B — A CSS hex colour, e.g. #3366ff.","default":"#f59e0b"},"steps":{"description":"Steps","type":"number","minimum":3,"maximum":20,"default":7},"mode":{"type":"string","enum":["rgb","hsl"],"description":"Blend in — Options: rgb (RGB (what CSS does)), hsl (HSL (through the colour wheel))","default":"rgb"}},"title":"Colour Mixer & Blender input","description":"Blend two colours and generate the intermediate steps between them.","additionalProperties":false},"ColorPaletteGeneratorInput":{"type":"object","properties":{"base":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Base colour — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"},"scheme":{"type":"string","enum":["complementary","analogous","triadic","tetradic","split","monochromatic","shades"],"description":"Harmony — Options: complementary (Complementary), analogous (Analogous), triadic (Triadic), tetradic (Tetradic), split (Split complementary), monochromatic (Monochromatic), shades (Shades and tints)","default":"analogous"},"count":{"description":"Colours","type":"number","minimum":3,"maximum":12,"default":6}},"title":"Colour Palette Generator input","description":"Build harmonious palettes — complementary, triadic, analogous and monochromatic.","additionalProperties":false},"ColorShadesGeneratorInput":{"type":"object","properties":{"color":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Base colour — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"},"steps":{"description":"Steps each way","type":"number","minimum":2,"maximum":12,"default":5}},"title":"Colour Tints & Shades Generator input","description":"Generate lighter tints and darker shades of any colour, with hex values.","additionalProperties":false},"ColumnsToLinesInput":{"type":"object","properties":{"text":{"type":"string","description":"Input — Multi-line text.","examples":["apple, banana, cherry"]},"direction":{"type":"string","enum":["to-lines","to-columns"],"description":"Direction — Options: to-lines (Delimited → one per line), to-columns (One per line → delimited)","default":"to-lines"},"separator":{"type":"string","enum":["comma","semicolon","tab","pipe","space"],"description":"Delimiter — Options: comma (Comma), semicolon (Semicolon), tab (Tab), pipe (Pipe), space (Space)","default":"comma"}},"title":"Columns to Lines Converter input","description":"Switch between a delimited single line and one item per line, in either direction.","required":["text"],"additionalProperties":false},"CommentRemoverInput":{"type":"object","properties":{"code":{"type":"string","description":"Code — Multi-line text.","examples":["// A greeting\nconst url = \"https://example.com\"; // not a comment inside the string\n/* block\n   comment */\nfunction hi() { return 1; }"],"contentMediaType":"text/javascript"},"language":{"type":"string","enum":["c-style","hash","html","css","sql","lua"],"description":"Language — Options: c-style (JavaScript, TypeScript, C, C++, Java, Go, Rust, C#, Swift), hash (Python, Ruby, Shell, YAML, Perl, R), html (HTML, XML, Vue, Svelte), css (CSS, SCSS, Less), sql (SQL), lua (Lua)","default":"c-style"},"blankLines":{"type":"boolean","description":"Remove the blank lines left behind","default":true},"keepLicence":{"type":"boolean","description":"Keep licence headers — Preserves a leading block comment mentioning licence, copyright or SPDX.","default":true}},"title":"Code Comment Remover input","description":"Strip comments from six language families without breaking string literals.","required":["code"],"additionalProperties":false},"CompoundInterestCalculatorInput":{"type":"object","properties":{"principal":{"description":"Initial amount","type":"number","minimum":0,"default":10000},"contribution":{"description":"Added each month","type":"number","minimum":0,"default":250},"rate":{"description":"Annual return — Measured in %.","type":"number","minimum":-50,"maximum":100,"default":7},"years":{"description":"Years","type":"number","minimum":1,"maximum":100,"default":20},"compounds":{"type":"string","enum":["1","4","12","365"],"description":"Compounding — Options: 1 (Annually), 4 (Quarterly), 12 (Monthly), 365 (Daily)","default":"12"}},"title":"Compound Interest Calculator input","description":"Project savings growth with compound interest and regular contributions.","additionalProperties":false},"ContrastCheckerInput":{"type":"object","properties":{"foreground":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Text colour — A CSS hex colour, e.g. #3366ff.","default":"#475569"},"background":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Background colour — A CSS hex colour, e.g. #3366ff.","default":"#ffffff"},"fontSize":{"description":"Font size — Measured in px.","type":"number","minimum":8,"maximum":96,"default":16},"bold":{"type":"boolean","description":"Bold text","default":false}},"title":"WCAG Contrast Checker input","description":"Check colour contrast against WCAG AA and AAA thresholds for accessible text.","additionalProperties":false},"CookingConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["ml","l","tspus","tbspus","tbspau","cupus","cupmetric","flozus","ptus","qtus"],"description":"From — Options: ml (Millilitres (mL)), l (Litres (L)), tspus (Teaspoons (US) (tsp)), tbspus (Tablespoons (US) (tbsp)), tbspau (Tablespoons (AU) (tbsp)), cupus (Cups (US) (cup)), cupmetric (Cups (metric) (cup)), flozus (Fluid Ounces (US) (fl oz)), ptus (Pints (US) (pt)), qtus (Quarts (US) (qt))","default":"cupus"},"to":{"type":"string","enum":["ml","l","tspus","tbspus","tbspau","cupus","cupmetric","flozus","ptus","qtus"],"description":"To — Options: ml (Millilitres (mL)), l (Litres (L)), tspus (Teaspoons (US) (tsp)), tbspus (Tablespoons (US) (tbsp)), tbspau (Tablespoons (AU) (tbsp)), cupus (Cups (US) (cup)), cupmetric (Cups (metric) (cup)), flozus (Fluid Ounces (US) (fl oz)), ptus (Pints (US) (pt)), qtus (Quarts (US) (qt))","default":"ml"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Cooking Measurement Converter input","description":"Convert cooking measurement between 10 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"CountdownCalculatorInput":{"type":"object","properties":{"target":{"type":"string","description":"Target date"},"from":{"type":"string","description":"Counting from — Fixed so a shared link always shows the same figures."},"label":{"type":"string","description":"Event name"}},"title":"Countdown Calculator input","description":"Count down to any date and see the gap in years, months, weeks, days, hours and minutes.","required":["target","from","label"],"additionalProperties":false},"Crc32ChecksumInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["Convertto"]}},"title":"CRC32 Checksum Calculator input","description":"Calculate a CRC32 checksum — the fast error-detection code used in ZIP and PNG files.","required":["text"],"additionalProperties":false},"CronExpressionGeneratorInput":{"type":"object","properties":{"expression":{"type":"string","description":"Cron expression","examples":["0 9 * * 1-5"]}},"title":"Cron Expression Parser input","description":"Translate a cron expression into plain English and see when it will next run.","required":["expression"],"additionalProperties":false},"CronNextRunInput":{"type":"object","properties":{"expression":{"type":"string","description":"Cron expression — Five fields: minute hour day month weekday.","examples":["0 9 * * 1-5"]},"count":{"description":"Show next — Measured in runs.","type":"number","minimum":1,"maximum":60,"default":10},"from":{"type":"string","description":"Starting from"},"seconds":{"type":"boolean","description":"Six fields (seconds first)","default":false}},"title":"Cron Next Run Calculator input","description":"See the next fire times for a cron expression, with each field explained.","required":["expression","from"],"additionalProperties":false},"CspGeneratorInput":{"type":"object","properties":{"directives":{"type":"string","enum":["strict","moderate","spa","permissive"],"description":"Policy preset — Options: strict (Strict — self only, no inline), moderate (Moderate — allows inline styles), spa (Single-page app — allows data: and blob:), permissive (Permissive — allows HTTPS anywhere)","default":"strict"},"reportOnly":{"type":"boolean","description":"Report-only mode — Logs violations without blocking. Always start here.","default":true}},"title":"Content Security Policy Generator input","description":"Build a CSP header from common presets, with each directive explained.","additionalProperties":false},"CssAnimationGeneratorInput":{"type":"object","properties":{"type":{"type":"string","enum":["fade-in","slide-up","slide-down","scale-in","bounce","pulse","spin","shake","flip"],"description":"Animation — Options: fade-in (Fade in), slide-up (Slide up), slide-down (Slide down), scale-in (Scale in), bounce (Bounce), pulse (Pulse), spin (Spin), shake (Shake), flip (Flip)","default":"fade-in"},"name":{"type":"string","description":"Animation name"},"duration":{"description":"Duration — Measured in ms.","type":"number","minimum":50,"maximum":5000,"default":600},"timing":{"type":"string","enum":["ease","ease-in","ease-out","ease-in-out","linear","cubic-bezier(0.34, 1.56, 0.64, 1)"],"description":"Easing — Options: ease, ease-in, ease-out, ease-in-out, linear, cubic-bezier(0.34, 1.56, 0.64, 1) (spring)","default":"ease-out"},"iteration":{"type":"string","enum":["1","2","infinite"],"description":"Repeat — Options: 1 (Once), 2 (Twice), infinite (Forever)","default":"1"}},"title":"CSS Animation Generator input","description":"Generate keyframe animations — fade, slide, bounce, pulse, spin and shake.","required":["name"],"additionalProperties":false},"CssButtonGeneratorInput":{"type":"object","properties":{"style":{"type":"string","enum":["solid","outline","ghost","soft","gradient"],"description":"Style — Options: solid (Solid), outline (Outline), ghost (Ghost), soft (Soft tint), gradient (Gradient)","default":"solid"},"color":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Accent — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"},"text":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Label colour — A CSS hex colour, e.g. #3366ff. — Only applies for some combinations of the other fields.","default":"#ffffff"},"radius":{"description":"Corner radius — Between 0 and 40 px.","type":"number","minimum":0,"maximum":40,"default":10},"paddingX":{"description":"Padding — across — Between 4 and 48 px.","type":"number","minimum":4,"maximum":48,"default":20},"paddingY":{"description":"Padding — down — Between 2 and 32 px.","type":"number","minimum":2,"maximum":32,"default":10},"size":{"description":"Font size — Between 10 and 24 px.","type":"number","minimum":10,"maximum":24,"default":15},"weight":{"type":"string","enum":["400","500","600","700"],"description":"Weight — Options: 400 (Regular), 500 (Medium), 600 (Semibold), 700 (Bold)","default":"600"}},"title":"CSS Button Generator input","description":"Design a button and copy the CSS, including the hover, active and focus-visible states.","additionalProperties":false},"CssClampGeneratorInput":{"type":"object","properties":{"minSize":{"description":"Minimum size — Measured in px.","type":"number","minimum":1,"default":16},"maxSize":{"description":"Maximum size — Measured in px.","type":"number","minimum":1,"default":32},"minWidth":{"description":"At viewport width — Measured in px.","type":"number","minimum":100,"default":320},"maxWidth":{"description":"Up to viewport width — Measured in px.","type":"number","minimum":200,"default":1280},"base":{"description":"Root font size — Measured in px.","type":"number","minimum":1,"default":16}},"title":"CSS Clamp Generator input","description":"Generate fluid clamp() values that scale smoothly between two viewport widths.","additionalProperties":false},"CssClipPathGeneratorInput":{"type":"object","properties":{"shape":{"type":"string","enum":["polygon","star","circle","ellipse","inset","chevron","message"],"description":"Shape — Options: polygon (Regular polygon), star (Star), circle (Circle), ellipse (Ellipse), inset (Inset rectangle), chevron (Chevron), message (Speech bubble)","default":"polygon"},"sides":{"description":"Sides — Between 3 and 12. — Only applies for some combinations of the other fields.","type":"number","minimum":3,"maximum":12,"default":6},"points":{"description":"Points — Between 3 and 12. — Only applies for some combinations of the other fields.","type":"number","minimum":3,"maximum":12,"default":5},"inset":{"description":"Inset — Between 0 and 45 %. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":45,"default":12},"round":{"description":"Rounded corners — Between 0 and 50 %. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":50,"default":0}},"title":"CSS Clip Path Generator input","description":"Cut an element to a polygon, circle, ellipse or inset, and copy the clip-path.","additionalProperties":false},"CssColumnsGeneratorInput":{"type":"object","properties":{"mode":{"type":"string","enum":["width","count"],"description":"Sizing — Options: width (By ideal column width), count (By fixed column count)","default":"width"},"width":{"description":"Ideal width — Between 120 and 600 px. — Only applies for some combinations of the other fields.","type":"number","minimum":120,"maximum":600,"default":260},"count":{"description":"Columns — Between 2 and 6. — Only applies for some combinations of the other fields.","type":"number","minimum":2,"maximum":6,"default":3},"gap":{"description":"Gap — Between 0 and 96 px.","type":"number","minimum":0,"maximum":96,"default":32},"rule":{"description":"Rule width — Between 0 and 8 px.","type":"number","minimum":0,"maximum":8,"default":1},"ruleColor":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Rule colour — A CSS hex colour, e.g. #3366ff. — Only applies for some combinations of the other fields.","default":"#e2e8f0"}},"title":"CSS Multi-Column Generator input","description":"Flow text into balanced columns with a rule between them.","additionalProperties":false},"CssCursorGeneratorInput":{"type":"object","properties":{"cursor":{"type":"string","enum":["auto","default","none","context-menu","help","pointer","progress","wait","cell","crosshair","text","vertical-text","alias","copy","move","no-drop","not-allowed","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out"],"description":"Cursor — One of 36 values, e.g. auto, default, none, context-menu, help, pointer, progress, wait, cell, crosshair, text, vertical-text, alias, copy, move, no-drop, not-allowed, grab, grabbing, all-scroll, col-resize, row-resize, n-resize, e-resize…","default":"pointer"}},"title":"CSS Cursor Reference & Generator input","description":"Hover to try every CSS cursor keyword, and copy the one you want.","additionalProperties":false},"CssFilterGeneratorInput":{"type":"object","properties":{"filter":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["blur","brightness","contrast","grayscale","hue-rotate","invert","opacity","saturate","sepia","drop-shadow"]},"description":"Filters to include — Options: blur (Blur), brightness (Brightness), contrast (Contrast), grayscale (Grayscale), hue-rotate (Hue rotate), invert (Invert), opacity (Opacity), saturate (Saturate), sepia (Sepia), drop-shadow (Drop shadow)","default":["brightness","contrast","saturate"]},"blur":{"description":"Blur — Between 0 and 40 px. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":40,"default":4},"brightness":{"description":"Brightness — Between 0 and 300 %. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":300,"default":100},"contrast":{"description":"Contrast — Between 0 and 300 %. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":300,"default":100},"grayscale":{"description":"Grayscale — Between 0 and 100 %. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":100,"default":100},"hueRotate":{"description":"Hue rotate — Between 0 and 360 deg. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":360,"default":90},"invert":{"description":"Invert — Between 0 and 100 %. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":100,"default":100},"opacity":{"description":"Opacity — Between 0 and 100 %. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":100,"default":100},"saturate":{"description":"Saturate — Between 0 and 400 %. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":400,"default":150},"sepia":{"description":"Sepia — Between 0 and 100 %. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":100,"default":100},"dropShadow":{"type":"boolean","description":"Coloured drop shadow — Only applies for some combinations of the other fields.","default":true}},"title":"CSS Filter Generator input","description":"Build a CSS filter chain visually and see it applied to a real element as you adjust it.","additionalProperties":false},"CssFormatterInput":{"type":"object","properties":{"code":{"type":"string","description":"Stylesheet — Multi-line text.","examples":[".card{display:flex;gap:1rem;padding:1rem 1.5rem;border-radius:12px}\n.card:hover{box-shadow:0 4px 12px rgba(0,0,0,.08);transform:translateY(-2px)}\n@media(max-width:640px){.card{flex-direction:column}}"],"contentMediaType":"text/css"},"syntax":{"type":"string","enum":["css","scss","less"],"description":"Syntax — Options: css (CSS), scss (SCSS), less (Less)","default":"css"},"printWidth":{"description":"Line width — Measured in chars.","type":"number","minimum":40,"maximum":200,"default":80},"tabWidth":{"description":"Indent size — Measured in spaces.","type":"number","minimum":1,"maximum":8,"default":2},"useTabs":{"type":"boolean","description":"Indent with tabs","default":false}},"title":"CSS, SCSS & Less Formatter input","description":"Format stylesheets with consistent indentation, spacing and property ordering.","required":["code"],"additionalProperties":false},"CssGridGeneratorInput":{"type":"object","properties":{"columns":{"type":"string","description":"Columns — Any grid-template-columns value."},"rows":{"type":"string","description":"Rows"},"gap":{"description":"Gap — Measured in px.","type":"number","minimum":0,"maximum":80,"default":16},"items":{"description":"Preview items","type":"number","minimum":1,"maximum":24,"default":6}},"title":"CSS Grid Generator input","description":"Build a CSS Grid layout visually and copy the container CSS.","required":["columns","rows"],"additionalProperties":false},"CssHoverEffectsGeneratorInput":{"type":"object","properties":{"effect":{"type":"string","enum":["underline","lift","fill","grow","border","shine"],"description":"Effect — Options: underline (Sliding underline), lift (Lift and shadow), fill (Background fill), grow (Scale up), border (Border draw), shine (Shine sweep)","default":"underline"},"color":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Accent — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"},"duration":{"description":"Duration — Between 60 and 1000 ms.","type":"number","minimum":60,"maximum":1000,"default":250},"distance":{"description":"Distance — Between 1 and 24 px. — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":24,"default":4}},"title":"CSS Hover Effect Generator input","description":"Generate a hover effect that animates cleanly, with the reduced-motion guard included.","additionalProperties":false},"CssLoaderGeneratorInput":{"type":"object","properties":{"style":{"type":"string","enum":["spinner","dual","pulse","bounce","bars"],"description":"Style — Options: spinner (Ring spinner), dual (Dual ring), pulse (Pulse), bounce (Bouncing dot), bars (Sweeping bar)","default":"spinner"},"size":{"description":"Size — Between 16 and 160 px.","type":"number","minimum":16,"maximum":160,"default":48},"thickness":{"description":"Thickness — Between 1 and 20 px. — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":20,"default":5},"color":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Colour — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"},"speed":{"description":"Cycle — Between 200 and 3000 ms.","type":"number","minimum":200,"maximum":3000,"default":900}},"title":"CSS Loader Generator input","description":"Build a spinner, dots, bars or a pulse from pure CSS and copy the keyframes.","additionalProperties":false},"CssNamedColorsInput":{"type":"object","properties":{"query":{"type":"string","description":"Filter"}},"title":"CSS Named Colours Reference input","description":"Every CSS colour name with its HEX, RGB, HSL and OKLCH value, sortable by hue and contrast.","required":["query"],"additionalProperties":false},"CssPatternGeneratorInput":{"type":"object","properties":{"pattern":{"type":"string","enum":["stripes","stripes-straight","checks","dots","grid","graph","zigzag","diagonal-grid","noise"],"description":"Pattern — Options: stripes (Diagonal stripes), stripes-straight (Straight stripes), checks (Checkerboard), dots (Polka dots), grid (Grid lines), graph (Graph paper), zigzag (Zigzag), diagonal-grid (Diagonal cross-hatch), noise (Noise texture (SVG))","default":"stripes"},"colour1":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Background — A CSS hex colour, e.g. #3366ff.","default":"#ffffff"},"colour2":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Pattern colour — A CSS hex colour, e.g. #3366ff.","default":"#2563eb"},"size":{"description":"Scale — Between 4 and 120 px.","type":"number","minimum":4,"maximum":120,"default":24},"thickness":{"description":"Line thickness — Between 1 and 30 px. — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":30,"default":2},"angle":{"description":"Angle — Between 0 and 180 deg. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":180,"default":45},"opacity":{"description":"Pattern opacity — Between 5 and 100 %.","type":"number","minimum":5,"maximum":100,"default":100}},"title":"CSS Pattern & Texture Generator input","description":"Generate repeating background patterns in pure CSS — no image files to host.","additionalProperties":false},"CssScrollbarGeneratorInput":{"type":"object","properties":{"width":{"description":"Width — Between 0 and 24 px.","type":"number","minimum":0,"maximum":24,"default":10},"radius":{"description":"Thumb radius — Between 0 and 999 px.","type":"number","minimum":0,"maximum":999,"default":999},"track":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Track — A CSS hex colour, e.g. #3366ff.","default":"#f1f5f9"},"thumb":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Thumb — A CSS hex colour, e.g. #3366ff.","default":"#94a3b8"},"hover":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Thumb on hover — A CSS hex colour, e.g. #3366ff.","default":"#64748b"}},"title":"CSS Scrollbar Styler input","description":"Style a scrollbar with both the standard properties and the WebKit pseudo-elements.","additionalProperties":false},"CssShapeGeneratorInput":{"type":"object","properties":{"shape":{"type":"string","enum":["triangle","arrow","star","hexagon","pentagon","rhombus","circle","heart","speech"],"description":"Shape — Options: triangle (Triangle), arrow (Arrow), star (Star), hexagon (Hexagon), pentagon (Pentagon), rhombus (Rhombus), circle (Circle), heart (Heart), speech (Speech bubble)","default":"triangle"},"direction":{"type":"string","enum":["up","down","left","right"],"description":"Direction — Options: up (Up), down (Down), left (Left), right (Right) — Only applies for some combinations of the other fields.","default":"up"},"size":{"description":"Size — Measured in px.","type":"number","minimum":20,"maximum":300,"default":100},"color":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Colour — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"}},"title":"CSS Shape Generator input","description":"Generate triangles, arrows, stars and other shapes using pure CSS.","additionalProperties":false},"CssSpecificityCalculatorInput":{"type":"object","properties":{"selector":{"type":"string","description":"Selector — Paste the selector that is not applying.","examples":["#nav .item a:hover"]}},"title":"CSS Specificity Calculator input","description":"Work out a selector's specificity and see which parts contributed what.","required":["selector"],"additionalProperties":false},"CssTooltipGeneratorInput":{"type":"object","properties":{"position":{"type":"string","enum":["top","bottom","left","right"],"description":"Position — Options: top (Above), bottom (Below), left (Left), right (Right)","default":"top"},"distance":{"description":"Distance — Between 0 and 32 px.","type":"number","minimum":0,"maximum":32,"default":8},"background":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Background — A CSS hex colour, e.g. #3366ff.","default":"#0f172a"},"text":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Text — A CSS hex colour, e.g. #3366ff.","default":"#ffffff"},"radius":{"description":"Corner radius — Between 0 and 20 px.","type":"number","minimum":0,"maximum":20,"default":6},"arrow":{"type":"boolean","description":"Show the arrow","default":true}},"title":"CSS Tooltip Generator input","description":"Generate a tooltip from a data attribute — no JavaScript, no extra markup.","additionalProperties":false},"CssTransformGeneratorInput":{"type":"object","properties":{"translateX":{"description":"Translate X — Between -300 and 300 px.","type":"number","minimum":-300,"maximum":300,"default":0},"translateY":{"description":"Translate Y — Between -300 and 300 px.","type":"number","minimum":-300,"maximum":300,"default":0},"uniform":{"type":"boolean","description":"Scale both axes together","default":true},"scale":{"description":"Scale — Between 0 and 3. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":3,"default":1},"scaleX":{"description":"Scale X — Between 0 and 3. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":3,"default":1},"scaleY":{"description":"Scale Y — Between 0 and 3. — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":3,"default":1},"rotate":{"description":"Rotate — Between -360 and 360 deg.","type":"number","minimum":-360,"maximum":360,"default":0},"skewX":{"description":"Skew X — Between -60 and 60 deg.","type":"number","minimum":-60,"maximum":60,"default":0},"skewY":{"description":"Skew Y — Between -60 and 60 deg.","type":"number","minimum":-60,"maximum":60,"default":0},"rotateX":{"description":"Rotate X (3D) — Between -180 and 180 deg.","type":"number","minimum":-180,"maximum":180,"default":0},"rotateY":{"description":"Rotate Y (3D) — Between -180 and 180 deg.","type":"number","minimum":-180,"maximum":180,"default":0},"perspective":{"description":"Perspective — Lower values exaggerate the 3D effect. Required for rotateX and rotateY to be visible. — Between 100 and 3000 px.","type":"number","minimum":100,"maximum":3000,"default":800},"origin":{"type":"string","enum":["center","top left","top right","bottom left","bottom right","top","bottom"],"description":"Transform origin — Options: center (Centre), top left (Top left), top right (Top right), bottom left (Bottom left), bottom right (Bottom right), top (Top centre), bottom (Bottom centre)","default":"center"}},"title":"CSS Transform Generator input","description":"Build a 2D or 3D transform visually and copy the CSS, with the transform origin handled properly.","additionalProperties":false},"CsvAnalyserInput":{"type":"object","properties":{"csv":{"type":"string","description":"CSV — Multi-line text.","examples":["id,name,email,city,amount\n1,Ada Lovelace,ada@example.com,London,240.50\n2,Grace Hopper,grace@example.com,New York,1120.00\n3,Alan Turing,alan@example.com,Manchester,85.25\n4,Ada Lovelace,ada@example.com,London,240.50\n5,Katherine Johnson,katherine@example.com,Hampton,610.75"]},"delimiter":{"type":"string","enum":["auto",",","\t",";","|"],"description":"Delimiter — Options: auto (Detect automatically), , (Comma), \t (Tab), ; (Semicolon), | (Pipe)","default":"auto"},"header":{"type":"boolean","description":"First row is a header","default":true}},"title":"CSV Analyser input","description":"Profile a CSV: column types, missing values, ranges, distinct counts and outliers.","required":["csv"],"additionalProperties":false},"CsvColumnExtractorInput":{"type":"object","properties":{"csv":{"type":"string","description":"CSV — Multi-line text.","examples":["id,name,email,city,amount\n1,Ada Lovelace,ada@example.com,London,240.50\n2,Grace Hopper,grace@example.com,New York,1120.00\n3,Alan Turing,alan@example.com,Manchester,85.25\n4,Ada Lovelace,ada@example.com,London,240.50\n5,Katherine Johnson,katherine@example.com,Hampton,610.75"]},"columns":{"type":"string","description":"Columns to keep — Names or 1-based positions, comma separated. The order you list them is the output order."},"delimiter":{"type":"string","enum":["auto",",","\t",";","|"],"description":"Delimiter — Options: auto (Detect automatically), , (Comma), \t (Tab), ; (Semicolon), | (Pipe)","default":"auto"},"output":{"type":"string","enum":["csv","tsv","json","list"],"description":"Output as — Options: csv (CSV), tsv (TSV), json (JSON), list (Plain list (single column))","default":"csv"},"header":{"type":"boolean","description":"First row is a header","default":true},"unique":{"type":"boolean","description":"Remove duplicate rows","default":false}},"title":"CSV Column Extractor input","description":"Pull selected columns out of a CSV by name or position, and reorder them.","required":["csv","columns"],"additionalProperties":false},"CsvDeduplicatorInput":{"type":"object","properties":{"csv":{"type":"string","description":"CSV — Multi-line text.","examples":["id,name,email,city,amount\n1,Ada Lovelace,ada@example.com,London,240.50\n2,Grace Hopper,grace@example.com,New York,1120.00\n3,Alan Turing,alan@example.com,Manchester,85.25\n4,Ada Lovelace,ada@example.com,London,240.50\n5,Katherine Johnson,katherine@example.com,Hampton,610.75"]},"key":{"type":"string","description":"Match on columns — Names or positions, comma separated. Two rows are duplicates when these columns agree."},"delimiter":{"type":"string","enum":["auto",",","\t",";","|"],"description":"Delimiter — Options: auto (Detect automatically), , (Comma), \t (Tab), ; (Semicolon), | (Pipe)","default":"auto"},"keep":{"type":"string","enum":["first","last","none"],"description":"Keep — Options: first (The first occurrence), last (The last occurrence), none (Neither — drop every duplicated row)","default":"first"},"header":{"type":"boolean","description":"First row is a header","default":true},"caseSensitive":{"type":"boolean","description":"Case sensitive","default":false}},"title":"CSV Duplicate Remover input","description":"Remove duplicate rows from a CSV, matching on every column or just a key you choose.","required":["csv","key"],"additionalProperties":false},"CsvMergerInput":{"type":"object","properties":{"left":{"type":"string","description":"First CSV — Multi-line text.","examples":["id,name,city\n1,Ada,London\n2,Grace,New York\n3,Alan,Manchester"]},"right":{"type":"string","description":"Second CSV — Multi-line text.","examples":["id,amount,status\n1,240.50,paid\n2,1120.00,pending\n4,99.00,paid"]},"key":{"type":"string","description":"Join on column — Leave blank to stack the rows instead of joining."},"type":{"type":"string","enum":["inner","left","right","outer","stack"],"description":"Join type — Options: inner (Inner — only rows present in both), left (Left — all rows from the first), right (Right — all rows from the second), outer (Full outer — everything from both), stack (Stack — append rows, no join)","default":"inner"},"delimiter":{"type":"string","enum":["auto",",","\t",";","|"],"description":"Delimiter — Options: auto (Detect automatically), , (Comma), \t (Tab), ; (Semicolon), | (Pipe)","default":"auto"},"suffix":{"type":"string","description":"Suffix for clashing columns"}},"title":"CSV Merger & Joiner input","description":"Join two CSV files on a shared key, or stack them, with inner, left and outer joins.","required":["left","right","key","suffix"],"additionalProperties":false},"CsvSplitterInput":{"type":"object","properties":{"csv":{"type":"string","description":"CSV — Multi-line text.","examples":["id,name,email,city,amount\n1,Ada Lovelace,ada@example.com,London,240.50\n2,Grace Hopper,grace@example.com,New York,1120.00\n3,Alan Turing,alan@example.com,Manchester,85.25\n4,Ada Lovelace,ada@example.com,London,240.50\n5,Katherine Johnson,katherine@example.com,Hampton,610.75"]},"mode":{"type":"string","enum":["rows","column"],"description":"Split — Options: rows (Into chunks of N rows), column (By the value in a column)","default":"rows"},"size":{"description":"Rows per chunk — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":100000,"default":2},"column":{"type":"string","description":"Group by column — Only applies for some combinations of the other fields."},"delimiter":{"type":"string","enum":["auto",",","\t",";","|"],"description":"Delimiter — Options: auto (Detect automatically), , (Comma), \t (Tab), ; (Semicolon), | (Pipe)","default":"auto"},"header":{"type":"boolean","description":"Repeat the header in each part","default":true}},"title":"CSV Splitter input","description":"Split a CSV into chunks of N rows, or into separate files grouped by a column value.","required":["csv"],"additionalProperties":false},"CsvViewerInput":{"type":"object","properties":{"input":{"type":"string","description":"CSV data — Multi-line text.","examples":["name,role,city\nAda Lovelace,Engineer,London\nGrace Hopper,Admiral,New York\nAlan Turing,Researcher,Manchester"]},"delimiter":{"type":"string","enum":["auto",",","\t",";","|"],"description":"Delimiter — Options: auto (Detect automatically), , (Comma), \t (Tab), ; (Semicolon), | (Pipe)","default":"auto"},"header":{"type":"boolean","description":"First row is a header","default":true}},"title":"CSV Viewer & Table Converter input","description":"View CSV data as a sortable table and export it as JSON or a Markdown table.","required":["input"],"additionalProperties":false},"CubicBezierGeneratorInput":{"type":"object","properties":{"x1":{"description":"P1 x","type":"number","minimum":0,"maximum":1,"default":0.22},"y1":{"description":"P1 y","type":"number","minimum":-2,"maximum":3,"default":1},"x2":{"description":"P2 x","type":"number","minimum":0,"maximum":1,"default":0.36},"y2":{"description":"P2 y","type":"number","minimum":-2,"maximum":3,"default":1},"duration":{"description":"Duration — Measured in ms.","type":"number","minimum":100,"maximum":3000,"default":600}},"title":"Cubic Bezier Easing Generator input","description":"Build custom CSS easing curves and see the motion they produce.","additionalProperties":false},"CurlToCodeInput":{"type":"object","properties":{"input":{"type":"string","description":"cURL command — Multi-line text.","examples":["curl -X POST https://api.example.com/v1/users \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer TOKEN\" \\\n  -d '{\"name\":\"Ada\",\"role\":\"admin\"}'"]},"style":{"type":"string","enum":["fetch","axios","python","httpie"],"description":"Generate — Options: fetch (JavaScript fetch), axios, python (Python requests), httpie (HTTPie)","default":"fetch"}},"title":"cURL to Code Converter input","description":"Turn a cURL command into fetch, axios, Python requests or Node.js code.","required":["input"],"additionalProperties":false},"DataAnonymiserInput":{"type":"object","properties":{"csv":{"type":"string","description":"CSV — Multi-line text.","examples":["id,name,email,city,amount\n1,Ada Lovelace,ada@example.com,London,240.50\n2,Grace Hopper,grace@example.com,New York,1120.00\n3,Alan Turing,alan@example.com,Manchester,85.25\n4,Ada Lovelace,ada@example.com,London,240.50\n5,Katherine Johnson,katherine@example.com,Hampton,610.75"]},"columns":{"type":"string","description":"Columns to anonymise — Blank means columns whose names suggest personal data — email, name, phone, address."},"method":{"type":"string","enum":["mask","hash","fake","redact"],"description":"Method — Options: mask (Mask — keep the shape, hide the value), hash (Hash — consistent pseudonym per value), fake (Replace with realistic fake data), redact (Redact — replace entirely)","default":"mask"},"delimiter":{"type":"string","enum":["auto",",","\t",";","|"],"description":"Delimiter — Options: auto (Detect automatically), , (Comma), \t (Tab), ; (Semicolon), | (Pipe)","default":"auto"},"seed":{"type":"string","description":"Seed — The same seed maps the same input to the same replacement."}},"title":"CSV Data Anonymiser input","description":"Mask, hash or replace personal data in a CSV so it can be shared safely.","required":["csv","columns","seed"],"additionalProperties":false},"DataExtractorInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["Contact ada@example.com or grace@navy.mil.\nDocs: https://convertto.tech/tools and http://example.org/a?b=1\nServers: 192.168.1.1, 10.0.0.42\nCall +44 20 7946 0000 · #webdev #tools"]},"extract":{"type":"string","enum":["email","url","ipv4","phone","hashtag","mention","number","hex","date"],"description":"Extract — Options: email (Email addresses), url (URLs), ipv4 (IPv4 addresses), phone (Phone numbers), hashtag (Hashtags), mention (@mentions), number (Numbers), hex (Hex colours), date (Dates (ISO and slash))","default":"email"},"unique":{"type":"boolean","description":"Remove duplicates","default":true},"sorted":{"type":"boolean","description":"Sort alphabetically","default":false}},"title":"Email, URL & Number Extractor input","description":"Pull emails, URLs, IP addresses, phone numbers or hashtags out of any text.","required":["text"],"additionalProperties":false},"DataFormatConverterInput":{"type":"object","properties":{"input":{"type":"string","description":"Input — Multi-line text.","examples":["{\n  \"name\": \"Convertto\",\n  \"private\": true,\n  \"categories\": [\"image\", \"pdf\", \"text\"],\n  \"stats\": { \"tools\": 300, \"free\": true }\n}"],"contentMediaType":"application/json"},"from":{"type":"string","enum":["auto","json","yaml","xml","csv","tsv","toml","html","markdown","sql","excel"],"description":"From — Options: auto (Detect automatically), json (JSON), yaml (YAML), xml (XML), csv (CSV), tsv (TSV), toml (TOML), html (HTML Table), markdown (Markdown Table), sql (SQL Insert Statements), excel (Excel (CSV))","default":"auto"},"to":{"type":"string","enum":["json","yaml","xml","csv","tsv","toml","html","markdown","sql","excel"],"description":"To — Options: json (JSON), yaml (YAML), xml (XML), csv (CSV), tsv (TSV), toml (TOML), html (HTML Table), markdown (Markdown Table), sql (SQL Insert Statements), excel (Excel (CSV))","default":"yaml"},"indent":{"description":"Indent","type":"number","minimum":0,"maximum":8,"default":2}},"title":"Data Format Converter input","description":"Convert between JSON, YAML, XML, CSV, TSV and TOML in any direction, locally in your browser.","required":["input"],"additionalProperties":false},"DataStorageConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["bit","byte","kb","mb","gb","tb","pb","kib","mib","gib","tib"],"description":"From — Options: bit (Bits (b)), byte (Bytes (B)), kb (Kilobytes (KB)), mb (Megabytes (MB)), gb (Gigabytes (GB)), tb (Terabytes (TB)), pb (Petabytes (PB)), kib (Kibibytes (KiB)), mib (Mebibytes (MiB)), gib (Gibibytes (GiB)), tib (Tebibytes (TiB))","default":"mb"},"to":{"type":"string","enum":["bit","byte","kb","mb","gb","tb","pb","kib","mib","gib","tib"],"description":"To — Options: bit (Bits (b)), byte (Bytes (B)), kb (Kilobytes (KB)), mb (Megabytes (MB)), gb (Gigabytes (GB)), tb (Terabytes (TB)), pb (Petabytes (PB)), kib (Kibibytes (KiB)), mib (Mebibytes (MiB)), gib (Gibibytes (GiB)), tib (Tebibytes (TiB))","default":"gb"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Data Storage Converter input","description":"Convert data size between 11 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"DataTransferRateConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["bps","kbps","mbps","gbps","byteps","kbyteps","mbyteps","gbyteps"],"description":"From — Options: bps (Bits per Second (bps)), kbps (Kilobits per Second (kbps)), mbps (Megabits per Second (Mbps)), gbps (Gigabits per Second (Gbps)), byteps (Bytes per Second (B/s)), kbyteps (Kilobytes per Second (KB/s)), mbyteps (Megabytes per Second (MB/s)), gbyteps (Gigabytes per Second (GB/s))","default":"mbps"},"to":{"type":"string","enum":["bps","kbps","mbps","gbps","byteps","kbyteps","mbyteps","gbyteps"],"description":"To — Options: bps (Bits per Second (bps)), kbps (Kilobits per Second (kbps)), mbps (Megabits per Second (Mbps)), gbps (Gigabits per Second (Gbps)), byteps (Bytes per Second (B/s)), kbyteps (Kilobytes per Second (KB/s)), mbyteps (Megabytes per Second (MB/s)), gbyteps (Gigabytes per Second (GB/s))","default":"mbyteps"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Data Transfer Rate Converter input","description":"Convert transfer rate between 8 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"DataUriGeneratorInput":{"type":"object","properties":{"text":{"type":"string","description":"Content — Multi-line text.","examples":["<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>"]},"mime":{"type":"string","enum":["image/svg+xml","text/plain","text/html","text/css","application/json","text/javascript"],"description":"MIME type — Options: image/svg+xml, text/plain, text/html, text/css, application/json, text/javascript","default":"image/svg+xml"},"charset":{"type":"string","enum":["base64","uri"],"description":"Encoding — Options: base64 (Base64), uri (URL-encoded)","default":"base64"}},"title":"Data URI Generator input","description":"Turn text, SVG or CSS into a data: URI you can inline directly in HTML or stylesheets.","required":["text"],"additionalProperties":false},"DateAddSubtractInput":{"type":"object","properties":{"start":{"type":"string","format":"date","description":"Start date — ISO 8601 date, YYYY-MM-DD."},"direction":{"type":"string","enum":["add","subtract"],"description":"Direction — Options: add (Add (into the future)), subtract (Subtract (into the past))","default":"add"},"amount":{"description":"Amount","type":"number","minimum":0,"maximum":100000,"default":30},"unit":{"type":"string","enum":["days","weeks","months","years"],"description":"Unit — Options: days (Days), weeks (Weeks), months (Months), years (Years)","default":"days"},"skipWeekends":{"type":"boolean","description":"Count working days only — Applies to days and weeks.","default":false}},"title":"Add or Subtract Days from a Date input","description":"Find the date a set number of days, weeks, months or years before or after another.","required":["start"],"additionalProperties":false},"DateDifferenceCalculatorInput":{"type":"object","properties":{"start":{"type":"string","format":"date","description":"Start date — ISO 8601 date, YYYY-MM-DD."},"end":{"type":"string","format":"date","description":"End date — ISO 8601 date, YYYY-MM-DD."},"includeEnd":{"type":"boolean","description":"Include the end date — On counts both endpoints, as contracts and hire periods usually do.","default":false}},"title":"Date Difference Calculator input","description":"Count the days, weeks, months and working days between two dates.","required":["start","end"],"additionalProperties":false},"DateFormatConverterInput":{"type":"object","properties":{"dates":{"type":"string","description":"Dates — One per line. ISO, slashed, written and Unix timestamps are all accepted. — Multi-line text.","examples":["2026-03-15\n15/03/2026\nMarch 15, 2026\n1773532800"]},"output":{"type":"string","enum":["iso","isoFull","us","eu","long","longUs","rfc","unix","unixMs","custom"],"description":"Convert to — Options: iso (ISO 8601 — 2026-03-15), isoFull (ISO 8601 with time — 2026-03-15T00:00:00Z), us (US — 03/15/2026), eu (European — 15/03/2026), long (Long — 15 March 2026), longUs (Long US — March 15, 2026), rfc (RFC 2822 — Sun, 15 Mar 2026), unix (Unix timestamp), unixMs (Unix milliseconds), custom (Custom pattern)","default":"iso"},"custom":{"type":"string","description":"Custom pattern — YYYY YY MM MMM MMMM DD ddd dddd HH mm ss — Only applies for some combinations of the other fields."},"locale":{"type":"string","description":"Locale for month names"}},"title":"Date Format Converter input","description":"Reformat a list of dates into ISO, US, European, RFC or any custom pattern.","required":["dates","locale"],"additionalProperties":false},"DayOfYearCalculatorInput":{"type":"object","properties":{"date":{"type":"string","description":"Date"}},"title":"Day of Year Calculator input","description":"Find the ordinal day number, week number, quarter and how much of the year has elapsed.","required":["date"],"additionalProperties":false},"DebtPayoffCalculatorInput":{"type":"object","properties":{"debts":{"type":"string","description":"Debts — One debt per line: name, balance, annual rate, minimum monthly payment. — Multi-line text.","examples":["Credit card, 4200, 22.9, 120\nCar loan, 8500, 6.4, 260\nStore card, 900, 29.9, 35"]},"extra":{"description":"Extra payment per month","type":"number","minimum":0,"maximum":1000000,"default":200},"strategy":{"type":"string","enum":["both","avalanche","snowball"],"description":"Strategy — Options: both (Compare both), avalanche (Avalanche — highest rate first), snowball (Snowball — smallest balance first)","default":"both"},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Debt Payoff Calculator input","description":"Compare snowball and avalanche repayment strategies across several debts.","required":["debts"],"additionalProperties":false},"DecisionMatrixInput":{"type":"object","properties":{"options":{"type":"string","description":"Options — Multi-line text.","examples":["Option A\nOption B\nOption C"]},"criteria":{"type":"string","description":"Criteria and weights — One per line: name, weight. Higher weight means more important. — Multi-line text.","examples":["Cost, 3\nSpeed, 2\nQuality, 5\nSupport, 1"]},"scores":{"type":"string","description":"Scores — Score each option against each criterion, typically 1 to 10. — Multi-line text.","examples":["8, 6, 4, 7\n5, 9, 8, 6\n7, 5, 9, 9"]}},"title":"Weighted Decision Matrix input","description":"Score options against weighted criteria and see which choice actually wins.","required":["options","criteria","scores"],"additionalProperties":false},"DensityConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["kgm3","gcm3","gml","kgl","lbft3","lbin3"],"description":"From — Options: kgm3 (Kilograms per Cubic Metre (kg/m³)), gcm3 (Grams per Cubic Centimetre (g/cm³)), gml (Grams per Millilitre (g/mL)), kgl (Kilograms per Litre (kg/L)), lbft3 (Pounds per Cubic Foot (lb/ft³)), lbin3 (Pounds per Cubic Inch (lb/in³))","default":"gcm3"},"to":{"type":"string","enum":["kgm3","gcm3","gml","kgl","lbft3","lbin3"],"description":"To — Options: kgm3 (Kilograms per Cubic Metre (kg/m³)), gcm3 (Grams per Cubic Centimetre (g/cm³)), gml (Grams per Millilitre (g/mL)), kgl (Kilograms per Litre (kg/L)), lbft3 (Pounds per Cubic Foot (lb/ft³)), lbin3 (Pounds per Cubic Inch (lb/in³))","default":"kgm3"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Density Converter input","description":"Convert density between 6 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"DepreciationCalculatorInput":{"type":"object","properties":{"cost":{"description":"Purchase cost","type":"number","minimum":0.01,"maximum":10000000000,"default":25000},"salvage":{"description":"Salvage value — What it will be worth at the end of its useful life.","type":"number","minimum":0,"maximum":10000000000,"default":2500},"life":{"description":"Useful life — Measured in years.","type":"number","minimum":1,"maximum":60,"default":5},"method":{"type":"string","enum":["all","straight","declining","double","syd"],"description":"Method — Options: all (Compare all four), straight (Straight line), declining (Declining balance (150%)), double (Double declining balance), syd (Sum of the years' digits)","default":"all"},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Depreciation Calculator input","description":"Straight-line, declining balance, double-declining and sum-of-years depreciation schedules.","additionalProperties":false},"DiceProbabilityCalculatorInput":{"type":"object","properties":{"notation":{"type":"string","description":"Dice notation — Standard notation: 2d20, 4d6+3, 1d8-1.","examples":["3d6+2"]},"rolls":{"description":"Simulated rolls","type":"number","minimum":1,"maximum":100000,"default":100},"seed":{"type":"string","description":"Seed"}},"title":"Dice Probability Calculator input","description":"Roll dice notation like 3d6+2 and see the full probability distribution.","required":["notation","seed"],"additionalProperties":false},"DiceRollerInput":{"type":"object","properties":{"dice":{"description":"Number of dice","type":"number","minimum":1,"maximum":100,"default":2},"sides":{"type":"string","enum":["4","6","8","10","12","20","100"],"description":"Sides — Options: 4 (d4), 6 (d6), 8 (d8), 10 (d10), 12 (d12), 20 (d20), 100 (d100)","default":"6"},"modifier":{"description":"Modifier","type":"number","minimum":-100,"maximum":100,"default":0}},"title":"Dice Roller input","description":"Roll any number of dice with any number of sides, plus a modifier.","additionalProperties":false},"DiffCheckerInput":{"type":"object","properties":{"left":{"type":"string","description":"Original — Multi-line text.","examples":["The quick brown fox\njumps over the lazy dog.\nLine three stays."]},"right":{"type":"string","description":"Changed — Multi-line text.","examples":["The quick red fox\nleaps over the lazy dog.\nLine three stays."]},"mode":{"type":"string","enum":["lines","words","chars"],"description":"Compare by — Options: lines (Lines), words (Words), chars (Characters)","default":"lines"}},"title":"Text Diff Checker input","description":"Compare two texts and highlight exactly what was added and removed.","required":["left","right"],"additionalProperties":false},"DiffToPatchInput":{"type":"object","properties":{"before":{"type":"string","description":"Original — Multi-line text.","examples":["line one\nline two\nline three\nline four"]},"after":{"type":"string","description":"Changed — Multi-line text.","examples":["line one\nline two changed\nline three\nline four\nline five"]},"filename":{"type":"string","description":"File name"},"context":{"description":"Context lines","type":"number","minimum":0,"maximum":20,"default":3}},"title":"Unified Diff & Patch Generator input","description":"Produce a unified diff between two texts that git apply and patch can consume.","required":["before","after","filename"],"additionalProperties":false},"DiscountCalculatorInput":{"type":"object","properties":{"price":{"description":"Original price","type":"number","minimum":0,"default":89.99},"discount":{"description":"Discount — Measured in %.","type":"number","minimum":0,"maximum":100,"default":25},"extra":{"description":"Extra discount — Applied after the first, as most \"extra % off sale\" offers work. — Measured in %.","type":"number","minimum":0,"maximum":100,"default":0}},"title":"Discount Calculator input","description":"Work out sale prices, stacked discounts and how much you actually save.","additionalProperties":false},"DurationCalculatorInput":{"type":"object","properties":{"durations":{"type":"string","description":"Durations — One per line. Accepts 1h 30m, 1:30, 1:30:00 or 90m. — Multi-line text.","examples":["1h 30m\n45m\n2:15:00\n0:20"]},"operation":{"type":"string","enum":["sum","difference","average"],"description":"Calculate — Options: sum (Total), difference (First minus the rest), average (Average)","default":"sum"},"format":{"type":"string","enum":["all","hms","human","decimal"],"description":"Show as — Options: all (Every format), hms (HH:MM:SS), human (1h 30m 0s), decimal (Decimal hours)","default":"all"}},"title":"Time Duration Calculator input","description":"Add, subtract and average durations written as 1h 30m, 90:00 or 1:30:00.","required":["durations"],"additionalProperties":false},"EdgeCaseStringGeneratorInput":{"type":"object","properties":{"categories":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["empty","unicode","emoji","rtl","length","numeric","injection","escaping","newlines","names"]},"description":"Categories — Pick the failure modes you want to cover. Injection patterns are inert strings for testing your own escaping, not exploits. — Options: empty (Empty and whitespace), unicode (Unicode and diacritics), emoji (Emoji and ZWJ sequences), rtl (Right-to-left and bidi), length (Boundary lengths), numeric (Numeric edge cases), injection (Injection patterns), escaping (Escaping and quoting), newlines (Line endings), names (Real-world awkward names)","default":["empty","unicode","emoji","rtl","length","injection"]},"format":{"type":"string","enum":["lines","json","jsonl","csv"],"description":"Output — Options: lines (One per line), json (JSON array), jsonl (JSON per line — safe for invisible characters), csv (CSV with a label column)","default":"lines"},"includeLabels":{"type":"boolean","description":"Include a description for each","default":true},"longLength":{"description":"Long-string length — Measured in chars.","type":"number","minimum":10,"maximum":1000000,"default":5000}},"title":"Edge Case Test String Generator input","description":"Generate the strings that break input handling — Unicode, RTL, emoji, injection patterns and boundary lengths.","additionalProperties":false},"EmailHeaderAnalyzerInput":{"type":"object","properties":{"headers":{"type":"string","description":"Raw email headers — Gmail: More ▸ Show original. Outlook: File ▸ Properties ▸ Internet headers. Apple Mail: View ▸ Message ▸ All Headers. — Multi-line text.","examples":["Delivered-To: alice@example.org\nReceived: by 2002:a05:6402:1234:b0:4f1:9a2c:1 with SMTP id k20csp1234567mab;\n        Tue, 10 Mar 2026 02:14:33 -0700 (PDT)\nReceived: from mail-sor-f41.example.net (mail-sor-f41.example.net. [209.85.220.41])\n        by mx.example.org with SMTPS id 9-20020a05640205ab00b004f19a2csor1234567edx\n        for <alice@example.org>\n        (Google Transport Security);\n        Tue, 10 Mar 2026 02:14:31 -0700 (PDT)\nReceived: from smtp.marketing.example.com (smtp.marketing.example.com [198.51.100.24])\n        by mail-sor-f41.example.net with ESMTPS id 7so9876543edb.2\n        for <alice@example.org>;\n        Tue, 10 Mar 2026 02:13:58 -0700 (PDT)\nReceived: from build01.internal.example.com (build01.internal.example.com [10.4.2.9])\n        by smtp.marketing.example.com with ESMTPA id 4ab21cde\n        for <alice@example.org>;\n        Tue, 10 Mar 2026 02:13:44 -0700 (PDT)\nAuthentication-Results: mx.example.org;\n       dkim=pass header.i=@marketing.example.com header.s=sel1 header.b=Ab12Cd34;\n       spf=pass (mx.example.org: domain of bounce@marketing.example.com designates 198.51.100.24 as permitted sender) smtp.mailfrom=bounce@marketing.example.com;\n       dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=marketing.example.com\nReceived-SPF: pass (mx.example.org: domain of bounce@marketing.example.com designates 198.51.100.24 as permitted sender) client-ip=198.51.100.24;\nDKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marketing.example.com;\n        s=sel1; t=1772536424; bh=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN/XKdLCPjaYaY=;\n        h=From:To:Subject:Date:Message-ID\nReturn-Path: <bounce@marketing.example.com>\nFrom: \"Example Marketing\" <news@marketing.example.com>\nTo: alice@example.org\nSubject: =?utf-8?B?WW91ciBNYXJjaCBzdGF0ZW1lbnQgaXMgcmVhZHk=?=\nDate: Tue, 10 Mar 2026 09:13:40 +0000\nMessage-ID: <20260310091340.4ab21cde@smtp.marketing.example.com>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=\"utf-8\""]},"showAll":{"type":"boolean","description":"List every header — Adds a collapsed table of all header fields in the order they appear.","default":false}},"title":"Email Header Analyzer input","description":"Paste raw email headers to map the delivery path, time every hop and read the SPF, DKIM and DMARC results the receiving server recorded.","required":["headers"],"additionalProperties":false},"EmergencyFundCalculatorInput":{"type":"object","properties":{"expenses":{"description":"Essential monthly expenses — Rent, food, utilities, transport, insurance and minimum debt payments only.","type":"number","minimum":1,"maximum":1000000,"default":2500},"months":{"description":"Months of cover — Between 1 and 24 months.","type":"number","minimum":1,"maximum":24,"default":6},"saved":{"description":"Already saved","type":"number","minimum":0,"maximum":100000000,"default":3000},"monthly":{"description":"Can save per month","type":"number","minimum":0,"maximum":1000000,"default":400},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Emergency Fund Calculator input","description":"Size an emergency fund from your real monthly outgoings and see how long it takes to build.","additionalProperties":false},"EmojiPickerInput":{"type":"object","properties":{"query":{"type":"string","description":"Search"}},"title":"Emoji Search & Picker input","description":"Search emoji by name and copy them, with their Unicode code points.","required":["query"],"additionalProperties":false},"EnergyConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["j","kj","cal","kcal","wh","kwh","btu","ftlb","ev"],"description":"From — Options: j (Joules (J)), kj (Kilojoules (kJ)), cal (Calories (small) (cal)), kcal (Kilocalories (food) (kcal)), wh (Watt-hours (Wh)), kwh (Kilowatt-hours (kWh)), btu (BTU (BTU)), ftlb (Foot-pounds (ft⋅lb)), ev (Electronvolts (eV))","default":"kcal"},"to":{"type":"string","enum":["j","kj","cal","kcal","wh","kwh","btu","ftlb","ev"],"description":"To — Options: j (Joules (J)), kj (Kilojoules (kJ)), cal (Calories (small) (cal)), kcal (Kilocalories (food) (kcal)), wh (Watt-hours (Wh)), kwh (Kilowatt-hours (kWh)), btu (BTU (BTU)), ftlb (Foot-pounds (ft⋅lb)), ev (Electronvolts (eV))","default":"kj"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Energy Converter input","description":"Convert energy between 9 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"EnvFileValidatorInput":{"type":"object","properties":{"env":{"type":"string","description":".env file — Multi-line text.","examples":["DATABASE_URL=postgres://user:pass@localhost:5432/db\nAPI_KEY=\"sk-live-abc123\"\nDEBUG = true\nPORT=3000\nport=8080\nEMPTY=\nNEXT_PUBLIC_SECRET_KEY=hunter2"]},"example":{"type":"string","description":".env.example (optional) — If provided, missing and undocumented keys are reported. — Multi-line text."}},"title":".env File Validator input","description":"Check a .env file for syntax errors, duplicate keys, exposed secrets and missing entries.","required":["env","example"],"additionalProperties":false},"EnvToJsonInput":{"type":"object","properties":{"input":{"type":"string","description":".env or JSON — Multi-line text.","examples":["# Database\nDATABASE_URL=postgres://localhost:5432/app\nAPI_KEY=\"secret value\"\nDEBUG=true\nPORT=3000"]},"direction":{"type":"string","enum":["env-to-json","json-to-env"],"description":"Direction — Options: env-to-json (.env → JSON), json-to-env (JSON → .env)","default":"env-to-json"},"quote":{"type":"boolean","description":"Quote values containing spaces","default":true}},"title":".env to JSON Converter input","description":"Convert .env files to JSON and back — for config migrations and CI variables.","required":["input"],"additionalProperties":false},"ExponentLogarithmCalculatorInput":{"type":"object","properties":{"mode":{"type":"string","enum":["power","root","log","ln","log10","exp"],"description":"Calculate — Options: power (Power — a to the power of b), root (Root — the bth root of a), log (Logarithm — log base b of a), ln (Natural log — ln(a)), log10 (Common log — log₁₀(a)), exp (Exponential — e to the power of a)","default":"power"},"a":{"description":"Value (a)","type":"number","default":2},"b":{"description":"Second value (b)","type":"number","default":10}},"title":"Exponent, Root & Logarithm Calculator input","description":"Calculate powers, nth roots, logarithms in any base, and exponentials.","additionalProperties":false},"FakeAddressGeneratorInput":{"type":"object","properties":{"count":{"description":"How many addresses","type":"number","minimum":1,"maximum":500,"default":5},"locale":{"type":"string","enum":["us","gb","de","fr","in","jp","mixed"],"description":"Country — Options: us (United States (en-US)), gb (United Kingdom (en-GB)), de (Germany (de-DE)), fr (France (fr-FR)), in (India (en-IN)), jp (Japan (ja-JP)), mixed (Mixed — international)","default":"us"},"format":{"type":"string","enum":["fields","json","csv","yaml","sql"],"description":"Format — Options: fields (Readable cards), json (JSON), csv (CSV), yaml (YAML), sql (SQL INSERT)","default":"fields"},"seed":{"type":"string","description":"Seed"},"includeName":{"type":"boolean","description":"Include recipient name and phone","default":true},"includeCoords":{"type":"boolean","description":"Include latitude and longitude","default":false},"oneLineFormat":{"type":"boolean","description":"Single-line format — Collapse each address onto one line, as a shipping label would.","default":false}},"title":"Fake Address Generator input","description":"Generate valid-format test addresses for six countries, with correct postcode and phone patterns.","required":["seed"],"additionalProperties":false},"FancyTextGeneratorInput":{"type":"object","properties":{"text":{"type":"string","description":"Text","examples":["Convertto"]},"style":{"type":"string","enum":["bold","italic","boldItalic","script","fraktur","double","mono","circled"],"description":"Style — Options: bold (𝐁𝐨𝐥𝐝), italic (𝐼𝑡𝑎𝑙𝑖𝑐), boldItalic (𝑩𝒐𝒍𝒅 𝑰𝒕𝒂𝒍𝒊𝒄), script (𝒮𝒸𝓇𝒾𝓅𝓉), fraktur (𝔉𝔯𝔞𝔨𝔱𝔲𝔯), double (𝔻𝕠𝕦𝕓𝕝𝕖), mono (𝙼𝚘𝚗𝚘), circled (Ⓒⓘⓡⓒⓛⓔⓓ)","default":"bold"}},"title":"Fancy Text Generator input","description":"Convert text into bold, italic, script, monospace and double-struck Unicode styles.","required":["text"],"additionalProperties":false},"FdCalculatorInput":{"type":"object","properties":{"principal":{"description":"Deposit amount","type":"number","minimum":100,"maximum":10000000000,"default":100000},"rate":{"description":"Interest rate — Measured in % p.a..","type":"number","minimum":0.1,"maximum":25,"default":7.1},"years":{"description":"Years","type":"number","minimum":0,"maximum":30,"default":5},"months":{"description":"Additional months","type":"number","minimum":0,"maximum":11,"default":0},"compounding":{"type":"string","enum":["4","12","2","1"],"description":"Compounding — Options: 4 (Quarterly — the bank default in India), 12 (Monthly), 2 (Half-yearly), 1 (Annually)","default":"4"},"taxRate":{"description":"Your income tax slab — FD interest is fully taxable. Set your slab to see the post-tax return. — Measured in %.","type":"number","minimum":0,"maximum":45,"default":0},"currency":{"type":"string","enum":["₹","$","€","£",""],"description":"Currency — Options: ₹ (Rupee ₹), $ (Dollar $), € (Euro €), £ (Pound £),  (No symbol)","default":"₹"}},"title":"FD Calculator input","description":"Work out what a fixed deposit matures to, with quarterly compounding and TDS accounted for.","additionalProperties":false},"FindAndReplaceInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["The quick brown fox jumps over the lazy dog.\nPack my box with five dozen liquor jugs.\nThe quick brown fox jumps over the lazy dog."]},"find":{"type":"string","description":"Find"},"replace":{"type":"string","description":"Replace with"},"regex":{"type":"boolean","description":"Regular expression — Use $1, $2 for capture groups.","default":false},"caseSensitive":{"type":"boolean","description":"Case sensitive","default":true}},"title":"Find and Replace Text input","description":"Replace text across a whole document with plain matching or full regular expressions.","required":["text","find","replace"],"additionalProperties":false},"FlexboxGeneratorInput":{"type":"object","properties":{"direction":{"type":"string","enum":["row","row-reverse","column","column-reverse"],"description":"Direction — Options: row (Row →), row-reverse (Row reverse ←), column (Column ↓), column-reverse (Column reverse ↑)","default":"row"},"wrap":{"type":"string","enum":["nowrap","wrap","wrap-reverse"],"description":"Wrap — Options: nowrap (No wrap), wrap (Wrap), wrap-reverse (Wrap reverse)","default":"nowrap"},"justify":{"type":"string","enum":["flex-start","center","flex-end","space-between","space-around","space-evenly"],"description":"Justify content (main axis) — Options: flex-start (Start), center (Center), flex-end (End), space-between (Space between), space-around (Space around), space-evenly (Space evenly)","default":"flex-start"},"align":{"type":"string","enum":["stretch","flex-start","center","flex-end","baseline"],"description":"Align items (cross axis) — Options: stretch (Stretch), flex-start (Start), center (Center), flex-end (End), baseline (Baseline)","default":"stretch"},"gap":{"description":"Gap — Measured in px.","type":"number","minimum":0,"maximum":60,"default":12},"items":{"description":"Preview items","type":"number","minimum":1,"maximum":12,"default":5}},"title":"CSS Flexbox Generator input","description":"Experiment with flex direction, alignment and wrapping, then copy the CSS.","additionalProperties":false},"ForceConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["n","kn","dyn","kgf","lbf","ozf"],"description":"From — Options: n (Newtons (N)), kn (Kilonewtons (kN)), dyn (Dynes (dyn)), kgf (Kilogram-force (kgf)), lbf (Pound-force (lbf)), ozf (Ounce-force (ozf))","default":"n"},"to":{"type":"string","enum":["n","kn","dyn","kgf","lbf","ozf"],"description":"To — Options: n (Newtons (N)), kn (Kilonewtons (kN)), dyn (Dynes (dyn)), kgf (Kilogram-force (kgf)), lbf (Pound-force (lbf)), ozf (Ounce-force (ozf))","default":"lbf"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Force Converter input","description":"Convert force between 6 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"FractionCalculatorInput":{"type":"object","properties":{"a":{"type":"string","description":"First fraction","examples":["3/4"]},"op":{"type":"string","enum":["+","-","*","/"],"description":"Operation — Options: + (Add +), - (Subtract −), * (Multiply ×), / (Divide ÷)","default":"+"},"b":{"type":"string","description":"Second fraction","examples":["2/5"]}},"title":"Fraction Calculator input","description":"Add, subtract, multiply and divide fractions, with the result simplified.","required":["a","b"],"additionalProperties":false},"FractionToDecimalInput":{"type":"object","properties":{"value":{"type":"string","description":"Value","examples":["3/8"]},"direction":{"type":"string","enum":["auto","to-decimal","to-fraction"],"description":"Convert — Options: auto (Detect automatically), to-decimal (Fraction → Decimal), to-fraction (Decimal → Fraction)","default":"auto"},"maxDenominator":{"description":"Max denominator","type":"number","minimum":2,"maximum":1000000,"default":10000}},"title":"Fraction to Decimal Converter input","description":"Convert fractions to decimals and decimals back to simplified fractions.","required":["value"],"additionalProperties":false},"FreelanceRateCalculatorInput":{"type":"object","properties":{"target":{"description":"Target take-home income — Measured in per year.","type":"number","minimum":0,"maximum":10000000,"default":60000},"weeks":{"description":"Weeks worked per year — 52 minus holiday, sickness and public holidays.","type":"number","minimum":1,"maximum":52,"default":46},"days":{"description":"Days per week","type":"number","minimum":1,"maximum":7,"default":5},"hours":{"description":"Hours per day","type":"number","minimum":1,"maximum":24,"default":8},"billable":{"description":"Billable share — Admin, sales, invoicing and learning are not billable. 60–70% is realistic. — Between 10 and 100 %.","type":"number","minimum":10,"maximum":100,"default":65},"expenses":{"description":"Business costs — Measured in per year.","type":"number","minimum":0,"maximum":10000000,"default":6000},"tax":{"description":"Tax and contributions — Between 0 and 70 %.","type":"number","minimum":0,"maximum":70,"default":30},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Freelance Rate Calculator input","description":"Work out the hourly and day rate you need to hit a target income after time off, costs and tax.","additionalProperties":false},"FrequencyConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["hz","khz","mhz","ghz","thz","rpm"],"description":"From — Options: hz (Hertz (Hz)), khz (Kilohertz (kHz)), mhz (Megahertz (MHz)), ghz (Gigahertz (GHz)), thz (Terahertz (THz)), rpm (Revolutions per Minute (rpm))","default":"mhz"},"to":{"type":"string","enum":["hz","khz","mhz","ghz","thz","rpm"],"description":"To — Options: hz (Hertz (Hz)), khz (Kilohertz (kHz)), mhz (Megahertz (MHz)), ghz (Gigahertz (GHz)), thz (Terahertz (THz)), rpm (Revolutions per Minute (rpm))","default":"ghz"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Frequency Converter input","description":"Convert frequency between 6 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"FuelEconomyConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["l100km","mpgus","mpguk","kmpl","mpl"],"description":"From — Options: l100km (Litres per 100 km (L/100km)), mpgus (Miles per Gallon (US) (mpg)), mpguk (Miles per Gallon (UK) (mpg)), kmpl (Kilometres per Litre (km/L)), mpl (Miles per Litre (mi/L))","default":"mpgus"},"to":{"type":"string","enum":["l100km","mpgus","mpguk","kmpl","mpl"],"description":"To — Options: l100km (Litres per 100 km (L/100km)), mpgus (Miles per Gallon (US) (mpg)), mpguk (Miles per Gallon (UK) (mpg)), kmpl (Kilometres per Litre (km/L)), mpl (Miles per Litre (mi/L))","default":"l100km"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":4}},"title":"Fuel Economy Converter input","description":"Convert fuel economy between 5 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"GcdLcmCalculatorInput":{"type":"object","properties":{"numbers":{"type":"string","description":"Numbers","examples":["12, 18, 24"]}},"title":"GCD & LCM Calculator input","description":"Find the greatest common divisor and lowest common multiple of any set of numbers.","required":["numbers"],"additionalProperties":false},"GgufSizeCalculatorInput":{"type":"object","properties":{"params":{"description":"Parameters — Measured in billion.","type":"number","minimum":0.1,"maximum":2000,"default":8},"quant":{"type":"string","enum":["f16","q8_0","q6_k","q5_k_m","q4_k_m","q4_0","q3_k_m","q2_k"],"description":"Quantisation — Options: f16 (F16 / BF16 — full precision), q8_0 (Q8_0 — 8-bit), q6_k (Q6_K — 6-bit), q5_k_m (Q5_K_M — 5-bit medium), q4_k_m (Q4_K_M — 4-bit medium), q4_0 (Q4_0 — 4-bit legacy), q3_k_m (Q3_K_M — 3-bit medium), q2_k (Q2_K — 2-bit)","default":"q4_k_m"},"compare":{"type":"boolean","description":"Show every level","default":true}},"title":"GGUF Quantisation Size Calculator input","description":"Work out the download size of a quantised model at every GGUF level, and what quality each one costs you.","additionalProperties":false},"GitCommandBuilderInput":{"type":"object","properties":{"task":{"type":"string","enum":["undo-commit","discard-all","unstage","amend","revert","rename-branch","delete-branch","new-branch","sync-fork","squash","cherry-pick","stash","find-commit","remove-file-history","large-files"],"description":"I want to — Options: undo-commit (Undo the last commit but keep the changes), discard-all (Discard all local changes), unstage (Unstage a file), amend (Change the last commit message), revert (Revert a commit that is already pushed), rename-branch (Rename a branch), delete-branch (Delete a branch locally and remotely), new-branch (Create a branch from the current one), sync-fork (Sync a fork with upstream), squash (Squash the last N commits), cherry-pick (Copy a commit onto this branch), stash (Save work in progress temporarily), find-commit (Find which commit introduced a bug), remove-file-history (Remove a file from all history), large-files (Find the largest files in the repository)","default":"undo-commit"},"branch":{"type":"string","description":"Branch name"},"remote":{"type":"string","description":"Remote"},"count":{"description":"Number of commits","type":"number","minimum":1,"maximum":100,"default":3},"target":{"type":"string","description":"Message or file path"}},"title":"Git Command Builder input","description":"Build the exact git command for fifteen common tasks, with explanations and safety notes.","required":["branch","remote","target"],"additionalProperties":false},"GitignoreGeneratorInput":{"type":"object","properties":{"languages":{"type":"string","enum":["node","python","java","go","rust","php","dotnet"],"description":"Project type — Options: node (Node.js / JavaScript), python (Python), java (Java / Gradle), go (Go), rust (Rust), php (PHP / Laravel), dotnet (.NET)","default":"node"},"extras":{"type":"string","enum":["all","os","none"],"description":"Also ignore — Options: all (OS files, editors and secrets), os (OS files only), none (Language files only)","default":"all"}},"title":".gitignore Generator input","description":"Build a .gitignore file for your stack, with the entries people usually forget.","additionalProperties":false},"GlassmorphismGeneratorInput":{"type":"object","properties":{"blur":{"description":"Backdrop blur — Between 0 and 40 px.","type":"number","minimum":0,"maximum":40,"default":12},"opacity":{"description":"Background opacity — Between 0 and 100 %.","type":"number","minimum":0,"maximum":100,"default":18},"saturation":{"description":"Saturation boost — Between 100 and 300 %.","type":"number","minimum":100,"maximum":300,"default":150},"borderOpacity":{"description":"Border opacity — Between 0 and 100 %.","type":"number","minimum":0,"maximum":100,"default":30},"radius":{"description":"Corner radius — Between 0 and 48 px.","type":"number","minimum":0,"maximum":48,"default":16},"color":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Tint colour — A CSS hex colour, e.g. #3366ff.","default":"#ffffff"}},"title":"Glassmorphism CSS Generator input","description":"Create frosted-glass CSS with backdrop blur, transparency and a subtle border.","additionalProperties":false},"GlitchTextGeneratorInput":{"type":"object","properties":{"text":{"type":"string","description":"Text","examples":["glitch"]},"intensity":{"description":"Intensity — How many combining marks stack on each character.","type":"number","minimum":1,"maximum":30,"default":5}},"title":"Glitch Text Generator input","description":"Create corrupted Zalgo-style glitch text using stacked Unicode combining marks.","required":["text"],"additionalProperties":false},"GradientGeneratorInput":{"type":"object","properties":{"type":{"type":"string","enum":["linear","radial","conic"],"description":"Gradient type — Options: linear (Linear), radial (Radial), conic (Conic)","default":"linear"},"direction":{"type":"string","enum":["90deg","180deg","135deg","45deg","270deg","0deg"],"description":"Direction — Options: 90deg (To right), 180deg (To bottom), 135deg (Diagonal ↘), 45deg (Diagonal ↗), 270deg (To left), 0deg (To top)","default":"135deg"},"from":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Start colour — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"},"to":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"End colour — A CSS hex colour, e.g. #3366ff.","default":"#ec4899"},"stops":{"description":"Intermediate stops — Adds evenly spaced blended stops for a smoother ramp.","type":"number","minimum":0,"maximum":5,"default":0}},"title":"CSS Gradient Generator input","description":"Build linear, radial and conic CSS gradients and copy the code.","additionalProperties":false},"GradientTextGeneratorInput":{"type":"object","properties":{"style":{"type":"string","enum":["gradient","tri","gold","silver"],"description":"Effect — Options: gradient (Two-colour gradient), tri (Three-colour gradient), gold (Gold), silver (Silver / chrome)","default":"gradient"},"from":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"From — A CSS hex colour, e.g. #3366ff. — Only applies for some combinations of the other fields.","default":"#6366f1"},"via":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Via — A CSS hex colour, e.g. #3366ff. — Only applies for some combinations of the other fields.","default":"#a855f7"},"to":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"To — A CSS hex colour, e.g. #3366ff. — Only applies for some combinations of the other fields.","default":"#ec4899"},"angle":{"description":"Angle — Between 0 and 360 deg.","type":"number","minimum":0,"maximum":360,"default":90},"size":{"description":"Font size — Between 12 and 140 px.","type":"number","minimum":12,"maximum":140,"default":48},"weight":{"type":"string","enum":["400","600","800","900"],"description":"Weight — Options: 400 (Regular), 600 (Semibold), 800 (Extra bold), 900 (Black)","default":"800"}},"title":"Gradient Text Generator input","description":"Fill text with a gradient, a metallic sheen or a chrome effect using background-clip.","additionalProperties":false},"GraphqlFormatterInput":{"type":"object","properties":{"query":{"type":"string","description":"GraphQL — Multi-line text.","examples":["query GetUser($id:ID!){user(id:$id){id name email posts(first:10){edges{node{id title}}}}}"]},"mode":{"type":"string","enum":["format","minify"],"description":"Mode — Options: format (Format — indent and space), minify (Minify — strip optional whitespace)","default":"format"},"indent":{"description":"Indent — Measured in spaces.","type":"number","minimum":1,"maximum":8,"default":2}},"title":"GraphQL Formatter input","description":"Format or minify a GraphQL query, mutation or schema, and inspect its depth.","required":["query"],"additionalProperties":false},"GstCalculatorInput":{"type":"object","properties":{"amount":{"description":"Amount","type":"number","minimum":0,"maximum":1000000000000,"default":1000},"rate":{"type":"string","enum":["0","0.25","3","5","12","18","28"],"description":"GST rate — Options: 0 (0% — exempt), 0.25 (0.25% — rough diamonds), 3 (3% — gold and jewellery), 5 (5% — essentials, transport, small restaurants), 12 (12% — processed food, business class), 18 (18% — the standard rate for most services), 28 (28% — luxury and demerit goods)","default":"18"},"mode":{"type":"string","enum":["add","remove"],"description":"Calculate — Options: add (Add GST — the amount above excludes GST), remove (Remove GST — the amount above includes GST)","default":"add"},"split":{"type":"boolean","description":"Show the CGST / SGST split","default":true},"currency":{"type":"string","enum":["₹","$","€","£",""],"description":"Currency — Options: ₹ (Rupee ₹), $ (Dollar $), € (Euro €), £ (Pound £),  (No symbol)","default":"₹"}},"title":"GST Calculator input","description":"Add GST to a price or work backwards from a GST-inclusive total, with the CGST/SGST split.","additionalProperties":false},"HashtagGeneratorInput":{"type":"object","properties":{"topic":{"type":"string","description":"Keywords or phrases (one per line) — Multi-line text.","examples":["image converter\nfree online tools\nprivacy first\nweb development"]},"style":{"type":"string","enum":["camel","lower","upper"],"description":"Style — Options: camel (#CamelCase (screen-reader friendly)), lower (#lowercase), upper (#UPPERCASE)","default":"camel"},"count":{"description":"Max hashtags","type":"number","minimum":1,"maximum":100,"default":30}},"title":"Hashtag Generator input","description":"Turn keywords and phrases into properly formatted hashtags.","required":["topic"],"additionalProperties":false},"HeadingStructureValidatorInput":{"type":"object","properties":{"html":{"type":"string","description":"HTML — Multi-line text.","examples":["<h1>Our products</h1>\n<p>Welcome to the catalogue.</p>\n<h3>Laptops</h3>\n<img src=\"laptop.png\">\n<img src=\"banner.jpg\" alt=\"banner.jpg\">\n<a href=\"/specs\">click here</a>\n<h2>Phones</h2>\n<img src=\"phone.png\" alt=\"A slate-grey phone standing upright on a desk\">\n<a href=\"/phones\">Browse all phones</a>"],"contentMediaType":"text/html"},"requireH1":{"type":"boolean","description":"Require exactly one H1","default":true}},"title":"Heading Structure Validator input","description":"Check a page for skipped heading levels, missing or multiple H1s and empty headings.","required":["html"],"additionalProperties":false},"HeartRateZoneCalculatorInput":{"type":"object","properties":{"age":{"description":"Age — Measured in years.","type":"number","minimum":10,"maximum":110,"default":30},"restingHr":{"description":"Resting heart rate — Measured first thing in the morning. — Measured in bpm.","type":"number","minimum":30,"maximum":120,"default":60},"maxHrMethod":{"type":"string","enum":["tanaka","classic"],"description":"Max HR formula — Options: tanaka (Tanaka — 208 − 0.7 × age), classic (Classic — 220 − age)","default":"tanaka"}},"title":"Heart Rate Zone Calculator input","description":"Calculate your training zones from maximum and resting heart rate.","additionalProperties":false},"HexToDecimalInput":{"type":"object","properties":{"value":{"type":"string","description":"Value"}},"title":"Hex to Decimal Converter input","description":"Convert hexadecimal values to decimal, binary and octal.","required":["value"],"additionalProperties":false},"HexToTextInput":{"type":"object","properties":{"text":{"type":"string","description":"Text or hex — Multi-line text.","examples":["Convertto"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Text → Hex), decode (Hex → Text)","default":"encode"},"separator":{"type":"string","enum":["space","none","colon","prefix"],"description":"Separator — Options: space (Space), none (None), colon (Colon), prefix (0x prefixed)","default":"space"}},"title":"Hex to Text Converter input","description":"Convert text to hexadecimal bytes and decode hex strings back into readable text.","required":["text"],"additionalProperties":false},"HmacGeneratorInput":{"type":"object","properties":{"message":{"type":"string","description":"Message — Multi-line text.","examples":["payload-to-sign"]},"key":{"type":"string","description":"Secret key"},"algo":{"type":"string","enum":["SHA-256","SHA-1","SHA-384","SHA-512"],"description":"Algorithm — Options: SHA-256 (HMAC-SHA256), SHA-1 (HMAC-SHA1), SHA-384 (HMAC-SHA384), SHA-512 (HMAC-SHA512)","default":"SHA-256"},"encoding":{"type":"string","enum":["hex","base64"],"description":"Output — Options: hex (Hexadecimal), base64 (Base64)","default":"hex"}},"title":"HMAC Generator input","description":"Generate an HMAC signature with SHA-256, SHA-1, SHA-384 or SHA-512 and a secret key.","required":["message","key"],"additionalProperties":false},"HtmlEntityEncodeDecodeInput":{"type":"object","properties":{"text":{"type":"string","description":"Text or HTML — Multi-line text.","examples":["<script>alert(\"hi & bye\")</script>"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Text → Entities), decode (Entities → Text)","default":"encode"},"allChars":{"type":"boolean","description":"Encode all non-ASCII","default":false}},"title":"HTML Entity Encoder & Decoder input","description":"Convert characters to HTML entities and back — escape markup safely for display.","required":["text"],"additionalProperties":false},"HtmlFormatterInput":{"type":"object","properties":{"code":{"type":"string","description":"HTML — Multi-line text.","examples":["<div class=\"card\"><h2>Title</h2><p>Some <strong>bold</strong> text and a <a href=\"#\">link</a>.</p><ul><li>One</li><li>Two</li></ul></div>"],"contentMediaType":"text/html"},"printWidth":{"description":"Line width — Measured in chars.","type":"number","minimum":40,"maximum":200,"default":80},"tabWidth":{"description":"Indent size — Measured in spaces.","type":"number","minimum":1,"maximum":8,"default":2},"useTabs":{"type":"boolean","description":"Indent with tabs","default":false}},"title":"HTML Formatter input","description":"Format and indent HTML properly, preserving inline elements and whitespace sensitivity.","required":["code"],"additionalProperties":false},"HtmlLandmarkCheckerInput":{"type":"object","properties":{"html":{"type":"string","description":"HTML — Multi-line text.","examples":["<header><nav>…</nav></header>\n<main>\n  <h1>Title</h1>\n</main>\n<footer>…</footer>"],"contentMediaType":"text/html"}},"title":"HTML Landmark Checker input","description":"Check a page for the landmark regions screen reader users navigate by.","required":["html"],"additionalProperties":false},"HttpHeaderAnalyserInput":{"type":"object","properties":{"headers":{"type":"string","description":"Response headers — Paste from the browser Network tab or from curl -I. — Multi-line text.","examples":["content-type: text/html; charset=utf-8\nstrict-transport-security: max-age=31536000\nx-frame-options: DENY\ncache-control: no-store\nserver: nginx/1.24.0"]}},"title":"HTTP Security Header Analyser input","description":"Paste response headers and get a security grade, with what is missing and why it matters.","required":["headers"],"additionalProperties":false},"HttpStatusCodesInput":{"type":"object","properties":{"query":{"type":"string","description":"Filter"}},"title":"HTTP Status Code Reference input","description":"Look up what any HTTP status code means and when to use it.","required":["query"],"additionalProperties":false},"IlluminanceConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["lx","klx","fc","phot","nox"],"description":"From — Options: lx (Lux (lx)), klx (Kilolux (klx)), fc (Foot-candles (fc)), phot (Phot (ph)), nox (Nox (nx))","default":"lx"},"to":{"type":"string","enum":["lx","klx","fc","phot","nox"],"description":"To — Options: lx (Lux (lx)), klx (Kilolux (klx)), fc (Foot-candles (fc)), phot (Phot (ph)), nox (Nox (nx))","default":"fc"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Illuminance Converter input","description":"Convert illuminance between 5 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"InflationCalculatorInput":{"type":"object","properties":{"amount":{"description":"Amount","type":"number","minimum":0,"default":1000},"rate":{"description":"Average annual inflation — Measured in %.","type":"number","minimum":-20,"maximum":100,"default":3},"startYear":{"description":"From year","type":"number","minimum":1800,"maximum":2200,"default":2010},"endYear":{"description":"To year","type":"number","minimum":1800,"maximum":2200,"default":2026}},"title":"Inflation Calculator input","description":"See what an amount of money is worth after inflation over any period.","additionalProperties":false},"IniParserInput":{"type":"object","properties":{"ini":{"type":"string","description":"INI or config file — Multi-line text.","examples":["; Application configuration\n[server]\nhost = 0.0.0.0\nport = 8080\ntls = true\n\n[database]\nurl = \"postgres://localhost/app\"\npool_size = 20\ntimeout = 30.5\n\n[logging]\nlevel = info\nformat = json\n"]},"target":{"type":"string","enum":["json","yaml","toml","env"],"description":"Convert to — Options: json (JSON), yaml (YAML), toml (TOML), env (.env format)","default":"json"},"lowercaseKeys":{"type":"boolean","description":"Lowercase all keys","default":false}},"title":"INI & Config File Parser input","description":"Parse INI, .conf, .cfg and .properties files into structured JSON, YAML or TOML.","required":["ini"],"additionalProperties":false},"JavascriptFormatterInput":{"type":"object","properties":{"code":{"type":"string","description":"Code — Multi-line text.","examples":["const users=[{id:1,name:\"Ada\",roles:[\"admin\",\"dev\"]},{id:2,name:\"Grace\"}];\nfunction findUser(id){return users.find(u=>u.id===id)??null}\nexport default async function main(){const u=await findUser(1);if(u){console.log(`Found ${u.name}`)}}"],"contentMediaType":"text/plain"},"parser":{"type":"string","enum":["babel","babel-ts"],"description":"Language — Options: babel (JavaScript / JSX), babel-ts (TypeScript / TSX)","default":"babel-ts"},"semi":{"type":"boolean","description":"Semicolons","default":true},"singleQuote":{"type":"boolean","description":"Single quotes","default":true},"printWidth":{"description":"Line width — Measured in chars.","type":"number","minimum":40,"maximum":200,"default":80},"tabWidth":{"description":"Indent size — Measured in spaces.","type":"number","minimum":1,"maximum":8,"default":2},"useTabs":{"type":"boolean","description":"Indent with tabs","default":false}},"title":"JavaScript & TypeScript Formatter input","description":"Format JavaScript, TypeScript, JSX and TSX properly with Prettier.","required":["code"],"additionalProperties":false},"JsonDiffInput":{"type":"object","properties":{"a":{"type":"string","description":"First JSON — Multi-line text.","examples":["{\n  \"name\": \"Ada\",\n  \"age\": 36,\n  \"tags\": [\"a\", \"b\"],\n  \"address\": { \"city\": \"London\" }\n}"],"contentMediaType":"application/json"},"b":{"type":"string","description":"Second JSON — Multi-line text.","examples":["{\n  \"name\": \"Ada Lovelace\",\n  \"age\": 36,\n  \"tags\": [\"a\", \"c\"],\n  \"address\": { \"city\": \"London\", \"postcode\": \"SW1\" }\n}"],"contentMediaType":"application/json"},"ignoreOrder":{"type":"boolean","description":"Ignore array order — Compares arrays as sets rather than by position.","default":false}},"title":"JSON Diff input","description":"Compare two JSON documents and see exactly which keys were added, removed or changed.","required":["a","b"],"additionalProperties":false},"JsonFlattenerInput":{"type":"object","properties":{"input":{"type":"string","description":"JSON — Multi-line text.","examples":["{\n  \"user\": { \"name\": \"Ada\", \"address\": { \"city\": \"London\" } },\n  \"active\": true\n}"],"contentMediaType":"application/json"},"separator":{"type":"string","enum":[".","_","/","[]"],"description":"Key separator — Options: . (Dot (a.b.c)), _ (Underscore (a_b_c)), / (Slash (a/b/c)), [] (Bracket (a[b][c]))","default":"."},"unwrapArrays":{"type":"boolean","description":"Index into arrays","default":true}},"title":"JSON Flattener input","description":"Flatten deeply nested JSON into dot-notation keys, or expand flat keys back into nested objects.","required":["input"],"additionalProperties":false},"JsonFormatterInput":{"type":"object","properties":{"input":{"type":"string","description":"JSON — Multi-line text.","examples":["{\"name\":\"Convertto\",\"tools\":300,\"tags\":[\"free\",\"private\"],\"nested\":{\"a\":1,\"b\":[true,null]}}"],"contentMediaType":"application/json"},"indent":{"type":"string","enum":["1","2","3","4","tab","0"],"description":"Indent — Options: 1 (1 space), 2 (2 spaces), 3 (3 spaces), 4 (4 spaces), tab (Tabs), 0 (Minified)","default":"2"},"sortKeys":{"type":"boolean","description":"Sort keys alphabetically","default":false},"repair":{"type":"boolean","description":"Try to repair — Fixes trailing commas, comments, single quotes, unquoted keys and NDJSON.","default":true}},"title":"JSON Formatter & Validator input","description":"Format, validate, repair and analyse JSON — with errors that point at the exact line.","required":["input"],"additionalProperties":false},"JsonMergeInput":{"type":"object","properties":{"documents":{"type":"string","description":"JSON documents — Separate each document with a line containing only three hyphens. — Multi-line text.","examples":["{ \"name\": \"app\", \"port\": 3000, \"tags\": [\"a\"], \"db\": { \"host\": \"localhost\" } }\n---\n{ \"port\": 8080, \"tags\": [\"b\"], \"db\": { \"port\": 5432 } }"],"contentMediaType":"application/json"},"strategy":{"type":"string","enum":["replace","concat","union"],"description":"Arrays — Options: replace (Replace — the later document wins), concat (Concatenate — join them together), union (Union — join and remove duplicates)","default":"replace"},"pretty":{"type":"boolean","description":"Pretty-print","default":true}},"title":"JSON Merge input","description":"Deep-merge several JSON documents, choosing how arrays and conflicts are resolved.","required":["documents"],"additionalProperties":false},"JsonSchemaGeneratorInput":{"type":"object","properties":{"json":{"type":"string","description":"Example JSON — Multi-line text.","examples":["{\n  \"id\": 42,\n  \"name\": \"Ada Lovelace\",\n  \"email\": \"ada@example.com\",\n  \"active\": true,\n  \"score\": 99.5,\n  \"tags\": [\"engineer\", \"pioneer\"],\n  \"address\": { \"city\": \"London\", \"postcode\": \"SW1A 1AA\" },\n  \"lastSeen\": \"2026-03-15T09:30:00Z\"\n}"],"contentMediaType":"application/json"},"required":{"type":"string","enum":["all","nonnull","none"],"description":"Required fields — Options: all (All present keys are required), nonnull (Only keys that are not null), none (Nothing required)","default":"all"},"draft":{"type":"string","enum":["2020-12","07"],"description":"Draft — Options: 2020-12 (Draft 2020-12), 07 (Draft-07)","default":"2020-12"},"title":{"type":"string","description":"Schema title"},"withExamples":{"type":"boolean","description":"Include examples from the data","default":true}},"title":"JSON Schema Generator input","description":"Infer a JSON Schema from example data, detecting types, string formats and required keys.","required":["json","title"],"additionalProperties":false},"JsonSorterInput":{"type":"object","properties":{"json":{"type":"string","description":"JSON — Multi-line text.","examples":["{\n  \"zebra\": 1,\n  \"apple\": 2,\n  \"items\": [3, 1, 2],\n  \"nested\": { \"z\": 1, \"a\": 2 }\n}"],"contentMediaType":"application/json"},"sortKeys":{"type":"string","enum":["asc","desc","none"],"description":"Sort object keys — Options: asc (A to Z), desc (Z to A), none (Leave key order alone)","default":"asc"},"sortArrays":{"type":"boolean","description":"Sort array values too — Only safe when array order is not meaningful.","default":false},"arrayKey":{"type":"string","description":"Sort arrays of objects by — Only applies for some combinations of the other fields."},"pretty":{"type":"boolean","description":"Pretty-print","default":true}},"title":"JSON Key Sorter input","description":"Sort object keys and arrays in a JSON document to make two versions comparable.","required":["json"],"additionalProperties":false},"JsonToTypescriptInput":{"type":"object","properties":{"input":{"type":"string","description":"JSON — Multi-line text.","examples":["{\n  \"id\": 42,\n  \"name\": \"Ada\",\n  \"active\": true,\n  \"score\": 9.5,\n  \"tags\": [\"admin\", \"beta\"],\n  \"profile\": { \"city\": \"London\", \"verified\": true }\n}"],"contentMediaType":"application/json"},"rootName":{"type":"string","description":"Root type name"},"language":{"type":"string","enum":["typescript","zod","go","python","rust","kotlin"],"description":"Generate — Options: typescript (TypeScript interface), zod (Zod schema), go (Go struct), python (Python dataclass), rust (Rust struct (serde)), kotlin (Kotlin data class)","default":"typescript"}},"title":"JSON to TypeScript Converter input","description":"Generate TypeScript interfaces, Zod schemas, Go structs, Python dataclasses or Rust structs from JSON.","required":["input","rootName"],"additionalProperties":false},"JsonValidatorInput":{"type":"object","properties":{"json":{"type":"string","description":"JSON — Multi-line text.","examples":["{\n  \"name\": \"Ada Lovelace\",\n  \"born\": 1815,\n  \"fields\": [\"mathematics\", \"computing\"],\n  \"notes\": null\n}"],"contentMediaType":"application/json"},"mode":{"type":"string","enum":["strict","relaxed"],"description":"Strictness — Options: strict (Strict JSON — the specification exactly), relaxed (Also report JSON5 habits — trailing commas, comments, single quotes)","default":"strict"},"detail":{"type":"boolean","description":"Show a structure summary","default":true},"sortKeys":{"type":"boolean","description":"Report duplicate keys","default":true}},"title":"JSON Validator input","description":"Check whether JSON is valid, with the precise position of the error and what usually causes it.","required":["json"],"additionalProperties":false},"JsonpathTesterInput":{"type":"object","properties":{"input":{"type":"string","description":"JSON — Multi-line text.","examples":["{\n  \"store\": {\n    \"book\": [\n      { \"title\": \"Dune\", \"price\": 9.99 },\n      { \"title\": \"Neuromancer\", \"price\": 12.5 }\n    ]\n  }\n}"],"contentMediaType":"application/json"},"query":{"type":"string","description":"JSONPath expression"}},"title":"JSONPath Tester input","description":"Run JSONPath expressions against a document and see the matches instantly.","required":["input","query"],"additionalProperties":false},"JwtDecoderInput":{"type":"object","properties":{"token":{"type":"string","description":"JWT — Multi-line text."}},"title":"JWT Decoder input","description":"Decode a JSON Web Token to inspect its header, payload and expiry — locally, never sent anywhere.","required":["token"],"additionalProperties":false},"JwtVerifierInput":{"type":"object","properties":{"token":{"type":"string","description":"JWT — Multi-line text."},"secret":{"type":"string","format":"password","writeOnly":true,"description":"Shared secret"},"checkExpiry":{"type":"boolean","description":"Check the time-based claims","default":true}},"title":"JWT Verifier input","description":"Verify a JWT's HS256 signature and its expiry, issuer and audience claims, entirely in your browser.","required":["token","secret"],"additionalProperties":false},"KeywordDensityCheckerInput":{"type":"object","properties":{"text":{"type":"string","description":"Content — Multi-line text."},"minLength":{"description":"Minimum word length","type":"number","minimum":1,"maximum":15,"default":4},"topN":{"description":"Show top — Measured in results.","type":"number","minimum":5,"maximum":100,"default":25}},"title":"Keyword Density Checker input","description":"Analyse which words and phrases dominate your content, and how often they appear.","required":["text"],"additionalProperties":false},"LeapYearCheckerInput":{"type":"object","properties":{"year":{"description":"Year","type":"number","minimum":-4713,"maximum":9999,"default":2026},"range":{"description":"Show surrounding years — Measured in years.","type":"number","minimum":0,"maximum":100,"default":10}},"title":"Leap Year Checker input","description":"Check whether a year is a leap year and see the next and previous ones, with the rule explained.","additionalProperties":false},"LeetspeakConverterInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["elite hacker text"]},"intensity":{"type":"string","enum":["light","heavy"],"description":"Intensity — Options: light (Light (vowels only)), heavy (Heavy (all mapped letters))","default":"light"}},"title":"Leetspeak Converter input","description":"Convert normal text into 1337 5p34k, with light or heavy substitution.","required":["text"],"additionalProperties":false},"LengthConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["nm","um","mm","cm","m","km","in","ft","yd","mi","nmi","fur","au","ly"],"description":"From — Options: nm (Nanometres (nm)), um (Micrometres (µm)), mm (Millimetres (mm)), cm (Centimetres (cm)), m (Metres (m)), km (Kilometres (km)), in (Inches (in)), ft (Feet (ft)), yd (Yards (yd)), mi (Miles (mi)), nmi (Nautical Miles (nmi)), fur (Furlongs (fur)), au (Astronomical Units (AU)), ly (Light Years (ly))","default":"cm"},"to":{"type":"string","enum":["nm","um","mm","cm","m","km","in","ft","yd","mi","nmi","fur","au","ly"],"description":"To — Options: nm (Nanometres (nm)), um (Micrometres (µm)), mm (Millimetres (mm)), cm (Centimetres (cm)), m (Metres (m)), km (Kilometres (km)), in (Inches (in)), ft (Feet (ft)), yd (Yards (yd)), mi (Miles (mi)), nmi (Nautical Miles (nmi)), fur (Furlongs (fur)), au (Astronomical Units (AU)), ly (Light Years (ly))","default":"in"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Length Converter input","description":"Convert length between 14 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"LetterFrequencyAnalyserInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["ETAOIN SHRDLU is the approximate order of letter frequency in English."]},"include":{"type":"string","enum":["letters","alphanumeric","all"],"description":"Count — Options: letters (Letters only), alphanumeric (Letters and digits), all (Every character including punctuation)","default":"letters"}},"title":"Letter Frequency Analyser input","description":"Count letter and character frequencies — useful for cryptograms and puzzle solving.","required":["text"],"additionalProperties":false},"LineEndingsConverterInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["first line\r\nsecond line\r\nthird line   "]},"target":{"type":"string","enum":["lf","crlf","cr"],"description":"Convert to — Options: lf (LF (\\n) — Unix, macOS, Git default), crlf (CRLF (\\r\\n) — Windows), cr (CR (\\r) — classic Mac OS)","default":"lf"},"trailing":{"type":"string","enum":["strip","keep"],"description":"Trailing whitespace — Options: strip (Remove from the end of each line), keep (Leave alone)","default":"strip"},"finalNewline":{"type":"boolean","description":"Ensure a final newline — POSIX defines a line as ending in a newline, so most tools expect one.","default":true}},"title":"Line Endings Converter input","description":"Convert between CRLF, LF and CR, and strip trailing whitespace.","required":["text"],"additionalProperties":false},"LineSorterInput":{"type":"object","properties":{"text":{"type":"string","description":"Lines — Multi-line text.","examples":["banana\napple\ncherry\ndate"]},"order":{"type":"string","enum":["asc","desc","length-asc","length-desc","reverse"],"description":"Sort — Options: asc (A → Z), desc (Z → A), length-asc (Shortest first), length-desc (Longest first), reverse (Reverse current order)","default":"asc"},"numeric":{"type":"boolean","description":"Natural / numeric order — Sorts item2 before item10.","default":true},"caseSensitive":{"type":"boolean","description":"Case sensitive","default":false}},"title":"Line Sorter input","description":"Sort lines alphabetically, numerically, by length or in reverse — with natural-order support.","required":["text"],"additionalProperties":false},"LineWrapperInput":{"type":"object","properties":{"text":{"type":"string","description":"Lines — Multi-line text.","examples":["alpha\nbeta\ngamma"]},"prefix":{"type":"string","description":"Prefix each line with"},"suffix":{"type":"string","description":"Suffix each line with"},"separator":{"type":"string","enum":["comma","comma-tight","newline","comma-newline","space","pipe"],"description":"Join with — Options: comma (Comma — a, b, c), comma-tight (Comma, no space — a,b,c), newline (New line), comma-newline (Comma and new line), space (Space), pipe (Pipe)","default":"comma"},"skipEmpty":{"type":"boolean","description":"Skip empty lines","default":true},"trailing":{"type":"boolean","description":"Keep the final separator","default":false}},"title":"Wrap Lines in Quotes or Brackets input","description":"Add a prefix and suffix to every line and join them — build SQL IN lists, arrays and CSV rows.","required":["text","prefix","suffix"],"additionalProperties":false},"LinkTextCheckerInput":{"type":"object","properties":{"html":{"type":"string","description":"HTML — Multi-line text.","examples":["<h1>Our products</h1>\n<p>Welcome to the catalogue.</p>\n<h3>Laptops</h3>\n<img src=\"laptop.png\">\n<img src=\"banner.jpg\" alt=\"banner.jpg\">\n<a href=\"/specs\">click here</a>\n<h2>Phones</h2>\n<img src=\"phone.png\" alt=\"A slate-grey phone standing upright on a desk\">\n<a href=\"/phones\">Browse all phones</a>"],"contentMediaType":"text/html"}},"title":"Link Text Checker input","description":"Find vague link wording — \"click here\", \"read more\", bare URLs and duplicated labels.","required":["html"],"additionalProperties":false},"ListComparisonInput":{"type":"object","properties":{"a":{"type":"string","description":"First list — Multi-line text.","examples":["apple\nbanana\ncherry\ndate"]},"b":{"type":"string","description":"Second list — Multi-line text.","examples":["banana\ndate\nelderberry"]},"operation":{"type":"string","enum":["all","intersection","union","a-only","b-only","symmetric"],"description":"Show — Options: all (Everything — all four sets), intersection (In both lists), union (Combined, deduplicated), a-only (Only in the first list), b-only (Only in the second list), symmetric (In one list but not both)","default":"all"},"caseSensitive":{"type":"boolean","description":"Case sensitive","default":false},"trim":{"type":"boolean","description":"Trim whitespace","default":true},"sort":{"type":"boolean","description":"Sort results","default":true}},"title":"List Comparison & Set Operations input","description":"Find items in both lists, in one only, or combined — union, intersection and difference.","required":["a","b"],"additionalProperties":false},"ListRandomizerInput":{"type":"object","properties":{"text":{"type":"string","description":"List (one item per line) — Multi-line text.","examples":["Alice\nBob\nCharlie\nDiana\nEve"]},"seed":{"description":"Seed — Use 0 for true randomness, or any number for a repeatable shuffle.","type":"number","minimum":0,"default":0},"unique":{"type":"boolean","description":"Remove duplicates first","default":false}},"title":"List Randomizer & Shuffler input","description":"Shuffle a list into random order — for draws, pairings, running orders and sampling.","required":["text"],"additionalProperties":false},"LlmModelComparisonInput":{"type":"object","properties":{"vendors":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["anthropic","openai","google","meta","mistral","deepseek","xai"]},"description":"Providers — Options: anthropic (Anthropic), openai (OpenAI), google (Google), meta (Meta), mistral (Mistral AI), deepseek (DeepSeek), xai (xAI)","minItems":1,"default":["anthropic","openai","google","meta","mistral","deepseek","xai"]},"sortBy":{"type":"string","enum":["blended","input","output","context","output-limit","name"],"description":"Sort by — Options: blended (Cost for my workload), input (Input price), output (Output price), context (Context window), output-limit (Max output tokens), name (Name)","default":"blended"},"onlyChat":{"type":"boolean","description":"Hide embedding models","default":true},"inputTokens":{"description":"Typical input — Used for the blended cost column — a summarisation workload and a generation workload rank differently. — Measured in tokens.","type":"number","minimum":0,"maximum":10000000,"default":10000},"outputTokens":{"description":"Typical output — Measured in tokens.","type":"number","minimum":0,"maximum":1000000,"default":1000}},"title":"LLM Model Comparison input","description":"Every current model side by side: price per million tokens, context window, max output, modalities and cache rates.","additionalProperties":false},"LlmVramCalculatorInput":{"type":"object","properties":{"arch":{"type":"string","enum":["llama-3-8b","llama-3-70b","llama-3-405b","qwen-7b","qwen-32b","qwen-72b","mistral-7b","mixtral-8x7b","gemma-9b","gemma-27b","phi-4","deepseek-r1-32b","custom"],"description":"Model — Options: llama-3-8b (Llama 3.1 8B), llama-3-70b (Llama 3.3 70B), llama-3-405b (Llama 3.1 405B), qwen-7b (Qwen2.5 7B), qwen-32b (Qwen2.5 32B), qwen-72b (Qwen2.5 72B), mistral-7b (Mistral 7B), mixtral-8x7b (Mixtral 8×7B (MoE)), gemma-9b (Gemma 2 9B), gemma-27b (Gemma 2 27B), phi-4 (Phi-4 14B), deepseek-r1-32b (DeepSeek-R1 Distill 32B), custom (Custom — enter the numbers yourself)","default":"llama-3-8b"},"quant":{"type":"string","enum":["f16","q8_0","q6_k","q5_k_m","q4_k_m","q4_0","q3_k_m","q2_k"],"description":"Quantisation — Options: f16 (F16 / BF16 — full precision), q8_0 (Q8_0 — 8-bit), q6_k (Q6_K — 6-bit), q5_k_m (Q5_K_M — 5-bit medium), q4_k_m (Q4_K_M — 4-bit medium), q4_0 (Q4_0 — 4-bit legacy), q3_k_m (Q3_K_M — 3-bit medium), q2_k (Q2_K — 2-bit)","default":"q4_k_m"},"context":{"description":"Context length — This is what most VRAM tables leave out — the cache grows linearly with it. — Measured in tokens.","type":"number","minimum":512,"maximum":1000000,"default":8192},"kvBits":{"type":"string","enum":["16","8","4"],"description":"KV cache precision — Options: 16 (F16 — default), 8 (Q8 — halves the cache, negligible quality loss), 4 (Q4 — quarters the cache, some quality loss on long context)","default":"16"},"batch":{"description":"Concurrent sequences — Each simultaneous request needs its own KV cache.","type":"number","minimum":1,"maximum":256,"default":1},"training":{"type":"boolean","description":"Fine-tuning rather than inference — Adds optimiser state, gradients and activations — full fine-tuning needs roughly four times the weights on top.","default":false},"params":{"description":"Parameters (billions) — Only applies for some combinations of the other fields.","type":"number","minimum":0.1,"maximum":2000,"default":8},"layers":{"description":"Layers — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":256,"default":32},"hiddenSize":{"description":"Hidden size — Only applies for some combinations of the other fields.","type":"number","minimum":128,"maximum":32768,"default":4096},"heads":{"description":"Attention heads — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":256,"default":32},"kvHeads":{"description":"Key/value heads — Fewer than the attention heads on any model using grouped-query attention. This is the single biggest lever on cache size. — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":256,"default":8}},"title":"LLM VRAM Calculator input","description":"Work out exactly how much video memory a local model needs, including the KV cache that scales with context length.","additionalProperties":false},"LlmsTxtGeneratorInput":{"type":"object","properties":{"name":{"type":"string","description":"Site or project name"},"summary":{"type":"string","description":"One-line summary — This is the first thing a model reads. Make it a definition, not a slogan. — Multi-line text."},"details":{"type":"string","description":"Context — Multi-line text."},"sections":{"type":"string","description":"Sections and links — H2 headings group the links. A section literally named \"Optional\" is the one part of the spec a model may skip when context is tight. — Multi-line text.","examples":["## Docs\n- [Quickstart](https://example.com/docs/quickstart.md): Install the CLI and make a first request\n- [Configuration](https://example.com/docs/config.md): Every option with defaults\n- [API reference](https://example.com/docs/api.md): Endpoints, parameters and error codes\n\n## Examples\n- [Recipes](https://example.com/examples.md): Common tasks end to end\n\n## Optional\n- [Changelog](https://example.com/changelog.md): Release history"]},"format":{"type":"string","enum":["llms","both"],"description":"Output — Options: llms (llms.txt), both (llms.txt plus a starter llms-full.txt)","default":"llms"}},"title":"llms.txt Generator input","description":"Build a valid llms.txt: a curated, Markdown map of your site written for a model with a limited context window.","required":["name","summary","details","sections"],"additionalProperties":false},"LoanEmiCalculatorInput":{"type":"object","properties":{"principal":{"description":"Loan amount","type":"number","minimum":1,"default":250000},"rate":{"description":"Annual interest rate — Measured in %.","type":"number","minimum":0,"maximum":100,"default":6.5},"years":{"description":"Term — Measured in years.","type":"number","minimum":1,"maximum":50,"default":25},"payments":{"type":"string","enum":["12","26","52","4"],"description":"Payments per year — Options: 12 (Monthly), 26 (Fortnightly), 52 (Weekly), 4 (Quarterly)","default":"12"}},"title":"Loan & EMI Calculator input","description":"Calculate monthly repayments, total interest and the full cost of a loan.","additionalProperties":false},"LogParserInput":{"type":"object","properties":{"log":{"type":"string","description":"Log lines — Multi-line text.","examples":["192.168.1.10 - - [01/Jan/2026:10:15:32 +0000] \"GET /api/users HTTP/1.1\" 200 1543 \"-\" \"Mozilla/5.0\"\n10.0.0.5 - - [01/Jan/2026:10:15:44 +0000] \"POST /api/login HTTP/1.1\" 401 89 \"-\" \"curl/8.4.0\"\n192.168.1.10 - - [01/Jan/2026:10:16:02 +0000] \"GET /static/app.js HTTP/1.1\" 200 88213 \"-\" \"Mozilla/5.0\""]},"format":{"type":"string","enum":["auto","combined","json"],"description":"Format — Options: auto (Detect automatically), combined (Apache / Nginx combined), json (JSON per line)","default":"auto"},"filter":{"type":"string","description":"Filter — Only lines containing this text are included."},"group":{"type":"string","enum":["status","path","ip","method"],"description":"Summarise by — Options: status (Status code), path (Path), ip (Client IP), method (HTTP method)","default":"status"}},"title":"Log File Parser input","description":"Parse Apache, Nginx or JSON log lines into a sortable table with traffic summaries.","required":["log","filter"],"additionalProperties":false},"LoremIpsumGeneratorInput":{"type":"object","properties":{"paragraphs":{"description":"Paragraphs","type":"number","minimum":1,"maximum":50,"default":3},"sentences":{"description":"Sentences each","type":"number","minimum":1,"maximum":20,"default":5},"format":{"type":"string","enum":["plain","html","markdown","list"],"description":"Format — Options: plain (Plain text), html (HTML paragraphs), markdown (Markdown), list (List items)","default":"plain"},"startClassic":{"type":"boolean","description":"Start with \"Lorem ipsum dolor sit amet\"","default":true}},"title":"Lorem Ipsum Generator input","description":"Generate placeholder text in paragraphs, sentences, words or list items.","additionalProperties":false},"LotteryNumberGeneratorInput":{"type":"object","properties":{"preset":{"type":"string","enum":["custom","euromillions","powerball","megamillions","uklotto","lotto649"],"description":"Draw — Options: custom (Custom), euromillions (EuroMillions — 5 of 50 plus 2 of 12), powerball (Powerball — 5 of 69 plus 1 of 26), megamillions (Mega Millions — 5 of 70 plus 1 of 25), uklotto (UK Lotto — 6 of 59), lotto649 (Lotto 6/49 — 6 of 49)","default":"custom"},"picks":{"description":"Numbers to pick — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":50,"default":6},"max":{"description":"Highest number — Only applies for some combinations of the other fields.","type":"number","minimum":2,"maximum":200,"default":49},"bonusPicks":{"description":"Bonus numbers — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":10,"default":0},"bonusMax":{"description":"Highest bonus number — Only applies for some combinations of the other fields.","type":"number","minimum":2,"maximum":100,"default":10},"count":{"description":"Lines to generate","type":"number","minimum":1,"maximum":100,"default":5},"seed":{"type":"string","description":"Seed"}},"title":"Lottery Number Generator input","description":"Generate random lottery lines for common draws, with the real odds shown.","required":["seed"],"additionalProperties":false},"MacroCalculatorInput":{"type":"object","properties":{"calories":{"description":"Daily calories — Measured in kcal.","type":"number","minimum":800,"maximum":8000,"default":2200},"goal":{"type":"string","enum":["maintain","lose","gain"],"description":"Goal — Options: maintain (Maintain weight), lose (Lose fat), gain (Build muscle)","default":"maintain"},"split":{"type":"string","enum":["balanced","highprotein","lowcarb","keto","endurance"],"description":"Macro split — Options: balanced (Balanced — 30/40/30), highprotein (High protein — 40/30/30), lowcarb (Low carb — 35/20/45), keto (Ketogenic — 25/5/70), endurance (Endurance — 20/55/25)","default":"balanced"}},"title":"Macro Calculator input","description":"Split daily calories into protein, carbohydrate and fat targets in grams.","additionalProperties":false},"MarkdownEditorInput":{"type":"object","properties":{"input":{"type":"string","description":"Markdown — Multi-line text.","examples":["---\ntitle: Release notes\nauthor: Convertto\n---\n\n# Release notes\n\nA **markdown editor** that renders as you type, with a live outline and\n*everything* it can tell you about the document in the status bar.\n\n## What is new\n\n- Split view with synchronised scrolling\n- An outline you can click to jump\n- Task lists you can tick in the preview\n\n> Nothing leaves your browser — the document is parsed and rendered locally.\n\n### Checklist\n\n- [x] Write the parser\n- [x] Render the preview\n- [ ] Ship it\n\n### A table\n\n| Feature   | Editor | Viewer |\n| --------- | :----: | :----: |\n| Outline   |   ✓    |   ✓    |\n| Export    |   ✓    |   ✓    |\n| Shortcuts |   ✓    |        |\n\n```js\nconst html = await renderMarkdown(source);\nconsole.log(html.stats.words);\n```\n\nRead more in the [CommonMark spec](https://spec.commonmark.org/).\n"],"contentMediaType":"text/markdown"},"view":{"type":"string","enum":["write","split","read"],"description":"Layout — Options: write (Write — source only), split (Split — source and preview), read (Read — preview only)","default":"split"},"skin":{"type":"string","enum":["studio","paper","compact"],"description":"Preview styling — Options: studio (Studio), paper (Paper), compact (Compact)","default":"studio"},"breaks":{"type":"boolean","description":"Single newline breaks the line — How Slack, Notion and most chat apps behave. CommonMark needs a blank line or two trailing spaces.","default":false}},"title":"Markdown Editor & Viewer input","description":"Write markdown with a live preview, outline, formatting toolbar and one-click HTML, PDF or .md export.","required":["input"],"additionalProperties":false},"MarkdownFormatterInput":{"type":"object","properties":{"code":{"type":"string","description":"Markdown — Multi-line text.","examples":["#  Title\n*  item one\n*  item two\n\n| a | b |\n|--|:--|\n| 1 | 2 |\n\nSome __bold__ and *italic* text."],"contentMediaType":"text/markdown"},"proseWrap":{"type":"string","enum":["preserve","always","never"],"description":"Wrap prose — Options: preserve (Preserve existing line breaks), always (Wrap at line width), never (One line per paragraph)","default":"preserve"},"printWidth":{"description":"Line width — Measured in chars.","type":"number","minimum":40,"maximum":200,"default":80},"tabWidth":{"description":"Indent size — Measured in spaces.","type":"number","minimum":1,"maximum":8,"default":2},"useTabs":{"type":"boolean","description":"Indent with tabs","default":false}},"title":"Markdown Formatter input","description":"Tidy Markdown — normalise headings, lists, tables and emphasis markers.","required":["code"],"additionalProperties":false},"MarkdownToHtmlInput":{"type":"object","properties":{"input":{"type":"string","description":"Content — Multi-line text.","examples":["# Hello\n\nThis is **bold** and this is *italic*.\n\n- One\n- Two\n\n[A link](https://convertto.tech)\n\n```js\nconsole.log(\"hi\");\n```"],"contentMediaType":"text/markdown"},"direction":{"type":"string","enum":["md-to-html","html-to-md"],"description":"Direction — Options: md-to-html (Markdown → HTML), html-to-md (HTML → Markdown)","default":"md-to-html"}},"title":"Markdown to HTML Converter input","description":"Convert Markdown to clean HTML, or turn existing HTML back into Markdown.","required":["input"],"additionalProperties":false},"MarkupMarginCalculatorInput":{"type":"object","properties":{"mode":{"type":"string","enum":["markup","margin","price"],"description":"I know the — Options: markup (Cost and markup %), margin (Cost and target margin %), price (Cost and selling price)","default":"markup"},"cost":{"description":"Cost","type":"number","minimum":0.01,"maximum":1000000000,"default":100},"value":{"description":"Value — The markup %, margin % or selling price, depending on the mode above.","type":"number","minimum":0,"maximum":1000000000,"default":50},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Markup & Margin Calculator input","description":"Convert between markup and margin — they are not the same number, and confusing them costs money.","additionalProperties":false},"MediaQueryGeneratorInput":{"type":"object","properties":{"type":{"type":"string","enum":["min","max","range","dark","motion","print"],"description":"Query type — Options: min (Min width (mobile-first)), max (Max width (desktop-first)), range (Between two widths), dark (Dark mode preference), motion (Reduced motion preference), print (Print)","default":"min"},"minWidth":{"description":"Min width — Measured in px.","type":"number","minimum":0,"maximum":3000,"default":768},"maxWidth":{"description":"Max width — Measured in px.","type":"number","minimum":0,"maximum":3000,"default":1279},"unit":{"type":"string","enum":["px","em"],"description":"Unit — Options: px (Pixels), em (EM (recommended))","default":"px"}},"title":"CSS Media Query Generator input","description":"Generate responsive breakpoint media queries, with common device presets.","additionalProperties":false},"MeetingCostCalculatorInput":{"type":"object","properties":{"attendees":{"description":"Attendees","type":"number","minimum":1,"maximum":500,"default":6},"salary":{"description":"Average salary","type":"number","minimum":0,"maximum":10000000,"default":60000},"period":{"type":"string","enum":["year","month","hour"],"description":"Salary is — Options: year (Per year), month (Per month), hour (Per hour)","default":"year"},"minutes":{"description":"Length — Measured in min.","type":"number","minimum":1,"maximum":1440,"default":60},"frequency":{"type":"string","enum":["once","daily","weekly","fortnightly","monthly","quarterly"],"description":"Repeats — Options: once (One-off), daily (Every working day), weekly (Weekly), fortnightly (Fortnightly), monthly (Monthly), quarterly (Quarterly)","default":"weekly"},"overhead":{"description":"Employment overhead — Employer taxes, benefits, equipment and space. 25–40% is typical. — Between 0 and 100 %.","type":"number","minimum":0,"maximum":100,"default":30},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Meeting Cost Calculator input","description":"Work out what a meeting actually costs in salary time, per session and per year.","additionalProperties":false},"MetaTagGeneratorInput":{"type":"object","properties":{"title":{"type":"string","description":"Page title — Aim for 50–60 characters."},"description":{"type":"string","description":"Meta description — Aim for 140–158 characters. — Multi-line text."},"url":{"type":"string","description":"Canonical URL"},"image":{"type":"string","description":"Social image URL"},"siteName":{"type":"string","description":"Site name"},"twitter":{"type":"string","description":"Twitter handle"},"type":{"type":"string","enum":["website","article","product"],"description":"Content type — Options: website (Website), article (Article), product (Product)","default":"website"}},"title":"Meta Tag Generator input","description":"Generate title, description, Open Graph and Twitter Card tags for any page.","required":["title","description","url","image","siteName","twitter"],"additionalProperties":false},"MimeTypeLookupInput":{"type":"object","properties":{"query":{"type":"string","description":"Extension or MIME type"}},"title":"MIME Type Lookup input","description":"Find the correct MIME type for any file extension, and vice versa.","required":["query"],"additionalProperties":false},"MockDataGeneratorInput":{"type":"object","properties":{"preset":{"type":"string","enum":["users","employees","customers","products","orders","transactions","posts","events","iot","inventory","tickets","files","custom"],"description":"Data shape — Start from a ready-made schema, or choose Custom to define every column yourself. — Options: users (Users), employees (Employees), customers (Customers), products (Products), orders (Orders), transactions (Transactions), posts (Blog posts), events (Analytics events), iot (IoT sensor readings), inventory (Inventory), tickets (Support tickets), files (File records), custom (Custom — define my own fields)","default":"users"},"schema":{"type":"array","description":"Custom fields — Any of 97 field types — see the full reference below the result. Column order is preserved. — Array of [Column name, Field type] string pairs. — Only applies for some combinations of the other fields.","items":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},"default":[["id","id"],["name","fullName"],["email","email"],["signed_up","createdAt"]]},"rows":{"description":"Number of rows — Up to 5,000 records per run.","type":"number","minimum":1,"maximum":5000,"default":10},"format":{"type":"string","enum":["json","json-compact","ndjson","yaml","xml","csv","tsv","markdown","html","sql","sql-full","typescript","javascript","python"],"description":"Output format — Options: json (JSON — array of objects), json-compact (JSON — minified), ndjson (NDJSON — one object per line), yaml (YAML), xml (XML), csv (CSV), tsv (TSV), markdown (Markdown table), html (HTML table), sql (SQL INSERT statements), sql-full (SQL — CREATE TABLE + INSERT), typescript (TypeScript — interface + const), javascript (JavaScript — export const), python (Python — list of dicts)","default":"json"},"locale":{"type":"string","enum":["us","gb","de","fr","in","jp","mixed"],"description":"Locale — Drives names, addresses, postcodes, phone formats and currency. — Options: us (United States (en-US)), gb (United Kingdom (en-GB)), de (Germany (de-DE)), fr (France (fr-FR)), in (India (en-IN)), jp (Japan (ja-JP)), mixed (Mixed — international)","default":"us"},"tableName":{"type":"string","description":"Table / root name — Used for the SQL table, XML root, TypeScript interface and export name."},"seed":{"type":"string","description":"Seed — The same seed always produces the same rows, so a shared link reproduces the exact dataset."},"nullRate":{"description":"Empty / null values — Sprinkle nulls in to test how your code handles missing fields. IDs are never nulled. — Between 0 and 50 %.","type":"number","minimum":0,"maximum":50,"default":0},"startId":{"description":"First sequential ID","type":"number","minimum":0,"maximum":1000000,"default":1},"wrapKey":{"type":"string","description":"Wrap array in a key — JSON only. Leave blank for a bare array, or enter e.g. \"data\" to wrap it in an envelope. — Only applies for some combinations of the other fields."}},"title":"Mock Data Generator input","description":"Generate realistic fake test data in 14 formats from 100+ field types, with reproducible seeds.","required":["tableName","seed"],"additionalProperties":false},"MoonPhaseCalculatorInput":{"type":"object","properties":{"date":{"type":"string","description":"Date"},"days":{"description":"Show the next — Measured in days.","type":"number","minimum":0,"maximum":120,"default":30}},"title":"Moon Phase Calculator input","description":"Find the moon phase, illumination and age for any date, plus the upcoming new and full moons.","required":["date"],"additionalProperties":false},"MorseCodeTranslatorInput":{"type":"object","properties":{"text":{"type":"string","description":"Text or Morse — Multi-line text.","examples":["HELLO WORLD"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Text → Morse), decode (Morse → Text)","default":"encode"}},"title":"Morse Code Translator input","description":"Translate text to Morse code and decode Morse back to plain text, letters and numbers included.","required":["text"],"additionalProperties":false},"MortgageComparisonCalculatorInput":{"type":"object","properties":{"amount":{"description":"Loan amount","type":"number","minimum":1,"maximum":1000000000,"default":300000},"rateA":{"description":"Offer A rate — Measured in %.","type":"number","minimum":0,"maximum":40,"default":5.5},"yearsA":{"description":"Offer A term — Measured in years.","type":"number","minimum":1,"maximum":50,"default":30},"feesA":{"description":"Offer A fees","type":"number","minimum":0,"maximum":1000000,"default":0},"rateB":{"description":"Offer B rate — Measured in %.","type":"number","minimum":0,"maximum":40,"default":4.9},"yearsB":{"description":"Offer B term — Measured in years.","type":"number","minimum":1,"maximum":50,"default":30},"feesB":{"description":"Offer B fees","type":"number","minimum":0,"maximum":1000000,"default":3000},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Mortgage Comparison Calculator input","description":"Compare two loan offers side by side — payment, total interest and the true cost with fees.","additionalProperties":false},"MultiEncoderInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["Hello, world!"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Encode — text into every format), decode (Decode — detect the format and decode)","default":"encode"}},"title":"Multi-Format Encoder input","description":"Encode text into Base64, hex, binary, URL, HTML entities, ROT13 and more, all at once.","required":["text"],"additionalProperties":false},"NanoidGeneratorInput":{"type":"object","properties":{"count":{"description":"How many","type":"number","minimum":1,"maximum":500,"default":10},"length":{"description":"Length","type":"number","minimum":6,"maximum":64,"default":21},"alphabet":{"type":"string","enum":["default","alphanumeric","lowercase","numbers","hex"],"description":"Alphabet — Options: default (URL-safe (A-Za-z0-9_-)), alphanumeric (Alphanumeric only), lowercase (Lowercase + digits), numbers (Digits only), hex (Hexadecimal)","default":"default"}},"title":"Nano ID Generator input","description":"Generate compact URL-safe unique IDs — shorter than a UUID with comparable collision safety.","additionalProperties":false},"NatoPhoneticAlphabetInput":{"type":"object","properties":{"text":{"type":"string","description":"Text to spell out","examples":["Convertto"]}},"title":"NATO Phonetic Alphabet Converter input","description":"Spell any word using the NATO phonetic alphabet — Alfa, Bravo, Charlie — for clear radio and phone use.","required":["text"],"additionalProperties":false},"NeumorphismGeneratorInput":{"type":"object","properties":{"background":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Background colour — Neumorphism only works when the element and its background are the same colour. — A CSS hex colour, e.g. #3366ff.","default":"#e0e5ec"},"shape":{"type":"string","enum":["raised","pressed","flat","concave","convex"],"description":"Shape — Options: raised (Raised — sits above the surface), pressed (Pressed — sunk into the surface), flat (Flat — outline only), concave (Concave — curved inward), convex (Convex — curved outward)","default":"raised"},"size":{"description":"Element size — Measured in px.","type":"number","minimum":40,"maximum":500,"default":200},"radius":{"description":"Corner radius — Between 0 and 100 px.","type":"number","minimum":0,"maximum":100,"default":50},"distance":{"description":"Shadow distance — Between 1 and 60 px.","type":"number","minimum":1,"maximum":60,"default":20},"blur":{"description":"Blur — Between 0 and 120 px.","type":"number","minimum":0,"maximum":120,"default":40},"intensity":{"description":"Contrast — Between 1 and 50 %.","type":"number","minimum":1,"maximum":50,"default":15}},"title":"Neumorphism Generator input","description":"Generate the paired light and dark shadows that make an element look pressed into or raised from its background.","additionalProperties":false},"NpvIrrCalculatorInput":{"type":"object","properties":{"initial":{"description":"Initial investment — Entered as a positive number; it is treated as an outflow.","type":"number","minimum":0,"maximum":1000000000000,"default":100000},"flows":{"type":"string","description":"Cash flows — One period per line, in order. Negative values are allowed. — Multi-line text.","examples":["25000\n30000\n35000\n40000\n45000"]},"rate":{"description":"Discount rate — Measured in %.","type":"number","minimum":0,"maximum":100,"default":8},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"NPV & IRR Calculator input","description":"Net present value, internal rate of return and payback period for a series of cash flows.","required":["flows"],"additionalProperties":false},"NthChildGeneratorInput":{"type":"object","properties":{"pattern":{"type":"string","enum":["even","odd","first","last","every","custom"],"description":"Pattern — Options: even (Even items), odd (Odd items), first (First n items), last (Last n items), every (Every nth item), custom (Custom an + b)","default":"even"},"a":{"description":"a — the step — Only applies for some combinations of the other fields.","type":"number","minimum":-20,"maximum":20,"default":3},"b":{"description":"b — the offset — Only applies for some combinations of the other fields.","type":"number","minimum":-20,"maximum":20,"default":0},"total":{"description":"Items to preview — Between 4 and 40.","type":"number","minimum":4,"maximum":40,"default":12}},"title":"nth-child Selector Generator input","description":"Build an :nth-child formula and see which items it selects out of a row.","additionalProperties":false},"NumberBaseConverterInput":{"type":"object","properties":{"value":{"type":"string","description":"Value","examples":["255"]},"fromBase":{"type":"string","enum":["2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36"],"description":"From base — One of 35 values, e.g. 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25…","default":"10"},"toBase":{"type":"string","enum":["2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36"],"description":"To base — One of 35 values, e.g. 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25…","default":"2"}},"title":"Number Base Converter input","description":"Convert numbers between any base from 2 to 36 — binary, octal, decimal, hexadecimal and beyond.","required":["value"],"additionalProperties":false},"NumberToWordsInput":{"type":"object","properties":{"value":{"type":"string","description":"Number","examples":["1234.56"]},"style":{"type":"string","enum":["plain","title","upper"],"description":"Style — Options: plain (Plain words), title (Title Case), upper (UPPERCASE)","default":"plain"}},"title":"Number to Words Converter input","description":"Spell out numbers in English words — for cheques, contracts and invoices.","required":["value"],"additionalProperties":false},"OctalToDecimalInput":{"type":"object","properties":{"value":{"type":"string","description":"Value"}},"title":"Octal to Decimal Converter input","description":"Convert octal numbers to decimal, binary and hexadecimal.","required":["value"],"additionalProperties":false},"OrdinalNumberConverterInput":{"type":"object","properties":{"numbers":{"type":"string","description":"Numbers — Multi-line text.","examples":["1\n2\n3\n11\n12\n13\n21\n22\n23\n101\n111"]},"style":{"type":"string","enum":["all","suffix","words","roman"],"description":"Convert to — Options: all (Every form), suffix (Suffix — 1st, 2nd, 3rd), words (Words — first, second, third), roman (Roman numerals)","default":"all"},"language":{"type":"string","enum":["en"],"description":"Language — Options: en (English)","default":"en"}},"title":"Ordinal Number Converter input","description":"Convert numbers to ordinals — 1st, first, primary, Roman — with the irregular cases right.","required":["numbers"],"additionalProperties":false},"PaletteAccessibilityGraderInput":{"type":"object","properties":{"colors":{"type":"string","description":"Palette — One colour per line, hex format. — Multi-line text.","examples":["#2563eb\n#64748b\n#16a34a\n#f59e0b\n#dc2626\n#a3a3a3"]},"background":{"type":"string","description":"Backgrounds — Every palette colour is tested against every background. — Multi-line text.","examples":["#ffffff\n#f8fafc\n#0f172a"]},"large":{"type":"boolean","description":"Also grade for large text — 18pt, or 14pt bold, needs only 3:1 rather than 4.5:1.","default":true}},"title":"Palette Accessibility Grader input","description":"Grade every colour in a palette against one or more backgrounds for WCAG contrast.","required":["colors","background"],"additionalProperties":false},"PassphraseGeneratorInput":{"type":"object","properties":{"words":{"description":"Number of words","type":"number","minimum":3,"maximum":12,"default":5},"count":{"description":"How many","type":"number","minimum":1,"maximum":25,"default":5},"separator":{"type":"string","enum":["-",".","_"," "],"description":"Separator — Options: - (Hyphen), . (Dot), _ (Underscore),   (Space)","default":"-"},"capitalize":{"type":"boolean","description":"Capitalise words","default":true},"addNumber":{"type":"boolean","description":"Append a number","default":true}},"title":"Passphrase Generator input","description":"Generate memorable Diceware-style passphrases from random words.","additionalProperties":false},"PasswordGeneratorInput":{"type":"object","properties":{"mode":{"type":"string","enum":["random","pronounceable","pattern"],"description":"Style — Options: random (Random characters — strongest), pronounceable (Pronounceable — easier to type and say), pattern (Custom pattern)","default":"random"},"pattern":{"type":"string","description":"Pattern — A = uppercase · a = lowercase · 9 = digit · # = symbol · anything else is literal. — Only applies for some combinations of the other fields."},"length":{"description":"Length — Between 6 and 128  characters. — Only applies for some combinations of the other fields.","type":"number","minimum":6,"maximum":128,"default":20},"count":{"description":"How many","type":"number","minimum":1,"maximum":50,"default":5},"excludeAmbiguous":{"type":"boolean","description":"Exclude look-alikes (0 O l I)","default":true},"uppercase":{"type":"boolean","description":"Uppercase A-Z — Only applies for some combinations of the other fields.","default":true},"lowercase":{"type":"boolean","description":"Lowercase a-z — Only applies for some combinations of the other fields.","default":true},"numbers":{"type":"boolean","description":"Numbers 0-9 — Only applies for some combinations of the other fields.","default":true},"symbols":{"type":"boolean","description":"Symbols !@#$ — Only applies for some combinations of the other fields.","default":true}},"title":"Password Generator input","description":"Generate strong random passwords using your browser's cryptographic random source.","additionalProperties":false},"PasswordPolicyTesterInput":{"type":"object","properties":{"password":{"type":"string","format":"password","writeOnly":true,"description":"Password — Tested entirely in your browser. Nothing is sent or stored."},"minLength":{"description":"Minimum length","type":"number","minimum":1,"maximum":128,"default":12},"maxRepeat":{"description":"Maximum repeated character run","type":"number","minimum":1,"maximum":20,"default":3},"banCommon":{"type":"boolean","description":"Reject common passwords","default":true},"requireUpper":{"type":"boolean","description":"Require an uppercase letter","default":true},"requireLower":{"type":"boolean","description":"Require a lowercase letter","default":true},"requireDigit":{"type":"boolean","description":"Require a digit","default":true},"requireSymbol":{"type":"boolean","description":"Require a symbol","default":true}},"title":"Password Policy Tester input","description":"Test a password against a policy and see whether the policy actually improves security.","required":["password"],"additionalProperties":false},"PasswordStrengthCheckerInput":{"type":"object","properties":{"password":{"type":"string","description":"Password"}},"title":"Password Strength Checker input","description":"Estimate how long a password would take to crack, and see exactly what weakens it.","required":["password"],"additionalProperties":false},"PercentageCalculatorInput":{"type":"object","properties":{"mode":{"type":"string","enum":["of","is-what-percent","change","increase","decrease","reverse"],"description":"Calculate — Options: of (What is X% of Y?), is-what-percent (X is what percent of Y?), change (Percentage change from X to Y), increase (Increase X by Y%), decrease (Decrease X by Y%), reverse (X is Y% of what number?)","default":"of"},"a":{"description":"First value (X)","type":"number","default":25},"b":{"description":"Second value (Y)","type":"number","default":200}},"title":"Percentage Calculator input","description":"Work out percentages, percentage change and reverse percentages with the working shown.","additionalProperties":false},"PercentageConverterInput":{"type":"object","properties":{"value":{"type":"string","description":"Value","examples":["25"]},"mode":{"type":"string","enum":["percent","decimal","bp"],"description":"Input is a — Options: percent (Percentage (25 = 25%)), decimal (Decimal (0.25)), bp (Basis points (2500))","default":"percent"}},"title":"Percentage Converter input","description":"Convert between percentages, decimals, fractions, ratios and basis points.","required":["value"],"additionalProperties":false},"PermutationCombinationCalculatorInput":{"type":"object","properties":{"n":{"description":"Total items (n)","type":"number","minimum":0,"maximum":170,"default":10},"r":{"description":"Chosen items (r)","type":"number","minimum":0,"maximum":170,"default":3},"mode":{"type":"string","enum":["both","permutation","combination"],"description":"Calculate — Options: both (Both nPr and nCr), permutation (Permutations (order matters)), combination (Combinations (order does not))","default":"both"}},"title":"Permutation & Combination Calculator input","description":"Calculate nPr, nCr and factorials for counting and probability problems.","additionalProperties":false},"PigLatinTranslatorInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["hello world this is pig latin"]},"direction":{"type":"string","enum":["to","from"],"description":"Direction — Options: to (English → Pig Latin), from (Pig Latin → English)","default":"to"},"style":{"type":"string","enum":["cluster","single"],"description":"Rule — Options: cluster (Move the whole consonant cluster — string → ingstray), single (Move one letter only — string → tringsay)","default":"cluster"}},"title":"Pig Latin Translator input","description":"Convert English to Pig Latin and back, with both the classic and consonant-cluster rules.","required":["text"],"additionalProperties":false},"PowerConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["w","kw","mw","hp","ps","btuh","ftlbs"],"description":"From — Options: w (Watts (W)), kw (Kilowatts (kW)), mw (Megawatts (MW)), hp (Horsepower (mechanical) (hp)), ps (Horsepower (metric, PS) (PS)), btuh (BTU per Hour (BTU/h)), ftlbs (Foot-pounds per Second (ft⋅lb/s))","default":"hp"},"to":{"type":"string","enum":["w","kw","mw","hp","ps","btuh","ftlbs"],"description":"To — Options: w (Watts (W)), kw (Kilowatts (kW)), mw (Megawatts (MW)), hp (Horsepower (mechanical) (hp)), ps (Horsepower (metric, PS) (PS)), btuh (BTU per Hour (BTU/h)), ftlbs (Foot-pounds per Second (ft⋅lb/s))","default":"kw"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Power Converter input","description":"Convert power between 7 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"PregnancyDueDateCalculatorInput":{"type":"object","properties":{"method":{"type":"string","enum":["lmp","conception","scan"],"description":"Calculate from — Options: lmp (First day of your last period), conception (Conception or IVF transfer date), scan (An ultrasound estimate of gestational age)","default":"lmp"},"date":{"type":"string","format":"date","description":"Date — ISO 8601 date, YYYY-MM-DD."},"cycleLength":{"description":"Average cycle length — Naegele's rule assumes 28 days; a longer cycle pushes the due date later. — Measured in days. — Only applies for some combinations of the other fields.","type":"number","minimum":20,"maximum":45,"default":28}},"title":"Pregnancy Due Date Calculator input","description":"Estimate a due date from a last period, conception date or an early scan, with milestones.","additionalProperties":false},"PressureConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["pa","kpa","mpa","bar","mbar","atm","psi","torr","mmhg","inhg"],"description":"From — Options: pa (Pascals (Pa)), kpa (Kilopascals (kPa)), mpa (Megapascals (MPa)), bar (Bar (bar)), mbar (Millibar (mbar)), atm (Atmospheres (atm)), psi (PSI (psi)), torr (Torr (Torr)), mmhg (mmHg (mmHg)), inhg (inHg (inHg))","default":"bar"},"to":{"type":"string","enum":["pa","kpa","mpa","bar","mbar","atm","psi","torr","mmhg","inhg"],"description":"To — Options: pa (Pascals (Pa)), kpa (Kilopascals (kPa)), mpa (Megapascals (MPa)), bar (Bar (bar)), mbar (Millibar (mbar)), atm (Atmospheres (atm)), psi (PSI (psi)), torr (Torr (Torr)), mmhg (mmHg (mmHg)), inhg (inHg (inHg))","default":"psi"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Pressure Converter input","description":"Convert pressure between 10 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"PrimeNumberCheckerInput":{"type":"object","properties":{"n":{"description":"Number","type":"number","minimum":0,"default":600851475143}},"title":"Prime Number Checker & Factoriser input","description":"Check whether a number is prime and see its full prime factorisation.","additionalProperties":false},"ProfitMarginCalculatorInput":{"type":"object","properties":{"cost":{"description":"Cost","type":"number","minimum":0,"default":40},"price":{"description":"Selling price","type":"number","minimum":0,"default":100}},"title":"Profit Margin & Markup Calculator input","description":"Calculate margin, markup and profit from cost and selling price — they are not the same thing.","additionalProperties":false},"PunycodeConverterInput":{"type":"object","properties":{"text":{"type":"string","description":"Domain or Punycode","examples":["münchen.de"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Unicode → Punycode), decode (Punycode → Unicode)","default":"encode"}},"title":"Punycode Converter input","description":"Convert internationalised domain names to Punycode and decode xn-- domains back.","required":["text"],"additionalProperties":false},"PxRemConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","minimum":0,"default":24},"from":{"type":"string","enum":["px","rem","em","pt"],"description":"Unit — Options: px (Pixels), rem (REM), em (EM), pt (Points)","default":"px"},"base":{"description":"Root font size — Measured in px.","type":"number","minimum":1,"maximum":100,"default":16}},"title":"PX to REM Converter input","description":"Convert between pixels, rem and em using your project root font size.","additionalProperties":false},"QuadraticEquationSolverInput":{"type":"object","properties":{"a":{"description":"a (x² coefficient)","type":"number","default":1},"b":{"description":"b (x coefficient)","type":"number","default":-3},"c":{"description":"c (constant)","type":"number","default":2}},"title":"Quadratic Equation Solver input","description":"Solve ax² + bx + c = 0 with real or complex roots and see the discriminant.","additionalProperties":false},"QueryStringConverterInput":{"type":"object","properties":{"input":{"type":"string","description":"Query string or JSON — Multi-line text.","examples":["?page=2&sort=name&filter[]=active&filter[]=verified&q=hello%20world"]},"direction":{"type":"string","enum":["qs-to-json","json-to-qs"],"description":"Direction — Options: qs-to-json (Query string → JSON), json-to-qs (JSON → Query string)","default":"qs-to-json"}},"title":"Query String to JSON Converter input","description":"Convert URL query strings to JSON and build query strings from JSON objects.","required":["input"],"additionalProperties":false},"QuotedPrintableInput":{"type":"object","properties":{"text":{"type":"string","description":"Text or quoted-printable — Multi-line text.","examples":["Café costs €5"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Text → Quoted-printable), decode (Quoted-printable → Text)","default":"encode"}},"title":"Quoted-Printable Encoder & Decoder input","description":"Encode and decode quoted-printable, the MIME format used in email bodies and headers.","required":["text"],"additionalProperties":false},"RandomColorGeneratorInput":{"type":"object","properties":{"count":{"description":"How many","type":"number","minimum":1,"maximum":100,"default":8},"scheme":{"type":"string","enum":["random","pastel","vivid","dark","analogous","complementary","triadic","monochrome"],"description":"Scheme — Options: random (Completely random), pastel (Pastel — light and desaturated), vivid (Vivid — saturated), dark (Dark), analogous (Analogous to the base colour), complementary (Complementary to the base), triadic (Triadic from the base), monochrome (Shades of the base)","default":"random"},"base":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Base colour — A CSS hex colour, e.g. #3366ff. — Only applies for some combinations of the other fields.","default":"#2563eb"},"format":{"type":"string","enum":["hex","rgb","hsl","css","tailwind"],"description":"Format — Options: hex (HEX), rgb (RGB), hsl (HSL), css (CSS custom properties), tailwind (Tailwind config)","default":"hex"},"seed":{"type":"string","description":"Seed"}},"title":"Random Colour Generator input","description":"Generate random colours as a free palette or a harmony built around a base colour.","required":["seed"],"additionalProperties":false},"RandomDateGeneratorInput":{"type":"object","properties":{"from":{"type":"string","description":"From"},"to":{"type":"string","description":"To"},"count":{"description":"How many","type":"number","minimum":1,"maximum":1000,"default":10},"format":{"type":"string","enum":["iso","isoTime","us","eu","long","unix"],"description":"Format — Options: iso (ISO — 2026-03-15), isoTime (ISO with time), us (US — 03/15/2026), eu (European — 15/03/2026), long (Long — 15 March 2026), unix (Unix timestamp)","default":"iso"},"weekdaysOnly":{"type":"boolean","description":"Weekdays only","default":false},"seed":{"type":"string","description":"Seed"}},"title":"Random Date Generator input","description":"Generate random dates in a range, optionally restricted to working days.","required":["from","to","seed"],"additionalProperties":false},"RandomNumberGeneratorInput":{"type":"object","properties":{"min":{"description":"Minimum","type":"number","default":1},"max":{"description":"Maximum","type":"number","default":100},"count":{"description":"How many","type":"number","minimum":1,"maximum":1000,"default":6},"unique":{"type":"boolean","description":"No repeats","default":true},"sorted":{"type":"boolean","description":"Sort ascending","default":false}},"title":"Random Number Generator input","description":"Generate random numbers in any range, with optional uniqueness — for draws and sampling.","additionalProperties":false},"RandomPickerInput":{"type":"object","properties":{"items":{"type":"string","description":"List (one per line) — Multi-line text.","examples":["Ada\nGrace\nAlan\nKatherine\nLinus\nMargaret\nDennis\nBarbara"]},"mode":{"type":"string","enum":["pick","teams","order"],"description":"Mode — Options: pick (Pick winners), teams (Split into teams), order (Random running order)","default":"pick"},"count":{"description":"Winners or teams","type":"number","minimum":1,"maximum":100,"default":2}},"title":"Random Picker & Team Generator input","description":"Pick winners from a list, or split names into balanced random teams.","required":["items"],"additionalProperties":false},"RandomStringGeneratorInput":{"type":"object","properties":{"length":{"description":"Length","type":"number","minimum":1,"maximum":512,"default":32},"count":{"description":"How many","type":"number","minimum":1,"maximum":200,"default":5},"charset":{"type":"string","enum":["alphanumeric","letters","lowercase","uppercase","numbers","hex","base64","all"],"description":"Character set — Options: alphanumeric (Letters + digits), letters (Letters only), lowercase (Lowercase letters), uppercase (Uppercase letters), numbers (Digits only), hex (Hexadecimal), base64 (Base64 characters), all (Letters, digits + symbols)","default":"alphanumeric"}},"title":"Random String Generator input","description":"Generate random strings from a chosen character set — for keys, tokens and test data.","additionalProperties":false},"RandomTeamGeneratorInput":{"type":"object","properties":{"people":{"type":"string","description":"People — Multi-line text.","examples":["Ada\nGrace\nAlan\nKatherine\nMargaret\nJoan\nDorothy\nBarbara\nJean\nFrances"]},"mode":{"type":"string","enum":["teams","size"],"description":"Split by — Options: teams (Number of teams), size (People per team)","default":"teams"},"count":{"description":"How many","type":"number","minimum":1,"maximum":100,"default":3},"balance":{"type":"string","enum":["spread","last"],"description":"Uneven remainder — Options: spread (Spread across the first teams), last (Put everyone left over in the final team)","default":"spread"},"seed":{"type":"string","description":"Seed"}},"title":"Random Team Generator input","description":"Split a list of people into balanced random teams, by team count or team size.","required":["people","seed"],"additionalProperties":false},"RatioCalculatorInput":{"type":"object","properties":{"mode":{"type":"string","enum":["simplify","solve","scale"],"description":"Calculate — Options: simplify (Simplify a : b), solve (Solve a : b = c : ?), scale (Scale a : b by a factor)","default":"simplify"},"a":{"description":"A","type":"number","default":16},"b":{"description":"B","type":"number","default":9},"c":{"description":"C (or factor)","type":"number","default":1920}},"title":"Ratio Calculator input","description":"Simplify ratios, scale them, and solve for a missing value in a proportion.","additionalProperties":false},"RdCalculatorInput":{"type":"object","properties":{"monthly":{"description":"Monthly deposit","type":"number","minimum":100,"maximum":100000000,"default":5000},"rate":{"description":"Interest rate — Measured in % p.a..","type":"number","minimum":0.1,"maximum":25,"default":6.8},"months":{"description":"Term — Measured in months.","type":"number","minimum":6,"maximum":240,"default":60},"currency":{"type":"string","enum":["₹","$","€","£",""],"description":"Currency — Options: ₹ (Rupee ₹), $ (Dollar $), € (Euro €), £ (Pound £),  (No symbol)","default":"₹"}},"title":"RD Calculator input","description":"Work out what a monthly recurring deposit matures to, with quarterly compounding.","additionalProperties":false},"ReadabilityScorerInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["The quick brown fox jumps over the lazy dog. Pack my box with five dozen liquor jugs.\nSphinx of black quartz, judge my vow. How vexingly quick daft zebras jump!"]}},"title":"Readability Score Checker input","description":"Score text with Flesch, Gunning Fog, SMOG, Coleman-Liau and ARI, and see the reading age.","required":["text"],"additionalProperties":false},"RedirectGeneratorInput":{"type":"object","properties":{"from":{"type":"string","description":"From path"},"to":{"type":"string","description":"To path or URL"},"type":{"type":"string","enum":["nginx","apache","netlify","vercel","nextjs"],"description":"Server — Options: nginx (Nginx), apache (Apache (.htaccess)), netlify (Netlify (_redirects)), vercel (Vercel (vercel.json)), nextjs (Next.js (next.config))","default":"nginx"},"permanent":{"type":"boolean","description":"Permanent (301) — 301 transfers ranking signals; 302 does not.","default":true}},"title":"Redirect Rule Generator input","description":"Generate redirect rules for Apache, Nginx, Netlify, Vercel and Next.js.","required":["from","to"],"additionalProperties":false},"RegexExplainerInput":{"type":"object","properties":{"pattern":{"type":"string","description":"Pattern","examples":["^(\\d{3})-(\\w+)$"]},"flags":{"type":"string","description":"Flags"}},"title":"Regex Explainer input","description":"Break a regular expression into tokens and explain each one in plain English.","required":["pattern","flags"],"additionalProperties":false},"RegexTesterInput":{"type":"object","properties":{"pattern":{"type":"string","description":"Pattern","examples":["(\\w+)@(\\w+)\\.(\\w{2,})"]},"flags":{"type":"string","enum":["g","gi","gm","gim","gs",""],"description":"Flags — Options: g (g — global), gi (gi — global, case-insensitive), gm (gm — global, multiline), gim (gim — all three), gs (gs — global, dotAll),  (none — first match only)","default":"g"},"text":{"type":"string","description":"Test text — Multi-line text.","examples":["Contact ada@example.com or grace@navy.mil.\nInvalid: not-an-email, @nope.com"]}},"title":"Regex Tester input","description":"Test regular expressions against sample text and see every match with its capture groups.","required":["pattern","text"],"additionalProperties":false},"RemoveAccentsInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["Café, naïve, Zoë, jalapeño, Straße"]}},"title":"Remove Accents & Diacritics input","description":"Convert accented characters to plain ASCII — café becomes cafe, naïve becomes naive.","required":["text"],"additionalProperties":false},"RemoveDuplicateLinesInput":{"type":"object","properties":{"text":{"type":"string","description":"Lines — Multi-line text.","examples":["apple\nbanana\napple\ncherry\nbanana"]},"caseSensitive":{"type":"boolean","description":"Case sensitive","default":true},"keepOrder":{"type":"boolean","description":"Keep original order","default":true}},"title":"Remove Duplicate Lines input","description":"Delete repeated lines from a list, keeping the first occurrence of each unique line.","required":["text"],"additionalProperties":false},"RemoveLineBreaksInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["first line\nsecond line\nthird line"]},"separator":{"type":"string","enum":["space","none","comma","semicolon","pipe"],"description":"Join lines with — Options: space (A space), none (Nothing), comma (Comma + space), semicolon (Semicolon + space), pipe (Pipe)","default":"space"}},"title":"Remove Line Breaks input","description":"Turn multi-line text into a single line, joining with a space, comma or custom separator.","required":["text"],"additionalProperties":false},"RentVsBuyCalculatorInput":{"type":"object","properties":{"price":{"description":"Property price","type":"number","minimum":1,"maximum":1000000000,"default":350000},"deposit":{"description":"Deposit","type":"number","minimum":0,"maximum":1000000000,"default":35000},"rate":{"description":"Mortgage rate — Measured in %.","type":"number","minimum":0,"maximum":30,"default":5},"years":{"description":"Compare over — Measured in years.","type":"number","minimum":1,"maximum":40,"default":10},"rent":{"description":"Monthly rent","type":"number","minimum":0,"maximum":1000000,"default":1400},"growth":{"description":"Annual property growth — Measured in %.","type":"number","minimum":-10,"maximum":20,"default":3},"costs":{"description":"Yearly ownership costs — Maintenance, insurance and property tax. — Between 0 and 6 % of value.","type":"number","minimum":0,"maximum":6,"default":1.5},"invest":{"description":"Return if the deposit were invested — Measured in %.","type":"number","minimum":0,"maximum":25,"default":5},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Rent vs Buy Calculator input","description":"Compare the total cost of renting against buying over a period you choose.","additionalProperties":false},"RetirementWithdrawalCalculatorInput":{"type":"object","properties":{"pot":{"description":"Starting pot","type":"number","minimum":1,"maximum":10000000000,"default":500000},"rate":{"description":"Initial withdrawal rate — Measured in %.","type":"number","minimum":0.5,"maximum":20,"default":4},"years":{"description":"Model over — Measured in years.","type":"number","minimum":1,"maximum":60,"default":30},"returns":{"description":"Expected annual return — Measured in %.","type":"number","minimum":-5,"maximum":20,"default":6},"inflation":{"description":"Inflation — Withdrawals rise with inflation each year to keep spending power constant. — Measured in %.","type":"number","minimum":0,"maximum":20,"default":2.5},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Retirement Withdrawal Calculator input","description":"Model a safe withdrawal rate and see how long a pot lasts against inflation and returns.","additionalProperties":false},"RobotsTxtGeneratorInput":{"type":"object","properties":{"allowAll":{"type":"boolean","description":"Allow all crawlers by default","default":true},"blockAi":{"type":"boolean","description":"Block AI training crawlers — Blocks GPTBot, ClaudeBot, CCBot and Google-Extended.","default":false},"sitemap":{"type":"string","description":"Sitemap URL"},"disallow":{"type":"string","description":"Paths to disallow (one per line) — Multi-line text."},"crawlDelay":{"description":"Crawl delay — 0 to omit. Google ignores this directive. — Measured in seconds.","type":"number","minimum":0,"maximum":60,"default":0}},"title":"robots.txt Generator input","description":"Build a valid robots.txt file with sitemap references and crawler rules.","required":["sitemap","disallow"],"additionalProperties":false},"RoiCalculatorInput":{"type":"object","properties":{"initial":{"description":"Amount invested","type":"number","minimum":0.01,"default":10000},"final":{"description":"Final value","type":"number","minimum":0,"default":15000},"years":{"description":"Holding period — Measured in years.","type":"number","minimum":0.01,"maximum":100,"default":3}},"title":"ROI Calculator input","description":"Calculate return on investment and the annualised rate.","additionalProperties":false},"RomanNumeralConverterInput":{"type":"object","properties":{"value":{"type":"string","description":"Value","examples":["2026"]},"direction":{"type":"string","enum":["to-roman","to-number"],"description":"Direction — Options: to-roman (Number → Roman), to-number (Roman → Number)","default":"to-roman"}},"title":"Roman Numeral Converter input","description":"Convert numbers to roman numerals and roman numerals back to numbers, from 1 to 3999.","required":["value"],"additionalProperties":false},"Rot13RotnCipherInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["Hello, World!"]},"shift":{"description":"Shift — ROT13 is its own inverse: applying it twice returns the original. — Between 1 and 46.","type":"number","minimum":1,"maximum":46,"default":13},"alphabet":{"type":"string","enum":["letters","alphanumeric","ascii94"],"description":"Alphabet — Options: letters (A–Z only (ROT-N)), alphanumeric (A–Z and 0–9), ascii94 (All printable ASCII (ROT47))","default":"letters"}},"title":"ROT13 & ROT-N Cipher input","description":"Shift letters by any amount — ROT13, ROT47 and every rotation in between, with a full table.","required":["text"],"additionalProperties":false},"RunningPaceCalculatorInput":{"type":"object","properties":{"distance":{"description":"Distance","type":"number","minimum":0.1,"default":10},"unit":{"type":"string","enum":["km","mi"],"description":"Unit — Options: km (Kilometres), mi (Miles)","default":"km"},"hours":{"description":"Hours","type":"number","minimum":0,"maximum":99,"default":0},"minutes":{"description":"Minutes","type":"number","minimum":0,"maximum":59,"default":50},"seconds":{"description":"Seconds","type":"number","minimum":0,"maximum":59,"default":0}},"title":"Running Pace Calculator input","description":"Calculate your pace per kilometre or mile and project finish times for common races.","additionalProperties":false},"SalaryConverterInput":{"type":"object","properties":{"amount":{"description":"Amount","type":"number","minimum":0,"default":25},"from":{"type":"string","enum":["hourly","daily","weekly","monthly","annual"],"description":"This is my — Options: hourly (Hourly rate), daily (Daily rate), weekly (Weekly pay), monthly (Monthly pay), annual (Annual salary)","default":"hourly"},"hoursPerWeek":{"description":"Hours per week","type":"number","minimum":1,"maximum":168,"default":40},"weeksPerYear":{"description":"Working weeks per year — Use 48 if you take four weeks unpaid leave.","type":"number","minimum":1,"maximum":52,"default":52}},"title":"Salary Converter input","description":"Convert between hourly, daily, weekly, monthly and annual pay.","additionalProperties":false},"SampleApiResponseGeneratorInput":{"type":"object","properties":{"style":{"type":"string","enum":["rest-list","rest-single","envelope","jsonapi","graphql","cursor","error","problem"],"description":"Response style — Options: rest-list (REST — paginated collection), rest-single (REST — single resource), envelope (REST — success envelope), jsonapi (JSON:API), graphql (GraphQL data response), cursor (Cursor pagination), error (Error response), problem (RFC 9457 problem details)","default":"rest-list"},"resource":{"type":"string","enum":["users","employees","customers","products","orders","transactions","posts","events","iot","inventory","tickets","files"],"description":"Resource — Options: users (Users), employees (Employees), customers (Customers), products (Products), orders (Orders), transactions (Transactions), posts (Blog posts), events (Analytics events), iot (IoT sensor readings), inventory (Inventory), tickets (Support tickets), files (File records)","default":"users"},"count":{"description":"Items in this page — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":500,"default":5},"page":{"description":"Current page — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":10000,"default":1},"perPage":{"description":"Page size — Only applies for some combinations of the other fields.","type":"number","minimum":1,"maximum":500,"default":25},"total":{"description":"Total records — Only applies for some combinations of the other fields.","type":"number","minimum":0,"maximum":10000000,"default":137},"status":{"type":"string","enum":["400","401","403","404","409","422","429","500"],"description":"HTTP status — Options: 400 (400 Bad Request), 401 (401 Unauthorized), 403 (403 Forbidden), 404 (404 Not Found), 409 (409 Conflict), 422 (422 Unprocessable Entity), 429 (429 Too Many Requests), 500 (500 Internal Server Error) — Only applies for some combinations of the other fields.","default":"404"},"includeMeta":{"type":"boolean","description":"Include links and meta","default":true},"pretty":{"type":"boolean","description":"Pretty-print","default":true},"seed":{"type":"string","description":"Seed"}},"title":"Sample API Response Generator input","description":"Generate realistic REST, JSON:API, GraphQL and error-envelope responses with pagination.","required":["seed"],"additionalProperties":false},"SampleDatasetGeneratorInput":{"type":"object","properties":{"dataset":{"type":"string","enum":["users","employees","customers","products","orders","transactions","posts","events","iot","inventory","tickets","files"],"description":"Dataset — Twelve realistic, ready-to-use schemas. — Options: users (Users), employees (Employees), customers (Customers), products (Products), orders (Orders), transactions (Transactions), posts (Blog posts), events (Analytics events), iot (IoT sensor readings), inventory (Inventory), tickets (Support tickets), files (File records)","default":"orders"},"rows":{"description":"Rows","type":"number","minimum":1,"maximum":5000,"default":25},"format":{"type":"string","enum":["json","json-compact","ndjson","yaml","xml","csv","tsv","markdown","html","sql","sql-full","typescript","javascript","python"],"description":"Format — Options: json (JSON — array of objects), json-compact (JSON — minified), ndjson (NDJSON — one object per line), yaml (YAML), xml (XML), csv (CSV), tsv (TSV), markdown (Markdown table), html (HTML table), sql (SQL INSERT statements), sql-full (SQL — CREATE TABLE + INSERT), typescript (TypeScript — interface + const), javascript (JavaScript — export const), python (Python — list of dicts)","default":"csv"},"locale":{"type":"string","enum":["us","gb","de","fr","in","jp","mixed"],"description":"Locale — Options: us (United States (en-US)), gb (United Kingdom (en-GB)), de (Germany (de-DE)), fr (France (fr-FR)), in (India (en-IN)), jp (Japan (ja-JP)), mixed (Mixed — international)","default":"us"},"seed":{"type":"string","description":"Seed"},"includeHeader":{"type":"boolean","description":"Include header row — CSV and TSV only.","default":true}},"title":"Sample Dataset Generator input","description":"Download ready-made sample datasets — users, orders, products, transactions — as CSV, JSON, SQL or Excel-ready TSV.","required":["seed"],"additionalProperties":false},"SampleJsonGeneratorInput":{"type":"object","properties":{"schema":{"type":"string","description":"JSON Schema — Supports type, properties, items, required, enum, const, format, minimum/maximum, lengths, oneOf/anyOf/allOf and local $ref. — Multi-line text.","examples":["{\n  \"type\": \"object\",\n  \"required\": [\"id\", \"name\", \"email\"],\n  \"properties\": {\n    \"id\": { \"type\": \"integer\", \"minimum\": 1, \"maximum\": 9999 },\n    \"name\": { \"type\": \"string\" },\n    \"email\": { \"type\": \"string\", \"format\": \"email\" },\n    \"role\": { \"type\": \"string\", \"enum\": [\"admin\", \"editor\", \"viewer\"] },\n    \"active\": { \"type\": \"boolean\" },\n    \"createdAt\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"tags\": { \"type\": \"array\", \"items\": { \"type\": \"string\" }, \"maxItems\": 3 },\n    \"address\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"city\": { \"type\": \"string\" },\n        \"postcode\": { \"type\": \"string\" }\n      }\n    }\n  }\n}"],"contentMediaType":"application/json"},"count":{"description":"Documents","type":"number","minimum":1,"maximum":1000,"default":1},"arrayLen":{"description":"Items per array","type":"number","minimum":1,"maximum":50,"default":3},"maxDepth":{"description":"Maximum nesting depth","type":"number","minimum":1,"maximum":20,"default":6},"optionals":{"type":"boolean","description":"Always include optional properties — Turn off to randomly omit properties that are not in \"required\" — useful for testing tolerant parsers.","default":true},"wrap":{"type":"string","description":"Wrap in a key — Leave blank for a bare document or array."},"pretty":{"type":"boolean","description":"Pretty-print","default":true},"seed":{"type":"string","description":"Seed"}},"title":"Sample JSON Generator input","description":"Turn a JSON Schema into realistic sample documents, respecting types, enums, formats and constraints.","required":["schema","wrap","seed"],"additionalProperties":false},"SampleLogGeneratorInput":{"type":"object","properties":{"format":{"type":"string","enum":["combined","common","json","syslog","logfmt","app"],"description":"Log format — Options: combined (Apache / Nginx combined), common (Apache common), json (Structured JSON (one per line)), syslog (Syslog RFC 3164), logfmt (logfmt — key=value), app (Application log with levels)","default":"combined"},"lines":{"description":"Lines","type":"number","minimum":1,"maximum":100000,"default":100},"errorRate":{"description":"Error rate — Share of entries that are 4xx/5xx or ERROR level. — Between 0 and 100 %.","type":"integer","minimum":0,"maximum":100,"default":5},"ipCount":{"description":"Distinct client IPs — A small pool produces repeat visitors, which is what real traffic looks like.","type":"number","minimum":1,"maximum":5000,"default":20},"startDate":{"type":"string","description":"Start time"},"spanHours":{"description":"Time span — Measured in hours.","type":"number","minimum":0.1,"maximum":8760,"default":24},"seed":{"type":"string","description":"Seed"}},"title":"Sample Log File Generator input","description":"Generate realistic Apache, Nginx, JSON, syslog or application logs with a controllable error rate.","required":["startDate","seed"],"additionalProperties":false},"SampleMarkdownGeneratorInput":{"type":"object","properties":{"preset":{"type":"string","enum":["kitchen-sink","readme","article","changelog","docs"],"description":"Document type — Options: kitchen-sink (Kitchen sink — every feature), readme (Project README), article (Blog article), changelog (Changelog), docs (API documentation)","default":"kitchen-sink"},"sections":{"description":"Sections","type":"number","minimum":1,"maximum":50,"default":4},"headingDepth":{"description":"Maximum heading level","type":"number","minimum":1,"maximum":6,"default":3},"includeTables":{"type":"boolean","description":"Tables","default":true},"includeCode":{"type":"boolean","description":"Fenced code blocks","default":true},"includeImages":{"type":"boolean","description":"Images and links","default":true},"includeTasks":{"type":"boolean","description":"Task lists","default":true},"includeFootnotes":{"type":"boolean","description":"Footnotes and blockquotes","default":true},"seed":{"type":"string","description":"Seed"}},"title":"Sample Markdown Generator input","description":"Generate Markdown documents exercising every feature — tables, code, footnotes, task lists and more.","required":["seed"],"additionalProperties":false},"SamplePersonGeneratorInput":{"type":"object","properties":{"count":{"description":"How many people","type":"number","minimum":1,"maximum":500,"default":3},"locale":{"type":"string","enum":["us","gb","de","fr","in","jp","mixed"],"description":"Nationality — Options: us (United States (en-US)), gb (United Kingdom (en-GB)), de (Germany (de-DE)), fr (France (fr-FR)), in (India (en-IN)), jp (Japan (ja-JP)), mixed (Mixed — international)","default":"us"},"detail":{"type":"string","enum":["minimal","standard","full"],"description":"Detail level — Options: minimal (Minimal — name and email), standard (Standard — contact and location), full (Full — work, finance, bio and avatar)","default":"standard"},"format":{"type":"string","enum":["cards","json","csv","yaml","sql"],"description":"Output — Options: cards (Readable profile cards), json (JSON), csv (CSV), yaml (YAML), sql (SQL INSERT)","default":"cards"},"seed":{"type":"string","description":"Seed"}},"title":"Random Person Generator input","description":"Generate complete fake personas — name, email, address, phone, job, company, bio and avatar.","required":["seed"],"additionalProperties":false},"SampleSqlGeneratorInput":{"type":"object","properties":{"dataset":{"type":"string","enum":["users","employees","customers","products","orders","transactions","posts","events","iot","inventory","tickets","files"],"description":"Table — Options: users (Users), employees (Employees), customers (Customers), products (Products), orders (Orders), transactions (Transactions), posts (Blog posts), events (Analytics events), iot (IoT sensor readings), inventory (Inventory), tickets (Support tickets), files (File records)","default":"users"},"dialect":{"type":"string","enum":["postgres","mysql","sqlite","mssql"],"description":"SQL dialect — Options: postgres (PostgreSQL), mysql (MySQL / MariaDB), sqlite (SQLite), mssql (SQL Server)","default":"postgres"},"rows":{"description":"Rows","type":"number","minimum":1,"maximum":5000,"default":20},"batchSize":{"description":"Rows per INSERT — Above 1, rows are combined into multi-value inserts — far faster to load.","type":"number","minimum":1,"maximum":1000,"default":1},"locale":{"type":"string","enum":["us","gb","de","fr","in","jp","mixed"],"description":"Locale — Options: us (United States (en-US)), gb (United Kingdom (en-GB)), de (Germany (de-DE)), fr (France (fr-FR)), in (India (en-IN)), jp (Japan (ja-JP)), mixed (Mixed — international)","default":"us"},"tableName":{"type":"string","description":"Table name"},"seed":{"type":"string","description":"Seed"},"includeDdl":{"type":"boolean","description":"Include CREATE TABLE","default":true},"dropFirst":{"type":"boolean","description":"Add DROP TABLE IF EXISTS","default":false},"transaction":{"type":"boolean","description":"Wrap in a transaction","default":false}},"title":"Sample SQL Data Generator input","description":"Generate CREATE TABLE and INSERT statements with realistic seed data for four SQL dialects.","required":["tableName","seed"],"additionalProperties":false},"SavingsGoalCalculatorInput":{"type":"object","properties":{"target":{"description":"Savings goal","type":"number","minimum":1,"default":20000},"current":{"description":"Already saved","type":"number","minimum":0,"default":2500},"monthly":{"description":"Monthly contribution","type":"number","minimum":0,"default":400},"rate":{"description":"Annual return — Measured in %.","type":"number","minimum":0,"maximum":50,"default":3}},"title":"Savings Goal Calculator input","description":"Work out how long it takes to reach a savings target, and what to save monthly.","additionalProperties":false},"SchemaMarkupGeneratorInput":{"type":"object","properties":{"type":{"type":"string","enum":["Organization","LocalBusiness","Article","Product","FAQPage","BreadcrumbList","WebSite"],"description":"Schema type — Options: Organization, LocalBusiness (Local Business), Article, Product, FAQPage (FAQ Page), BreadcrumbList (Breadcrumb), WebSite (Website + Sitelinks Search)","default":"Organization"},"name":{"type":"string","description":"Name or headline"},"url":{"type":"string","description":"URL"},"description":{"type":"string","description":"Description — Multi-line text."},"extra":{"type":"string","description":"Extra data — Multi-line text."}},"title":"Schema Markup Generator input","description":"Generate JSON-LD structured data for organisations, articles, FAQs, products and more.","required":["name","url","description","extra"],"additionalProperties":false},"ScientificNotationConverterInput":{"type":"object","properties":{"value":{"type":"string","description":"Value","examples":["0.00042"]},"direction":{"type":"string","enum":["to-scientific","to-decimal"],"description":"Convert — Options: to-scientific (Decimal → Scientific), to-decimal (Scientific → Decimal)","default":"to-scientific"},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":20,"default":6}},"title":"Scientific Notation Converter input","description":"Convert between standard decimal numbers and scientific or engineering notation.","required":["value"],"additionalProperties":false},"SecretSantaGeneratorInput":{"type":"object","properties":{"people":{"type":"string","description":"Participants — Multi-line text.","examples":["Ada\nGrace\nAlan\nKatherine\nMargaret\nJoan"]},"exclusions":{"type":"string","description":"Exclusions — Pairs who must not be assigned to each other — typically couples. One pair per line. — Multi-line text."},"seed":{"type":"string","description":"Seed"}},"title":"Secret Santa Generator input","description":"Draw gift assignments where nobody gets themselves, with exclusions for couples.","required":["people","exclusions","seed"],"additionalProperties":false},"SemverCheckerInput":{"type":"object","properties":{"versions":{"type":"string","description":"Versions — Multi-line text.","examples":["1.0.0\n1.2.3\n1.9.9\n2.0.0\n2.0.0-beta.1\n0.9.0"]},"range":{"type":"string","description":"Range — Supports ^ ~ >= > <= < = || and x wildcards.","examples":["^1.2.0"]},"operation":{"type":"string","enum":["satisfies","sort","compare"],"description":"Do — Options: satisfies (Test which versions satisfy the range), sort (Sort by precedence), compare (Compare each to the first)","default":"satisfies"}},"title":"Semantic Version Checker input","description":"Test versions against a range, sort by precedence, or compare two releases.","required":["versions","range"],"additionalProperties":false},"SentenceSplitterInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["Dr. Smith arrived at 3.30 p.m. He was late. The meeting had already started, e.g. the budget item was done."]},"numbered":{"type":"boolean","description":"Number each sentence","default":false},"blank":{"type":"boolean","description":"Blank line between sentences","default":false},"minWords":{"description":"Merge sentences under — Fragments shorter than this are joined to the previous sentence. 0 disables it. — Measured in words.","type":"number","minimum":0,"maximum":20,"default":0}},"title":"Sentence Splitter input","description":"Break a paragraph into one sentence per line, handling abbreviations and decimals correctly.","required":["text"],"additionalProperties":false},"SerpPreviewInput":{"type":"object","properties":{"title":{"type":"string","description":"Title tag"},"url":{"type":"string","description":"URL"},"description":{"type":"string","description":"Meta description — Multi-line text."},"device":{"type":"string","enum":["desktop","mobile"],"description":"Device — Options: desktop (Desktop), mobile (Mobile)","default":"desktop"}},"title":"Google SERP Preview input","description":"Preview how your page title and description will appear in Google search results.","required":["title","url","description"],"additionalProperties":false},"ShoeSizeConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["mm","cm","us_men","us_women","uk","eu","jp"],"description":"From — Options: mm (Foot Length (mm) (mm)), cm (Foot Length (cm) (cm)), us_men (US Men's (US M)), us_women (US Women's (US W)), uk (UK (UK)), eu (EU (EU)), jp (Japan (cm) (JP))","default":"us_men"},"to":{"type":"string","enum":["mm","cm","us_men","us_women","uk","eu","jp"],"description":"To — Options: mm (Foot Length (mm) (mm)), cm (Foot Length (cm) (cm)), us_men (US Men's (US M)), us_women (US Women's (US W)), uk (UK (UK)), eu (EU (EU)), jp (Japan (cm) (JP))","default":"eu"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":3}},"title":"Shoe Size Converter input","description":"Convert shoe size between 7 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"SimpleInterestCalculatorInput":{"type":"object","properties":{"principal":{"description":"Principal","type":"number","minimum":0,"default":10000},"rate":{"description":"Annual rate — Measured in %.","type":"number","minimum":0,"maximum":100,"default":5},"years":{"description":"Time — Measured in years.","type":"number","minimum":0,"maximum":100,"default":5}},"title":"Simple Interest Calculator input","description":"Calculate simple interest and see how it differs from compound interest.","additionalProperties":false},"SipCalculatorInput":{"type":"object","properties":{"monthly":{"description":"Monthly investment","type":"number","minimum":1,"maximum":10000000,"default":500},"rate":{"description":"Expected annual return — Measured in %.","type":"number","minimum":0,"maximum":60,"default":12},"years":{"description":"Period — Measured in years.","type":"number","minimum":1,"maximum":60,"default":15},"step":{"description":"Annual step-up — Increase the monthly amount each year to keep pace with income. — Between 0 and 25 %.","type":"number","minimum":0,"maximum":25,"default":0},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"SIP Calculator input","description":"Project a monthly investment plan, with optional annual step-up and the invested-versus-gain split.","additionalProperties":false},"SitemapGeneratorInput":{"type":"object","properties":{"urls":{"type":"string","description":"URLs (one per line) — Multi-line text.","examples":["https://example.com/\nhttps://example.com/about\nhttps://example.com/blog"]},"changefreq":{"type":"string","enum":["","always","hourly","daily","weekly","monthly","yearly"],"description":"Change frequency — Options:  (Omit), always (Always), hourly (Hourly), daily (Daily), weekly (Weekly), monthly (Monthly), yearly (Yearly)","default":"weekly"},"priority":{"description":"Priority","type":"number","minimum":0,"maximum":1,"default":0.8}},"title":"XML Sitemap Generator input","description":"Turn a list of URLs into a valid XML sitemap ready to submit to search engines.","required":["urls"],"additionalProperties":false},"SleepCalculatorInput":{"type":"object","properties":{"wakeTime":{"type":"string","description":"Time — 24-hour format","examples":["07:00"]},"mode":{"type":"string","enum":["wake","sleep"],"description":"I want to — Options: wake (Wake up at this time), sleep (Go to bed at this time)","default":"wake"}},"title":"Sleep Cycle Calculator input","description":"Find the best times to sleep or wake based on 90-minute sleep cycles.","required":["wakeTime"],"additionalProperties":false},"SlugGeneratorInput":{"type":"object","properties":{"text":{"type":"string","description":"Title or text — Multi-line text.","examples":["How to Convert PNG to JPG — 2026 Guide!"]},"separator":{"type":"string","enum":["-","_"],"description":"Word separator — Options: - (Hyphen (-)), _ (Underscore (_))","default":"-"},"lowercase":{"type":"boolean","description":"Lowercase","default":true},"maxLength":{"description":"Max length","type":"number","minimum":10,"maximum":300,"default":80}},"title":"URL Slug Generator input","description":"Turn any title into a clean, SEO-friendly URL slug with accents stripped and symbols removed.","required":["text"],"additionalProperties":false},"SocialCharacterCounterInput":{"type":"object","properties":{"text":{"type":"string","description":"Your post — Multi-line text."},"platform":{"type":"string","enum":["x","bluesky","instagram","linkedin","facebook","threads","youtube-title","meta-description","sms"],"description":"Platform — Options: x (X / Twitter — 280), bluesky (Bluesky — 300), instagram (Instagram caption — 2,200), linkedin (LinkedIn post — 3,000), facebook (Facebook post — 63,206), threads (Threads — 500), youtube-title (YouTube title — 100), meta-description (Meta description — 158), sms (SMS — 160)","default":"x"}},"title":"Social Media Character Counter input","description":"Count characters against the limits for X, Instagram, LinkedIn, Bluesky and more.","required":["text"],"additionalProperties":false},"SpeedConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["ms","kmh","mph","fts","kn","mach","c"],"description":"From — Options: ms (Metres per Second (m/s)), kmh (Kilometres per Hour (km/h)), mph (Miles per Hour (mph)), fts (Feet per Second (ft/s)), kn (Knots (kn)), mach (Mach (at sea level) (M)), c (Speed of Light (c))","default":"kmh"},"to":{"type":"string","enum":["ms","kmh","mph","fts","kn","mach","c"],"description":"To — Options: ms (Metres per Second (m/s)), kmh (Kilometres per Hour (km/h)), mph (Miles per Hour (mph)), fts (Feet per Second (ft/s)), kn (Knots (kn)), mach (Mach (at sea level) (M)), c (Speed of Light (c))","default":"mph"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Speed Converter input","description":"Convert speed between 7 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"SqlFormatterInput":{"type":"object","properties":{"input":{"type":"string","description":"SQL — Multi-line text.","examples":["select u.id, u.name, count(o.id) as orders from users u left join orders o on o.user_id = u.id where u.active = 1 group by u.id, u.name having count(o.id) > 3 order by orders desc limit 10;"],"contentMediaType":"application/sql"},"dialect":{"type":"string","enum":["sql","mysql","postgresql","sqlite","transactsql","bigquery","mariadb","snowflake"],"description":"Dialect — Options: sql (Standard SQL), mysql (MySQL), postgresql (PostgreSQL), sqlite (SQLite), transactsql (SQL Server), bigquery (BigQuery), mariadb (MariaDB), snowflake (Snowflake)","default":"sql"},"uppercase":{"type":"boolean","description":"Uppercase keywords","default":true}},"title":"SQL Formatter input","description":"Format and indent SQL queries for MySQL, PostgreSQL, SQLite, SQL Server and BigQuery.","required":["input"],"additionalProperties":false},"SqlInClauseBuilderInput":{"type":"object","properties":{"values":{"type":"string","description":"Values — One per line, or paste a comma-separated list. — Multi-line text.","examples":["1024\n2048\n4096\n8192"]},"column":{"type":"string","description":"Column"},"type":{"type":"string","enum":["auto","number","string"],"description":"Value type — Options: auto (Detect automatically), number (Numbers — unquoted), string (Strings — quoted)","default":"auto"},"operator":{"type":"string","enum":["IN","NOT IN"],"description":"Operator — Options: IN, NOT IN","default":"IN"},"batch":{"description":"Split into batches of — Oracle caps IN lists at 1,000. 0 means no batching.","type":"number","minimum":0,"maximum":10000,"default":0}},"title":"SQL IN Clause Builder input","description":"Turn a pasted column of values into a safely quoted SQL IN clause, batched if needed.","required":["values","column"],"additionalProperties":false},"StatisticsCalculatorInput":{"type":"object","properties":{"numbers":{"type":"string","description":"Numbers — Multi-line text.","examples":["12, 15, 11, 18, 15, 22, 15, 9, 17, 14"]}},"title":"Mean, Median & Mode Calculator input","description":"Calculate mean, median, mode, range, variance and standard deviation from a list of numbers.","required":["numbers"],"additionalProperties":false},"StringByteCounterInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["Héllo 👨‍👩‍👧 世界"]}},"title":"String Byte Size Calculator input","description":"Measure text in UTF-8, UTF-16 and UTF-32 bytes, code points and grapheme clusters.","required":["text"],"additionalProperties":false},"StringEscaperInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["He said \"hello\"\nLine two\tTabbed"]},"mode":{"type":"string","enum":["json","unescape-json","csv","sql","xml","shell","regex"],"description":"Format — Options: json (JSON / JavaScript), unescape-json (Unescape JSON), csv (CSV field), sql (SQL (single quotes)), xml (XML / HTML), shell (Shell (POSIX)), regex (Regular expression)","default":"json"}},"title":"String Escaper & Unescaper input","description":"Escape strings for JSON, JavaScript, CSV, SQL, XML or shell — and unescape them again.","required":["text"],"additionalProperties":false},"SubtitleConverterInput":{"type":"object","properties":{"subtitles":{"type":"string","description":"Subtitle file — The format is detected automatically — SRT, WebVTT, ASS/SSA or MicroDVD. — Multi-line text.","examples":["1\n00:00:01,000 --> 00:00:04,000\nWelcome to the demonstration.\n\n2\n00:00:04,500 --> 00:00:08,250\nThis subtitle appears a little later,\nand runs across two lines.\n\n3\n00:00:09,000 --> 00:00:12,000\nThe last cue."]},"target":{"type":"string","enum":["srt","vtt","ass","txt","txtTimed"],"description":"Convert to — Options: srt (SRT — SubRip, the most widely supported), vtt (WebVTT — required by HTML5 <track>), ass (ASS — Advanced SubStation Alpha), txt (Plain text — transcript), txtTimed (Plain text with timestamps)","default":"vtt"},"renumber":{"type":"boolean","description":"Renumber cues sequentially","default":true},"stripFormatting":{"type":"boolean","description":"Remove styling tags — Strips <i>, <b>, {\\an8} and similar.","default":false}},"title":"Subtitle Converter input","description":"Convert between SRT, WebVTT, ASS/SSA, MicroDVD and plain text.","required":["subtitles"],"additionalProperties":false},"SubtitleMergerInput":{"type":"object","properties":{"first":{"type":"string","description":"First subtitle file — Multi-line text.","examples":["1\n00:00:01,000 --> 00:00:04,000\nWelcome to the demonstration.\n\n2\n00:00:04,500 --> 00:00:08,250\nThis subtitle appears a little later,\nand runs across two lines.\n\n3\n00:00:09,000 --> 00:00:12,000\nThe last cue."]},"second":{"type":"string","description":"Second subtitle file — Multi-line text.","examples":["1\n00:00:01,000 --> 00:00:04,000\nBienvenue à la démonstration.\n\n2\n00:00:04,500 --> 00:00:08,250\nCe sous-titre apparaît un peu plus tard."]},"mode":{"type":"string","enum":["bilingual","append","interleave"],"description":"Combine by — Options: bilingual (Bilingual — stack both languages in each cue), append (Append — play the second file after the first), interleave (Interleave — merge by timestamp)","default":"bilingual"},"offset":{"description":"Offset for the second file — Measured in ms. — Only applies for some combinations of the other fields.","type":"number","minimum":-86400000,"maximum":86400000,"default":0},"separator":{"type":"string","description":"Separator between languages — Only applies for some combinations of the other fields."}},"title":"Subtitle Merger input","description":"Join two subtitle files end to end, or stack two languages into bilingual cues.","required":["first","second"],"additionalProperties":false},"SubtitleQualityCheckerInput":{"type":"object","properties":{"subtitles":{"type":"string","description":"Subtitle file — Multi-line text.","examples":["1\n00:00:01,000 --> 00:00:04,000\nWelcome to the demonstration.\n\n2\n00:00:04,500 --> 00:00:08,250\nThis subtitle appears a little later,\nand runs across two lines.\n\n3\n00:00:09,000 --> 00:00:12,000\nThe last cue."]},"cps":{"description":"Maximum reading speed — BBC uses 160–180 words per minute, roughly 17 characters per second. — Measured in chars/sec.","type":"number","minimum":5,"maximum":40,"default":17},"maxChars":{"description":"Maximum characters per line","type":"number","minimum":20,"maximum":100,"default":42},"maxLines":{"description":"Maximum lines per cue","type":"number","minimum":1,"maximum":5,"default":2},"minDuration":{"description":"Minimum cue duration — Measured in ms.","type":"number","minimum":200,"maximum":5000,"default":1000}},"title":"Subtitle Quality Checker input","description":"Check subtitles against broadcast standards for reading speed, line length and duration.","required":["subtitles"],"additionalProperties":false},"SubtitleShifterInput":{"type":"object","properties":{"subtitles":{"type":"string","description":"Subtitle file — Multi-line text.","examples":["1\n00:00:01,000 --> 00:00:04,000\nWelcome to the demonstration.\n\n2\n00:00:04,500 --> 00:00:08,250\nThis subtitle appears a little later,\nand runs across two lines.\n\n3\n00:00:09,000 --> 00:00:12,000\nThe last cue."]},"mode":{"type":"string","enum":["shift","scale","both"],"description":"Correction — A constant offset needs a shift. Drift that worsens over time is a frame-rate mismatch and needs stretching. — Options: shift (Shift — subtitles are consistently early or late), scale (Stretch — drift grows through the file), both (Shift and stretch)","default":"shift"},"shift":{"description":"Shift by — Negative moves subtitles earlier.","type":"number","minimum":-3600000,"maximum":3600000,"default":0},"unit":{"type":"string","enum":["ms","s","frames"],"description":"Units — Options: ms (Milliseconds), s (Seconds), frames (Frames at 25 fps)","default":"ms"},"scale":{"description":"Speed factor — 23.976 to 25 fps is 1.0427. 25 to 23.976 is 0.9590. — Only applies for some combinations of the other fields.","type":"number","minimum":0.5,"maximum":2,"default":1},"from":{"description":"Apply from cue — Leave at 1 to correct the whole file.","type":"number","minimum":1,"maximum":100000,"default":1}},"title":"Subtitle Sync & Shifter input","description":"Fix out-of-sync subtitles by shifting every cue, or stretching them for a frame-rate change.","required":["subtitles"],"additionalProperties":false},"SunriseSunsetCalculatorInput":{"type":"object","properties":{"lat":{"description":"Latitude — Positive north, negative south. — Measured in °.","type":"number","minimum":-90,"maximum":90,"default":51.5074},"lng":{"description":"Longitude — Positive east, negative west. — Measured in °.","type":"number","minimum":-180,"maximum":180,"default":-0.1278},"date":{"type":"string","description":"Date"},"zone":{"type":"string","enum":["UTC","America/Los_Angeles","America/Denver","America/Chicago","America/New_York","America/Sao_Paulo","Europe/London","Europe/Dublin","Europe/Paris","Europe/Berlin","Europe/Madrid","Europe/Warsaw","Europe/Moscow","Africa/Lagos","Africa/Johannesburg","Asia/Dubai","Asia/Karachi","Asia/Kolkata","Asia/Dhaka","Asia/Bangkok","Asia/Singapore","Asia/Shanghai","Asia/Tokyo","Asia/Seoul","Australia/Perth","Australia/Sydney","Pacific/Auckland"],"description":"Show times in — One of 27 values, e.g. UTC, America/Los_Angeles, America/Denver, America/Chicago, America/New_York, America/Sao_Paulo, Europe/London, Europe/Dublin, Europe/Paris, Europe/Berlin, Europe/Madrid, Europe/Warsaw, Europe/Moscow, Africa/Lagos, Africa/Johannesburg, Asia/Dubai, Asia/Karachi, Asia/Kolkata, Asia/Dhaka, Asia/Bangkok, Asia/Singapore, Asia/Shanghai, Asia/Tokyo, Asia/Seoul…","default":"UTC"}},"title":"Sunrise & Sunset Calculator input","description":"Calculate sunrise, sunset, twilight and day length for any latitude and longitude.","required":["date"],"additionalProperties":false},"TableToMarkdownInput":{"type":"object","properties":{"input":{"type":"string","description":"Data — Paste directly from a spreadsheet — the tab delimiter is detected automatically. — Multi-line text.","examples":["id,name,email,city,amount\n1,Ada Lovelace,ada@example.com,London,240.50\n2,Grace Hopper,grace@example.com,New York,1120.00\n3,Alan Turing,alan@example.com,Manchester,85.25\n4,Ada Lovelace,ada@example.com,London,240.50\n5,Katherine Johnson,katherine@example.com,Hampton,610.75"]},"delimiter":{"type":"string","enum":["auto",",","\t",";","|"],"description":"Delimiter — Options: auto (Detect automatically), , (Comma), \t (Tab), ; (Semicolon), | (Pipe)","default":"auto"},"align":{"type":"string","enum":["auto","left","right","center"],"description":"Alignment — Options: auto (Auto — numbers right, text left), left (All left), right (All right), center (All centred)","default":"auto"},"header":{"type":"boolean","description":"First row is a header","default":true},"compact":{"type":"boolean","description":"Compact — do not pad columns — Smaller output, but the raw Markdown is harder to read.","default":false}},"title":"CSV to Markdown Table input","description":"Turn CSV, TSV or pasted spreadsheet data into a Markdown, HTML or reStructuredText table.","required":["input"],"additionalProperties":false},"TabsSpacesConverterInput":{"type":"object","properties":{"text":{"type":"string","description":"Code — Multi-line text.","examples":["function example() {\n\tif (true) {\n\t\treturn 1;\n\t}\n}"],"contentMediaType":"text/javascript"},"direction":{"type":"string","enum":["tabsToSpaces","spacesToTabs"],"description":"Convert — Options: tabsToSpaces (Tabs to spaces), spacesToTabs (Spaces to tabs)","default":"tabsToSpaces"},"width":{"description":"Tab width — Measured in spaces.","type":"number","minimum":1,"maximum":16,"default":2},"smart":{"type":"boolean","description":"Only convert leading indentation — Leaves tabs and spaces inside a line alone, so aligned comments survive.","default":true}},"title":"Tabs to Spaces Converter input","description":"Convert indentation between tabs and spaces without disturbing alignment inside lines.","required":["text"],"additionalProperties":false},"TailwindShadeGeneratorInput":{"type":"object","properties":{"base":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Brand colour — This becomes the 500 shade. — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"},"name":{"type":"string","description":"Colour name"}},"title":"Tailwind Colour Shade Generator input","description":"Generate a full 50–950 Tailwind colour scale from a single brand colour.","required":["name"],"additionalProperties":false},"TemperatureConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["c","f","k","r","re"],"description":"From — Options: c (Celsius (°C)), f (Fahrenheit (°F)), k (Kelvin (K)), r (Rankine (°R)), re (Réaumur (°Ré))","default":"c"},"to":{"type":"string","enum":["c","f","k","r","re"],"description":"To — Options: c (Celsius (°C)), f (Fahrenheit (°F)), k (Kelvin (K)), r (Rankine (°R)), re (Réaumur (°Ré))","default":"f"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":4}},"title":"Temperature Converter input","description":"Convert temperature between 5 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"TemperatureTopPVisualizerInput":{"type":"object","properties":{"logits":{"type":"string","description":"Logits — Raw model outputs before softmax. Any scale works — only the differences matter. — Multi-line text.","examples":["the: 8.4\na: 7.9\nan: 6.1\nthis: 5.8\nour: 4.2\nsome: 3.7\nevery: 2.1\nno: 1.4\nzero: -0.5\nbanana: -3.2"]},"temperature":{"description":"Temperature — 0 is greedy — always the top token. Above 1 flattens the distribution and lets unlikely tokens through. — Between 0 and 2.","type":"number","minimum":0,"maximum":2,"default":1},"topP":{"description":"Top-p (nucleus) — Keeps the smallest set of tokens whose probabilities sum to p. — Between 0.01 and 1.","type":"number","minimum":0.01,"maximum":1,"default":1},"topK":{"description":"Top-k — Keeps only the k most likely tokens. 0 disables it.","type":"number","minimum":0,"maximum":200,"default":0},"minP":{"description":"Min-p — Drops tokens below this fraction of the top token's probability. Scales with confidence, unlike top-p. — Between 0 and 0.5.","type":"number","minimum":0,"maximum":0.5,"default":0},"repetitionPenalty":{"description":"Repetition penalty — Divides the logit of tokens assumed already used — here, the top three. — Between 1 and 2.","type":"number","minimum":1,"maximum":2,"default":1}},"title":"Temperature & Top-p Visualizer input","description":"Watch sampling parameters change which tokens can actually be chosen, on a real softmax over logits you supply.","required":["logits"],"additionalProperties":false},"TestCreditCardGeneratorInput":{"type":"object","properties":{"count":{"description":"How many cards","type":"number","minimum":1,"maximum":200,"default":5},"brand":{"type":"string","enum":["any","visa","mastercard","amex","discover","jcb","diners","unionpay"],"description":"Card brand — Options: any (Any brand), visa (Visa), mastercard (Mastercard), amex (American Express), discover (Discover), jcb (JCB), diners (Diners Club), unionpay (UnionPay)","default":"visa"},"format":{"type":"string","enum":["fields","plain","json","csv"],"description":"Output — Options: fields (Table with expiry and CVV), plain (Numbers only, one per line), json (JSON), csv (CSV)","default":"fields"},"separator":{"type":"string","enum":["space","none","dash"],"description":"Digit grouping — Options: space (Grouped — 4539 1488 0343 6467), none (Unformatted — 4539148803436467), dash (Dashed — 4539-1488-0343-6467)","default":"space"},"seed":{"type":"string","description":"Seed"},"includeCvv":{"type":"boolean","description":"Include CVV and expiry","default":true},"includeHolder":{"type":"boolean","description":"Include cardholder name","default":false}},"title":"Test Credit Card Number Generator input","description":"Generate Luhn-valid test card numbers for seven brands. Structurally correct, deliberately non-functional.","required":["seed"],"additionalProperties":false},"TextCleanerInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["“Smart quotes” and — dashes… plus ﬁ ligatures and a zero​width space."]},"quotes":{"type":"boolean","description":"Straighten quotes and apostrophes","default":true},"dashes":{"type":"boolean","description":"Convert en and em dashes to hyphens","default":true},"ellipsis":{"type":"boolean","description":"Expand ellipsis to three dots","default":true},"ligatures":{"type":"boolean","description":"Split ligatures (ﬁ → fi)","default":true},"invisible":{"type":"boolean","description":"Remove invisible characters — Zero-width spaces, soft hyphens, bidi marks and non-breaking spaces.","default":true},"spaces":{"type":"boolean","description":"Collapse repeated spaces and blank lines","default":true},"accents":{"type":"boolean","description":"Remove accents (café → cafe)","default":false}},"title":"Text Cleaner input","description":"Strip smart quotes, invisible characters, ligatures and stray whitespace pasted from Word or a PDF.","required":["text"],"additionalProperties":false},"TextPadderInput":{"type":"object","properties":{"text":{"type":"string","description":"Lines — Multi-line text.","examples":["one\ntwo\nthree\nfour"]},"width":{"description":"Pad to width — Measured in chars.","type":"number","minimum":1,"maximum":500,"default":12},"character":{"type":"string","description":"Pad with — Leave blank for spaces. Multi-character patterns repeat."},"side":{"type":"string","enum":["right","left","both"],"description":"Pad on the — Options: right (Right — left aligned), left (Left — right aligned), both (Both — centred)","default":"right"},"truncate":{"type":"boolean","description":"Truncate lines longer than the width","default":false}},"title":"Text Padding Tool input","description":"Pad every line to a fixed width with any character, on the left, right or both sides.","required":["text","character"],"additionalProperties":false},"TextRepeaterInput":{"type":"object","properties":{"text":{"type":"string","description":"Text to repeat — Multi-line text.","examples":["Hello"]},"times":{"description":"Repeat count","type":"number","minimum":1,"maximum":10000,"default":5},"separator":{"type":"string","enum":["newline","space","none","comma"],"description":"Separate with — Options: newline (New line), space (Space), none (Nothing), comma (Comma)","default":"newline"}},"title":"Text Repeater input","description":"Repeat any text a set number of times, separated by newlines, spaces or nothing.","required":["text"],"additionalProperties":false},"TextReverserInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["Hello World"]},"mode":{"type":"string","enum":["characters","words","lines"],"description":"Reverse by — Options: characters (Characters), words (Words), lines (Lines)","default":"characters"}},"title":"Text Reverser input","description":"Reverse text by character, word or line — useful for puzzles, testing and mirrored strings.","required":["text"],"additionalProperties":false},"TextShadowGeneratorInput":{"type":"object","properties":{"text":{"type":"string","description":"Preview text"},"x":{"description":"Horizontal offset — Measured in px.","type":"number","minimum":-50,"maximum":50,"default":2},"y":{"description":"Vertical offset — Measured in px.","type":"number","minimum":-50,"maximum":50,"default":2},"blur":{"description":"Blur radius — Measured in px.","type":"number","minimum":0,"maximum":80,"default":4},"color":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Shadow colour — A CSS hex colour, e.g. #3366ff.","default":"#6366f1"},"opacity":{"description":"Opacity — Between 0 and 100 %.","type":"number","minimum":0,"maximum":100,"default":45},"size":{"description":"Font size — Measured in px.","type":"number","minimum":12,"maximum":140,"default":48}},"title":"CSS Text Shadow Generator input","description":"Design text shadows, outlines and glow effects with a live preview.","required":["text"],"additionalProperties":false},"TextShufflerInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["alpha\nbravo\ncharlie\ndelta\necho"]},"unit":{"type":"string","enum":["lines","words","sentences","characters","paragraphs"],"description":"Shuffle — Options: lines (Lines), words (Words), sentences (Sentences), characters (Characters within each word), paragraphs (Paragraphs)","default":"lines"},"seed":{"type":"string","description":"Seed"},"preserveCase":{"type":"boolean","description":"Keep first and last letters in place — Character mode only — produces the readable-scrambled-word effect.","default":false}},"title":"Text Shuffler input","description":"Randomly reorder lines, words, sentences or characters, with a seed for repeatable results.","required":["text","seed"],"additionalProperties":false},"TextSimilarityCheckerInput":{"type":"object","properties":{"a":{"type":"string","description":"First text — Multi-line text.","examples":["The quick brown fox jumps over the lazy dog"]},"b":{"type":"string","description":"Second text — Multi-line text.","examples":["The quick brown cat leaps over the lazy dog"]}},"title":"Text Similarity Checker input","description":"Compare two texts with Levenshtein distance, Jaccard, cosine and Dice coefficients.","required":["a","b"],"additionalProperties":false},"TextStatisticsInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["the quick brown fox jumps over the lazy dog the fox runs"]},"mode":{"type":"string","enum":["word","char","line","bigram"],"description":"Count by — Options: word (Words), char (Characters), line (Lines), bigram (Two-word phrases)","default":"word"}},"title":"Word & Character Frequency Counter input","description":"Count how often each word, character or line appears in your text.","required":["text"],"additionalProperties":false},"TextTruncatorInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["The quick brown fox jumps over the lazy dog. Pack my box with five dozen liquor jugs.\nSphinx of black quartz, judge my vow. How vexingly quick daft zebras jump!"]},"mode":{"type":"string","enum":["characters","words","sentences"],"description":"Limit by — Options: characters (Characters), words (Words), sentences (Sentences)","default":"characters"},"limit":{"description":"Limit","type":"number","minimum":1,"maximum":100000,"default":120},"suffix":{"type":"string","description":"Append — Added only when the text was actually shortened."},"wholeWords":{"type":"boolean","description":"Never cut a word in half","default":true},"perLine":{"type":"boolean","description":"Truncate each line separately","default":false}},"title":"Text Truncator input","description":"Shorten text to a character, word or sentence limit without cutting words in half.","required":["text","suffix"],"additionalProperties":false},"TextWrapperInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["The quick brown fox jumps over the lazy dog and keeps running across the field without stopping for anything at all."]},"mode":{"type":"string","enum":["wrap","truncate","unwrap"],"description":"Mode — Options: wrap (Wrap at width), truncate (Truncate to length), unwrap (Unwrap — join wrapped lines)","default":"wrap"},"width":{"description":"Width — Measured in chars.","type":"number","minimum":10,"maximum":500,"default":72}},"title":"Text Wrap & Truncate input","description":"Hard-wrap text at a line width, or truncate it to a maximum length.","required":["text"],"additionalProperties":false},"TimeConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["ns","us","ms","s","min","h","d","wk","mo","yr","dec"],"description":"From — Options: ns (Nanoseconds (ns)), us (Microseconds (µs)), ms (Milliseconds (ms)), s (Seconds (s)), min (Minutes (min)), h (Hours (h)), d (Days (d)), wk (Weeks (wk)), mo (Months (avg) (mo)), yr (Years (avg) (yr)), dec (Decades (dec))","default":"h"},"to":{"type":"string","enum":["ns","us","ms","s","min","h","d","wk","mo","yr","dec"],"description":"To — Options: ns (Nanoseconds (ns)), us (Microseconds (µs)), ms (Milliseconds (ms)), s (Seconds (s)), min (Minutes (min)), h (Hours (h)), d (Days (d)), wk (Weeks (wk)), mo (Months (avg) (mo)), yr (Years (avg) (yr)), dec (Decades (dec))","default":"min"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Time Converter input","description":"Convert time between 11 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"TimesheetCalculatorInput":{"type":"object","properties":{"entries":{"type":"string","description":"Shifts — One shift per line: label, start time, end time. Overnight shifts are handled. — Multi-line text.","examples":["Mon, 09:00, 17:30\nTue, 08:45, 17:00\nWed, 09:15, 18:00\nThu, 09:00, 16:30\nFri, 09:00, 15:00"]},"breakMinutes":{"description":"Unpaid break per shift — Measured in min.","type":"number","minimum":0,"maximum":480,"default":30},"rounding":{"type":"string","enum":["none","5","6","15","30"],"description":"Round each shift — Options: none (No rounding), 5 (To 5 minutes), 6 (To 6 minutes (tenth of an hour)), 15 (To 15 minutes (quarter hour)), 30 (To 30 minutes)","default":"none"},"rate":{"description":"Hourly rate — Leave at 0 to skip pay.","type":"number","minimum":0,"maximum":1000000,"default":0}},"title":"Timesheet Calculator input","description":"Total daily clock-in and clock-out times, with breaks, rounding and optional pay.","required":["entries"],"additionalProperties":false},"TimestampConverterInput":{"type":"object","properties":{"input":{"type":"string","description":"Timestamp or date","examples":["1767225600"]},"mode":{"type":"string","enum":["auto","seconds","ms","date"],"description":"Interpret as — Options: auto (Detect automatically), seconds (Unix seconds), ms (Unix milliseconds), date (Date string)","default":"auto"}},"title":"Unix Timestamp Converter input","description":"Convert Unix timestamps to human dates and back, in seconds or milliseconds.","required":["input"],"additionalProperties":false},"TimezoneConverterInput":{"type":"object","properties":{"datetime":{"type":"string","description":"Date and time","examples":["2026-08-01 14:30"]},"from":{"type":"string","enum":["UTC","Europe/London","Europe/Paris","Europe/Berlin","Europe/Madrid","Europe/Moscow","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","America/Sao_Paulo","Asia/Dubai","Asia/Kolkata","Asia/Bangkok","Asia/Shanghai","Asia/Singapore","Asia/Tokyo","Asia/Seoul","Australia/Sydney","Australia/Perth","Pacific/Auckland","Africa/Cairo","Africa/Johannesburg","Africa/Lagos"],"description":"From zone — Options: UTC, Europe/London, Europe/Paris, Europe/Berlin, Europe/Madrid, Europe/Moscow, America/New_York (America/New York), America/Chicago, America/Denver, America/Los_Angeles (America/Los Angeles), America/Sao_Paulo (America/Sao Paulo), Asia/Dubai, Asia/Kolkata, Asia/Bangkok, Asia/Shanghai, Asia/Singapore, Asia/Tokyo, Asia/Seoul, Australia/Sydney, Australia/Perth, Pacific/Auckland, Africa/Cairo, Africa/Johannesburg, Africa/Lagos","default":"Europe/London"},"to":{"type":"string","enum":["UTC","Europe/London","Europe/Paris","Europe/Berlin","Europe/Madrid","Europe/Moscow","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","America/Sao_Paulo","Asia/Dubai","Asia/Kolkata","Asia/Bangkok","Asia/Shanghai","Asia/Singapore","Asia/Tokyo","Asia/Seoul","Australia/Sydney","Australia/Perth","Pacific/Auckland","Africa/Cairo","Africa/Johannesburg","Africa/Lagos"],"description":"To zone — Options: UTC, Europe/London, Europe/Paris, Europe/Berlin, Europe/Madrid, Europe/Moscow, America/New_York (America/New York), America/Chicago, America/Denver, America/Los_Angeles (America/Los Angeles), America/Sao_Paulo (America/Sao Paulo), Asia/Dubai, Asia/Kolkata, Asia/Bangkok, Asia/Shanghai, Asia/Singapore, Asia/Tokyo, Asia/Seoul, Australia/Sydney, Australia/Perth, Pacific/Auckland, Africa/Cairo, Africa/Johannesburg, Africa/Lagos","default":"America/New_York"}},"title":"Time Zone Converter input","description":"Convert a time between any two time zones, with daylight saving handled correctly.","required":["datetime"],"additionalProperties":false},"TimezoneMeetingPlannerInput":{"type":"object","properties":{"zones":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["UTC","America/Los_Angeles","America/Denver","America/Chicago","America/New_York","America/Sao_Paulo","Europe/London","Europe/Dublin","Europe/Paris","Europe/Berlin","Europe/Madrid","Europe/Warsaw","Europe/Moscow","Africa/Lagos","Africa/Johannesburg","Asia/Dubai","Asia/Karachi","Asia/Kolkata","Asia/Dhaka","Asia/Bangkok","Asia/Singapore","Asia/Shanghai","Asia/Tokyo","Asia/Seoul","Australia/Perth","Australia/Sydney","Pacific/Auckland"]},"description":"Timezones — Pick every location that needs to attend. — One of 27 values, e.g. UTC, America/Los_Angeles, America/Denver, America/Chicago, America/New_York, America/Sao_Paulo, Europe/London, Europe/Dublin, Europe/Paris, Europe/Berlin, Europe/Madrid, Europe/Warsaw, Europe/Moscow, Africa/Lagos, Africa/Johannesburg, Asia/Dubai, Asia/Karachi, Asia/Kolkata, Asia/Dhaka, Asia/Bangkok, Asia/Singapore, Asia/Shanghai, Asia/Tokyo, Asia/Seoul…","minItems":2,"maxItems":12,"default":["America/New_York","Europe/London","Asia/Kolkata"]},"date":{"type":"string","description":"Date — Offsets shift with daylight saving, so the date matters."},"startHour":{"description":"Working day starts — Measured in :00.","type":"number","minimum":0,"maximum":23,"default":9},"endHour":{"description":"Working day ends — Measured in :00.","type":"number","minimum":1,"maximum":24,"default":17},"duration":{"description":"Meeting length — Measured in hours.","type":"number","minimum":1,"maximum":8,"default":1}},"title":"Timezone Meeting Planner input","description":"Find the hours that are inside working time for everyone, across up to a dozen timezones.","required":["date"],"additionalProperties":false},"TipCalculatorInput":{"type":"object","properties":{"bill":{"description":"Bill amount","type":"number","minimum":0,"default":84.5},"tipPercent":{"description":"Tip — Measured in %.","type":"number","minimum":0,"maximum":100,"default":18},"people":{"description":"Split between — Measured in people.","type":"number","minimum":1,"maximum":100,"default":4},"roundUp":{"type":"boolean","description":"Round each share up to the nearest unit","default":false}},"title":"Tip Calculator & Bill Splitter input","description":"Work out the tip and split a bill evenly between any number of people.","additionalProperties":false},"TitleCaseConverterInput":{"type":"object","properties":{"text":{"type":"string","description":"Titles — Multi-line text.","examples":["the lord of the rings\na tale of two cities\nto kill a mockingbird"]},"style":{"type":"string","enum":["chicago","ap","apa","mla","all"],"description":"Style guide — Options: chicago (Chicago — lowercase articles, prepositions under 5 letters), ap (AP — lowercase words of 3 letters or fewer), apa (APA — lowercase words of 3 letters or fewer), mla (MLA — lowercase articles, prepositions, conjunctions), all (Compare all four)","default":"chicago"}},"title":"Title Case Converter input","description":"Apply AP, Chicago, APA or MLA title capitalisation rules — each treats small words differently.","required":["text"],"additionalProperties":false},"TorqueConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["nm","knm","lbft","lbin","kgfm"],"description":"From — Options: nm (Newton-metres (N⋅m)), knm (Kilonewton-metres (kN⋅m)), lbft (Pound-feet (lb⋅ft)), lbin (Pound-inches (lb⋅in)), kgfm (Kilogram-force metres (kgf⋅m))","default":"nm"},"to":{"type":"string","enum":["nm","knm","lbft","lbin","kgfm"],"description":"To — Options: nm (Newton-metres (N⋅m)), knm (Kilonewton-metres (kN⋅m)), lbft (Pound-feet (lb⋅ft)), lbin (Pound-inches (lb⋅in)), kgfm (Kilogram-force metres (kgf⋅m))","default":"lbft"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Torque Converter input","description":"Convert torque between 5 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"TotpGeneratorInput":{"type":"object","properties":{"secret":{"type":"string","description":"Base32 secret"},"digits":{"type":"string","enum":["6","8"],"description":"Digits — Options: 6 (6 digits), 8 (8 digits)","default":"6"},"period":{"description":"Period (seconds)","type":"number","minimum":10,"maximum":120,"default":30}},"title":"TOTP Code Generator input","description":"Generate time-based one-time passwords from a Base32 secret to test 2FA setups.","required":["secret"],"additionalProperties":false},"TouchTargetCheckerInput":{"type":"object","properties":{"width":{"description":"Target width — Measured in px.","type":"number","minimum":1,"maximum":500,"default":32},"height":{"description":"Target height — Measured in px.","type":"number","minimum":1,"maximum":500,"default":32},"spacing":{"description":"Gap to the nearest target — Measured in px.","type":"number","minimum":0,"maximum":200,"default":8},"standard":{"type":"string","enum":["all","wcag22aa","wcag21aaa","apple","material"],"description":"Check against — Options: all (All standards), wcag22aa (WCAG 2.2 AA — 24×24), wcag21aaa (WCAG 2.1 AAA — 44×44), apple (Apple HIG — 44×44 pt), material (Material Design — 48×48 dp)","default":"all"}},"title":"Touch Target Size Checker input","description":"Check whether a button or link meets the minimum tap target size and spacing.","additionalProperties":false},"TournamentBracketGeneratorInput":{"type":"object","properties":{"entrants":{"type":"string","description":"Entrants — Multi-line text.","examples":["Alpha\nBravo\nCharlie\nDelta\nEcho\nFoxtrot"]},"seeding":{"type":"string","enum":["standard","random","order"],"description":"Seeding — Options: standard (Standard — 1 plays the lowest, top seeds kept apart), random (Random draw), order (As listed — 1 v 2, 3 v 4)","default":"standard"},"thirdPlace":{"type":"boolean","description":"Include a third-place play-off","default":false},"seed":{"type":"string","description":"Seed — Only applies for some combinations of the other fields."}},"title":"Tournament Bracket Generator input","description":"Build a single-elimination bracket with byes placed correctly for any number of entrants.","required":["entrants"],"additionalProperties":false},"TranscriptToSubtitlesInput":{"type":"object","properties":{"transcript":{"type":"string","description":"Transcript — Plain text. Sentences are split automatically and timed by length. — Multi-line text.","examples":["Welcome to the demonstration. Today we are looking at how subtitles are timed.\nThe reading speed matters more than anything else. If a line stays on screen too briefly, nobody can read it.\nMost broadcasters target around seventeen characters per second."]},"wordsPerMinute":{"description":"Speaking rate — Conversational speech is 130–160. News reading is around 180. — Measured in wpm.","type":"number","minimum":60,"maximum":300,"default":150},"maxChars":{"description":"Maximum characters per cue — 84 is two lines of 42.","type":"number","minimum":20,"maximum":200,"default":84},"startAt":{"description":"Start at — Measured in seconds.","type":"number","minimum":0,"maximum":86400,"default":0},"gap":{"description":"Gap between cues — Measured in ms.","type":"number","minimum":0,"maximum":2000,"default":100},"format":{"type":"string","enum":["srt","vtt"],"description":"Output — Options: srt (SRT), vtt (WebVTT)","default":"srt"}},"title":"Transcript to Subtitles input","description":"Turn a plain transcript into timed SRT or WebVTT cues at a realistic reading speed.","required":["transcript"],"additionalProperties":false},"TrigonometryCalculatorInput":{"type":"object","properties":{"angle":{"description":"Angle","type":"number","default":45},"unit":{"type":"string","enum":["deg","rad"],"description":"Unit — Options: deg (Degrees), rad (Radians)","default":"deg"}},"title":"Trigonometry Calculator input","description":"Calculate sine, cosine, tangent and their inverses in degrees or radians.","additionalProperties":false},"TwitterCardValidatorInput":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML or meta tags — Paste the whole <head>, the whole page, or just the meta tags. Everything that is not a <meta> tag is ignored. — Multi-line text.","examples":["<meta name=\"twitter:card\" content=\"summary_large_image\">\n<meta name=\"twitter:site\" content=\"@convertto\">\n<meta name=\"twitter:creator\" content=\"@convertto\">\n<meta name=\"twitter:title\" content=\"Email Header Analyzer — trace any message\">\n<meta name=\"twitter:description\" content=\"Paste raw email headers to map the delivery path, time every hop and read the SPF, DKIM and DMARC results.\">\n<meta name=\"twitter:image\" content=\"https://example.com/og/email-headers.png\">\n<meta name=\"twitter:image:alt\" content=\"A traced email delivery path with four hops\">\n<meta property=\"og:title\" content=\"Email Header Analyzer\">\n<meta property=\"og:description\" content=\"Trace a message hop by hop.\">\n<meta property=\"og:image\" content=\"https://example.com/og/email-headers.png\">\n<meta property=\"og:url\" content=\"https://example.com/t/email-header-analyzer\">"],"contentMediaType":"text/html"},"type":{"type":"string","enum":["summary","summary_large_image","player","app"],"description":"Assume this card type when twitter:card is missing — Only used when the markup has no twitter:card tag. X falls back to the small summary card. — Options: summary (Summary — what X actually defaults to), summary_large_image (Summary with large image), player (Player), app (App)","default":"summary"}},"title":"X (Twitter) Card Validator input","description":"Paste your meta tags to check the X card type, title, description and image against the documented rules, including Open Graph fallbacks.","required":["html"],"additionalProperties":false},"TypeScaleGeneratorInput":{"type":"object","properties":{"base":{"description":"Base size — Measured in px.","type":"number","minimum":8,"maximum":32,"default":16},"ratio":{"type":"string","enum":["1.067","1.125","1.2","1.25","1.333","1.414","1.5","1.618"],"description":"Ratio — Options: 1.067 (Minor second — 1.067), 1.125 (Major second — 1.125), 1.2 (Minor third — 1.2), 1.25 (Major third — 1.25), 1.333 (Perfect fourth — 1.333), 1.414 (Augmented fourth — 1.414), 1.5 (Perfect fifth — 1.5), 1.618 (Golden ratio — 1.618)","default":"1.25"},"steps":{"description":"Steps above the base — Between 2 and 10.","type":"number","minimum":2,"maximum":10,"default":6},"unit":{"type":"string","enum":["rem","px"],"description":"Unit — Options: rem, px","default":"rem"}},"title":"Type Scale Generator input","description":"Build a modular typographic scale and copy it as CSS custom properties.","additionalProperties":false},"UnicodeConverterInput":{"type":"object","properties":{"input":{"type":"string","description":"Text — Multi-line text.","examples":["Héllo — 世界 🌍"]},"format":{"type":"string","enum":["codepoints","utf8","utf16","entities","js","table"],"description":"Convert to — Options: codepoints (Code points (U+XXXX)), utf8 (UTF-8 bytes (hex)), utf16 (UTF-16 code units (hex)), entities (HTML entities (&#xXXXX;)), js (JavaScript escapes (\\u{XXXX})), table (Full breakdown table)","default":"codepoints"}},"title":"Unicode Converter input","description":"Convert text between code points, UTF-8, UTF-16, HTML entities and escape sequences.","required":["input"],"additionalProperties":false},"UnicodeEscapeInput":{"type":"object","properties":{"text":{"type":"string","description":"Text or escapes — Multi-line text.","examples":["café 日本 🎉"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Text → Escapes), decode (Escapes → Text)","default":"encode"},"style":{"type":"string","enum":["js","es6","css","html"],"description":"Escape style — Options: js (\\u00e9 (JS/JSON)), es6 (\\u{1f389} (ES6)), css (\\0000e9 (CSS)), html (&#233; (HTML))","default":"js"}},"title":"Unicode Escape Converter input","description":"Convert characters to \\u escape sequences and back — for JSON, JavaScript and source code.","required":["text"],"additionalProperties":false},"UnitPriceComparatorInput":{"type":"object","properties":{"items":{"type":"string","description":"Products — One product per line. Units may be g, kg, ml, l, oz, lb or a plain count. — Multi-line text.","examples":["Small pack, 2.49, 250, g\nMedium pack, 4.29, 500, g\nFamily pack, 7.99, 1, kg\nBulk box, 14.50, 2.5, kg"]},"symbol":{"type":"string","enum":["$","£","€","₹","¥",""],"description":"Currency symbol — Options: $ ($ — dollar), £ (£ — pound), € (€ — euro), ₹ (₹ — rupee), ¥ (¥ — yen),  (None)","default":"$"}},"title":"Unit Price Comparator input","description":"Work out which pack size is actually cheaper per unit, weight or volume.","required":["items"],"additionalProperties":false},"UpsideDownTextInput":{"type":"object","properties":{"text":{"type":"string","description":"Text","examples":["Hello World"]}},"title":"Upside Down Text Generator input","description":"Flip text upside down using Unicode look-alike characters, readable when rotated 180°.","required":["text"],"additionalProperties":false},"UrlBuilderInput":{"type":"object","properties":{"base":{"type":"string","description":"Base URL","examples":["https://api.example.com"]},"path":{"type":"string","description":"Path"},"params":{"type":"array","description":"Query parameters — Values are percent-encoded. Repeat a name to send it more than once. — Array of [Name, Value] string pairs.","items":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},"default":[["page","1"],["limit","25"],["q","hello world"]]},"hash":{"type":"string","description":"Fragment"},"encode":{"type":"boolean","description":"Encode values","default":true}},"title":"URL Builder input","description":"Compose a URL from its parts with correctly percent-encoded query parameters.","required":["base","path","hash"],"additionalProperties":false},"UrlEncodeDecodeInput":{"type":"object","properties":{"text":{"type":"string","description":"Text or URL — Multi-line text.","examples":["https://convertto.tech/search?q=hello world&lang=en"]},"direction":{"type":"string","enum":["encode","decode"],"description":"Direction — Options: encode (Encode), decode (Decode)","default":"encode"},"component":{"type":"boolean","description":"Encode component — Also escapes / ? : @ & = + $ #","default":true}},"title":"URL Encoder & Decoder input","description":"Percent-encode text for safe use in URLs, and decode encoded URLs back to readable text.","required":["text"],"additionalProperties":false},"UrlParserInput":{"type":"object","properties":{"url":{"type":"string","description":"URL — Multi-line text.","examples":["https://user:pass@www.convertto.tech:8443/c/image-tools?q=png&sort=name#results"]}},"title":"URL Parser input","description":"Break a URL into protocol, host, path, query parameters and fragment.","required":["url"],"additionalProperties":false},"UserAgentParserInput":{"type":"object","properties":{"ua":{"type":"string","description":"User agent string — Multi-line text.","examples":["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"]}},"title":"User Agent Parser input","description":"Break down a user-agent string into browser, engine, operating system and device.","required":["ua"],"additionalProperties":false},"UsernameGeneratorInput":{"type":"object","properties":{"count":{"description":"How many","type":"number","minimum":1,"maximum":100,"default":12},"style":{"type":"string","enum":["adjective-noun","noun-number","double-noun","tech"],"description":"Style — Options: adjective-noun (Adjective + noun), noun-number (Noun + number), double-noun (Noun + noun), tech (Tech-flavoured)","default":"adjective-noun"},"separator":{"type":"string","enum":["none","_","-","."],"description":"Separator — Options: none (None), _ (Underscore), - (Hyphen), . (Dot)","default":"none"}},"title":"Username Generator input","description":"Generate available-looking usernames and handles in several styles.","additionalProperties":false},"Utf8InspectorInput":{"type":"object","properties":{"text":{"type":"string","description":"Text","examples":["café 🎉"]}},"title":"UTF-8 Byte Inspector input","description":"See exactly how text is encoded — code points, UTF-8 bytes, names and byte counts per character.","required":["text"],"additionalProperties":false},"UtmLinkBuilderInput":{"type":"object","properties":{"url":{"type":"string","description":"Destination URL"},"source":{"type":"string","description":"Campaign source — Where the traffic comes from — required."},"medium":{"type":"string","description":"Campaign medium — The marketing channel — required."},"campaign":{"type":"string","description":"Campaign name"},"term":{"type":"string","description":"Campaign term"},"content":{"type":"string","description":"Campaign content — Use to tell two links in the same email apart."}},"title":"UTM Link Builder input","description":"Build tagged campaign URLs that track correctly in Google Analytics.","required":["url","source","medium","campaign","term","content"],"additionalProperties":false},"UuidInspectorInput":{"type":"object","properties":{"uuids":{"type":"string","description":"UUIDs — Multi-line text.","examples":["018f3c1e-4b2a-7c3d-8e4f-5a6b7c8d9e0f\n550e8400-e29b-41d4-a716-446655440000\n6ba7b810-9dad-11d1-80b4-00c04fd430c8"]}},"title":"UUID Inspector input","description":"Identify a UUID version and variant, and extract the timestamp from v1, v6 and v7.","required":["uuids"],"additionalProperties":false},"UuidV4GeneratorInput":{"type":"object","properties":{"count":{"description":"How many","type":"number","minimum":1,"maximum":1000,"default":10},"uppercase":{"type":"boolean","description":"Uppercase","default":false},"hyphens":{"type":"boolean","description":"Include hyphens","default":true}},"title":"UUID v4 Generator input","description":"Generate random RFC 4122 version 4 UUIDs in bulk.","additionalProperties":false},"UuidV7GeneratorInput":{"type":"object","properties":{"count":{"description":"How many","type":"number","minimum":1,"maximum":1000,"default":10},"uppercase":{"type":"boolean","description":"Uppercase","default":false}},"title":"UUID v7 Generator input","description":"Generate time-sortable UUID version 7 identifiers — ideal as database primary keys.","additionalProperties":false},"ValidatorSuiteInput":{"type":"object","properties":{"input":{"type":"string","description":"Value to validate"},"type":{"type":"string","enum":["email","uuid","ipv4","ipv6","card","semver","hex","slug"],"description":"Validate as — Options: email (Email address), uuid (UUID), ipv4 (IPv4 address), ipv6 (IPv6 address), card (Credit card (Luhn)), semver (Semantic version), hex (Hex colour), slug (URL slug)","default":"email"}},"title":"Format Validator input","description":"Validate emails, UUIDs, IP addresses, credit card numbers, IBANs and semver strings.","required":["input"],"additionalProperties":false},"VatTaxCalculatorInput":{"type":"object","properties":{"amount":{"description":"Amount","type":"number","minimum":0,"default":100},"rate":{"description":"Tax rate — Measured in %.","type":"number","minimum":0,"maximum":100,"default":20},"mode":{"type":"string","enum":["net","gross"],"description":"The amount is — Options: net (Excluding tax — add it), gross (Including tax — remove it)","default":"net"}},"title":"VAT & Sales Tax Calculator input","description":"Add or remove VAT, GST or sales tax at any rate, with the net and tax split out.","additionalProperties":false},"VolumeConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["ml","cl","l","m3","cm3","tsp","tbsp","cup","flozus","ptus","qtus","galus","flozuk","ptuk","galuk","bbl"],"description":"From — Options: ml (Millilitres (mL)), cl (Centilitres (cL)), l (Litres (L)), m3 (Cubic Metres (m³)), cm3 (Cubic Centimetres (cm³)), tsp (Teaspoons (US) (tsp)), tbsp (Tablespoons (US) (tbsp)), cup (Cups (US) (cup)), flozus (Fluid Ounces (US) (fl oz)), ptus (Pints (US) (pt)), qtus (Quarts (US) (qt)), galus (Gallons (US) (gal)), flozuk (Fluid Ounces (UK) (fl oz)), ptuk (Pints (UK) (pt)), galuk (Gallons (UK) (gal)), bbl (Oil Barrels (bbl))","default":"l"},"to":{"type":"string","enum":["ml","cl","l","m3","cm3","tsp","tbsp","cup","flozus","ptus","qtus","galus","flozuk","ptuk","galuk","bbl"],"description":"To — Options: ml (Millilitres (mL)), cl (Centilitres (cL)), l (Litres (L)), m3 (Cubic Metres (m³)), cm3 (Cubic Centimetres (cm³)), tsp (Teaspoons (US) (tsp)), tbsp (Tablespoons (US) (tbsp)), cup (Cups (US) (cup)), flozus (Fluid Ounces (US) (fl oz)), ptus (Pints (US) (pt)), qtus (Quarts (US) (qt)), galus (Gallons (US) (gal)), flozuk (Fluid Ounces (UK) (fl oz)), ptuk (Pints (UK) (pt)), galuk (Gallons (UK) (gal)), bbl (Oil Barrels (bbl))","default":"galus"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Volume Converter input","description":"Convert volume between 16 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"WaterIntakeCalculatorInput":{"type":"object","properties":{"units":{"type":"string","enum":["metric","imperial"],"description":"Units — Options: metric (Metric (kg, litres)), imperial (Imperial (lb, oz))","default":"metric"},"weight":{"description":"Weight","type":"number","minimum":20,"default":70},"activityMinutes":{"description":"Daily exercise — Measured in min.","type":"number","minimum":0,"maximum":480,"default":30},"climate":{"type":"string","enum":["temperate","hot","cold"],"description":"Climate — Options: temperate (Temperate), hot (Hot or humid), cold (Cold)","default":"temperate"}},"title":"Daily Water Intake Calculator input","description":"Estimate how much water to drink each day based on weight, activity and climate.","additionalProperties":false},"WeekNumberCalculatorInput":{"type":"object","properties":{"date":{"type":"string","format":"date","description":"Date — ISO 8601 date, YYYY-MM-DD."}},"title":"ISO Week Number Calculator input","description":"Find the ISO 8601 week number, quarter and day of year for any date.","required":["date"],"additionalProperties":false},"WeightConverterInput":{"type":"object","properties":{"value":{"description":"Value","type":"number","default":1},"from":{"type":"string","enum":["ug","mg","g","kg","t","oz","lb","st","uston","ukton","ct","gr"],"description":"From — Options: ug (Micrograms (µg)), mg (Milligrams (mg)), g (Grams (g)), kg (Kilograms (kg)), t (Metric Tonnes (t)), oz (Ounces (oz)), lb (Pounds (lb)), st (Stone (st)), uston (US Tons (short) (ton)), ukton (UK Tons (long) (ton)), ct (Carats (ct)), gr (Grains (gr))","default":"kg"},"to":{"type":"string","enum":["ug","mg","g","kg","t","oz","lb","st","uston","ukton","ct","gr"],"description":"To — Options: ug (Micrograms (µg)), mg (Milligrams (mg)), g (Grams (g)), kg (Kilograms (kg)), t (Metric Tonnes (t)), oz (Ounces (oz)), lb (Pounds (lb)), st (Stone (st)), uston (US Tons (short) (ton)), ukton (UK Tons (long) (ton)), ct (Carats (ct)), gr (Grains (gr))","default":"lb"},"swap":{"type":"boolean","description":"Swap direction — Reverses the two units without retyping them.","default":false},"precision":{"description":"Significant figures","type":"number","minimum":1,"maximum":15,"default":6}},"title":"Weight & Mass Converter input","description":"Convert weight between 12 units with the formula, a reverse conversion and a quick-reference table.","additionalProperties":false},"WeightedAverageCalculatorInput":{"type":"object","properties":{"values":{"type":"string","description":"Values (one per line) — Multi-line text.","examples":["85\n92\n78\n95"]},"weights":{"type":"string","description":"Weights (one per line) — Multi-line text.","examples":["20\n30\n25\n25"]}},"title":"Weighted Average Calculator input","description":"Calculate a weighted mean — for grades, ratings and portfolio returns.","required":["values","weights"],"additionalProperties":false},"WhitespaceRemoverInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["  hello    world  \n\n\n  second   line  "]},"mode":{"type":"string","enum":["extra","all","leading","trailing","blank"],"description":"Mode — Options: extra (Collapse repeated spaces), all (Remove all whitespace), leading (Trim line starts), trailing (Trim line ends), blank (Remove blank lines)","default":"extra"},"trimLines":{"type":"boolean","description":"Also trim each line","default":true}},"title":"Whitespace Remover input","description":"Strip extra spaces, tabs, blank lines and trailing whitespace from any text.","required":["text"],"additionalProperties":false},"WordCounterInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text."}},"title":"Word & Character Counter input","description":"Count words, characters, sentences and paragraphs, with reading time and readability.","required":["text"],"additionalProperties":false},"WordFrequencyCounterInput":{"type":"object","properties":{"text":{"type":"string","description":"Text — Multi-line text.","examples":["The quick brown fox jumps over the lazy dog. Pack my box with five dozen liquor jugs.\nSphinx of black quartz, judge my vow. How vexingly quick daft zebras jump!"]},"top":{"description":"Show top","type":"number","minimum":5,"maximum":500,"default":25},"min":{"description":"Minimum word length — Measured in chars.","type":"number","minimum":1,"maximum":20,"default":1},"stopwords":{"type":"boolean","description":"Ignore common words — the, and, of, to and about 60 others.","default":true},"caseSensitive":{"type":"boolean","description":"Case sensitive","default":false}},"title":"Word Frequency Counter input","description":"Count how often each word appears, with stop-word filtering and a frequency chart.","required":["text"],"additionalProperties":false},"WordsToNumberInput":{"type":"object","properties":{"text":{"type":"string","description":"Number in words","examples":["two hundred and fifty thousand"]}},"title":"Words to Number Converter input","description":"Convert written English numbers back into digits — \"two hundred and fifty\" becomes 250.","required":["text"],"additionalProperties":false},"WordsToTokensConverterInput":{"type":"object","properties":{"amount":{"description":"Amount","type":"number","minimum":0,"maximum":1000000000,"default":1000},"from":{"type":"string","enum":["words","characters","tokens","pages","minutes"],"description":"From — Options: words (Words), characters (Characters), tokens (Tokens), pages (Pages (500 words)), minutes (Minutes of speech)","default":"words"},"to":{"type":"string","enum":["tokens","words","characters","pages","minutes"],"description":"To — Options: tokens (Tokens), words (Words), characters (Characters), pages (Pages (500 words)), minutes (Minutes of speech)","default":"tokens"},"contentType":{"type":"string","enum":["prose","technical","code","json","cjk","other"],"description":"Content type — Content type changes the ratio far more than the model does. — Options: prose (English prose), technical (Technical writing), code (Source code), json (JSON / structured data), cjk (Chinese, Japanese or Korean), other (Other European languages)","default":"prose"}},"title":"Words to Tokens Converter input","description":"Convert between words, characters, pages and tokens using measured ratios for prose, code, JSON and CJK.","additionalProperties":false},"WorkingDaysCalculatorInput":{"type":"object","properties":{"start":{"type":"string","description":"From"},"end":{"type":"string","description":"To"},"holidays":{"type":"string","description":"Public holidays — Dates falling on a weekend are counted once, not twice. — Multi-line text.","examples":["2026-01-01\n2026-04-03\n2026-04-06\n2026-05-04\n2026-05-25"]},"saturday":{"type":"boolean","description":"Saturday is a working day","default":false},"sunday":{"type":"boolean","description":"Sunday is a working day","default":false},"includeEnd":{"type":"boolean","description":"Include the end date","default":true}},"title":"Working Days Calculator input","description":"Count business days between two dates, excluding weekends and your own holiday list.","required":["start","end","holidays"],"additionalProperties":false},"XmlFormatterInput":{"type":"object","properties":{"xml":{"type":"string","description":"XML — Multi-line text.","examples":["<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<catalog><book id=\"bk101\" lang=\"en\"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price></book><book id=\"bk102\"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price></book></catalog>"],"contentMediaType":"application/xml"},"mode":{"type":"string","enum":["format","minify"],"description":"Mode — Options: format (Format — indent and align), minify (Minify — strip whitespace between tags)","default":"format"},"indent":{"type":"string","enum":["2","4","tab"],"description":"Indentation — Options: 2 (2 spaces), 4 (4 spaces), tab (Tab) — Only applies for some combinations of the other fields.","default":"2"},"collapseEmpty":{"type":"boolean","description":"Collapse empty elements to self-closing tags — Only applies for some combinations of the other fields.","default":true}},"title":"XML Formatter input","description":"Format messy XML with proper indentation, or minify it back down, with well-formedness checked.","required":["xml"],"additionalProperties":false},"XmlValidatorInput":{"type":"object","properties":{"xml":{"type":"string","description":"XML — Multi-line text.","examples":["<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<catalog><book id=\"bk101\" lang=\"en\"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price></book><book id=\"bk102\"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price></book></catalog>"],"contentMediaType":"application/xml"},"checkNamespaces":{"type":"boolean","description":"Report namespaces and attributes","default":true}},"title":"XML Validator input","description":"Check XML is well-formed, with the exact line and column of the first error and a document summary.","required":["xml"],"additionalProperties":false},"YamlFormatterInput":{"type":"object","properties":{"code":{"type":"string","description":"YAML — Multi-line text.","examples":["name:   CI\non:\n  push:\n    branches: [main]\njobs:\n  build:\n    runs-on:  ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - run:   npm ci && npm test"],"contentMediaType":"application/yaml"},"printWidth":{"description":"Line width — Measured in chars.","type":"number","minimum":40,"maximum":200,"default":80},"tabWidth":{"description":"Indent size — Measured in spaces.","type":"number","minimum":1,"maximum":8,"default":2},"useTabs":{"type":"boolean","description":"Indent with tabs","default":false}},"title":"YAML Formatter & Validator input","description":"Format and validate YAML — catch the indentation mistakes that break CI pipelines.","required":["code"],"additionalProperties":false},"YoutubeThumbnailDownloaderInput":{"type":"object","properties":{"url":{"type":"string","description":"YouTube URL or video ID"}},"title":"YouTube Thumbnail Downloader input","description":"Get the thumbnail image URLs for any YouTube video, in every available size.","required":["url"],"additionalProperties":false},"ZIndexVisualizerInput":{"type":"object","properties":{"css":{"type":"string","description":"Declarations — Paste the declarations from the ancestor that is misbehaving.","examples":["position: relative; transform: translateZ(0); opacity: 0.9; z-index: 999"]}},"title":"Z-Index & Stacking Context Checker input","description":"Paste your CSS and find the property that trapped the element in a stacking context.","required":["css"],"additionalProperties":false},"ZScoreCalculatorInput":{"type":"object","properties":{"value":{"description":"Value (x)","type":"number","default":85},"mean":{"description":"Mean (μ)","type":"number","default":70},"stdDev":{"description":"Standard deviation (σ)","type":"number","minimum":0.000001,"default":10}},"title":"Z-Score Calculator input","description":"Calculate how many standard deviations a value sits from the mean, with percentile.","additionalProperties":false}}},"x-mcp":{"endpoint":"https://convertto.tech/api/mcp","transport":"streamable-http","protocolVersions":["2025-06-18","2025-03-26","2024-11-05"]},"x-excluded":{"note":"Catalogue entries deliberately absent from this document.","runtimes":["worker","wasm","edge","node"],"categories":["browser"],"reasons":{"worker":"Runs in a Web Worker in the browser.","wasm":"Loads a WebAssembly bundle in the browser.","edge":"Reaches the network — kept off this surface to avoid becoming an SSRF proxy.","node":"Needs Node APIs — kept off this surface for the same reason.","browser":"Reads live browser APIs (devices, screen, permissions).","file-input":"Takes an uploaded file, which v1 does not accept.","blob-output":"Produces a binary file, which JSON cannot carry."}}}