{"openapi":"3.1.0","info":{"title":"Tidy Byte Tools API","version":"1.0.0","summary":"Small, fast text and data tools. Free tier now. Paid per-call billing is coming soon.","description":"Anonymous use is allowed (50 calls per IP per UTC day, 16384 byte body cap). A free key from POST /keys raises the cap to 200 calls per key per UTC day. Paid per-call billing is not live. For bulk or heavier jobs, use paid Apify actors at https://apify.com/tidybytetools.","contact":{"url":"https://tidybytetools.tidybytetools.workers.dev","name":"Tidy Byte Tools"}},"servers":[{"url":"https://tidybytetools.tidybytetools.workers.dev"}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]},{"apiKeyQuery":[]},{}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"A free key from POST /keys, as: Bearer tbt_..."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-Api-Key"},"apiKeyQuery":{"type":"apiKey","in":"query","name":"api_key","description":"Allowed. Never put a key in the URL path."}}},"paths":{"/keys":{"post":{"operationId":"createKey","summary":"Create a free API key instantly","description":"No sign-up form. Returns the key once. With a key you get 200 free calls per UTC day. Anonymous callers still work without a key (50 calls per IP per UTC day).","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"}}},"example":{"label":"my agent"}}}},"responses":{"200":{"description":"A new free key. Save it; we will not show it again."},"429":{"description":"Too many keys from this IP today."}}}},"/v1/probe":{"get":{"operationId":"probeAuth","summary":"Auth probe (free)","description":"Cheap check for API keys. A missing key returns 200 with auth=anonymous. A valid key returns 200 with auth=key. A bad key returns 401 with error=invalid_api_key. This call does not use your daily quota.","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer tbt_..."},{"name":"X-Api-Key","in":"header","required":false,"schema":{"type":"string"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"Allowed. Do not put a key in the URL path."}],"responses":{"200":{"description":"Anonymous or valid key."},"401":{"description":"Distinguishable bad-key response: { ok:false, error:\"invalid_api_key\" }."}}}},"/v1/health":{"get":{"operationId":"health","summary":"Health check","responses":{"200":{"description":"The API is up."}}}},"/v1/tools":{"get":{"operationId":"listTools","summary":"List tools","responses":{"200":{"description":"Catalog of endpoints."}}}},"/pricing":{"get":{"operationId":"pricingPage","summary":"Human pricing page","responses":{"200":{"description":"HTML pricing page."}}}},"/pricing.json":{"get":{"operationId":"pricingJson","summary":"Machine-readable prices","responses":{"200":{"description":"Free-tier limits and planned paid prices (paid is not live)."}}}},"/v1/json-repair":{"post":{"operationId":"json_repair","summary":"Repair JSON","description":"Fix broken or incomplete JSON, including text from language models. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"text":"{name: 'Ada', ok: True,}"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/json-repair \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\":\"{name: 'Ada', ok: True,}\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/json-repair\",\n    json={\n  \"text\": \"{name: 'Ada', ok: True,}\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/json-repair\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"text\": \"{name: 'Ada', ok: True,}\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}},"/v1/base64":{"post":{"operationId":"base64","summary":"Base64 encode or decode","description":"Turn text into Base64, or Base64 back into text. URL-safe and data URIs work too. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"action":"encode","text":"hello"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/base64 \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"action\":\"encode\",\"text\":\"hello\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/base64\",\n    json={\n  \"action\": \"encode\",\n  \"text\": \"hello\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/base64\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"action\": \"encode\",\n  \"text\": \"hello\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.002,"x-paid-status":"coming_soon"}},"/v1/hash":{"post":{"operationId":"hash","summary":"Hash text","description":"SHA-256, SHA-1, MD5, and SHA-512 checksums of text. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"text":"hello","algorithms":["sha256","md5"]}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/hash \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\":\"hello\",\"algorithms\":[\"sha256\",\"md5\"]}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/hash\",\n    json={\n  \"text\": \"hello\",\n  \"algorithms\": [\n    \"sha256\",\n    \"md5\"\n  ]\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/hash\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"text\": \"hello\",\n  \"algorithms\": [\n    \"sha256\",\n    \"md5\"\n  ]\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.002,"x-paid-status":"coming_soon"}},"/v1/json-shaper":{"post":{"operationId":"json_shaper","summary":"Shape text into JSON","description":"Turn key-value lines, CSV, or a Markdown table into clean JSON. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"text":"name: Ada\nyear: 1815"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/json-shaper \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\":\"name: Ada\\nyear: 1815\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/json-shaper\",\n    json={\n  \"text\": \"name: Ada\\nyear: 1815\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/json-shaper\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"text\": \"name: Ada\\nyear: 1815\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}},"/v1/json-format":{"post":{"operationId":"json_format","summary":"Format or minify JSON","description":"Pretty-print or shrink valid JSON. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"text":"{\"a\":1,\"b\":[2,3]}","mode":"pretty"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/json-format \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\":\"{\\\"a\\\":1,\\\"b\\\":[2,3]}\",\"mode\":\"pretty\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/json-format\",\n    json={\n  \"text\": \"{\\\"a\\\":1,\\\"b\\\":[2,3]}\",\n  \"mode\": \"pretty\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/json-format\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"text\": \"{\\\"a\\\":1,\\\"b\\\":[2,3]}\",\n  \"mode\": \"pretty\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.002,"x-paid-status":"coming_soon"}},"/v1/md-chunk":{"post":{"operationId":"md_chunk","summary":"Chunk Markdown","description":"Split Markdown into heading-aware chunks for search and RAG. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"text":"# Title\n\nHello.\n\n## Part\n\nMore text.","maxChars":400}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/md-chunk \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\":\"# Title\\n\\nHello.\\n\\n## Part\\n\\nMore text.\",\"maxChars\":400}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/md-chunk\",\n    json={\n  \"text\": \"# Title\\n\\nHello.\\n\\n## Part\\n\\nMore text.\",\n  \"maxChars\": 400\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/md-chunk\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"text\": \"# Title\\n\\nHello.\\n\\n## Part\\n\\nMore text.\",\n  \"maxChars\": 400\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}},"/v1/text-diff":{"post":{"operationId":"text_diff","summary":"Diff two texts","description":"Line-level diff of two strings, plus a unified patch. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"a":"one\ntwo\nthree","b":"one\ntwo changed\nthree"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/text-diff \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"a\":\"one\\ntwo\\nthree\",\"b\":\"one\\ntwo changed\\nthree\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/text-diff\",\n    json={\n  \"a\": \"one\\ntwo\\nthree\",\n  \"b\": \"one\\ntwo changed\\nthree\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/text-diff\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"a\": \"one\\ntwo\\nthree\",\n  \"b\": \"one\\ntwo changed\\nthree\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}},"/v1/yaml-json":{"post":{"operationId":"yaml_json","summary":"YAML ↔ JSON","description":"Convert a common YAML subset to JSON, or JSON to YAML. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"direction":"to-json","text":"name: Ada\nyears: [1815, 1852]"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/yaml-json \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"direction\":\"to-json\",\"text\":\"name: Ada\\nyears: [1815, 1852]\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/yaml-json\",\n    json={\n  \"direction\": \"to-json\",\n  \"text\": \"name: Ada\\nyears: [1815, 1852]\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/yaml-json\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"direction\": \"to-json\",\n  \"text\": \"name: Ada\\nyears: [1815, 1852]\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}},"/v1/xml-json":{"post":{"operationId":"xml_json","summary":"XML ↔ JSON","description":"Convert XML to JSON, or a JSON object back to XML. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"direction":"to-json","text":"<person name=\"Ada\"><year>1815</year></person>"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/xml-json \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"direction\":\"to-json\",\"text\":\"<person name=\\\"Ada\\\"><year>1815</year></person>\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/xml-json\",\n    json={\n  \"direction\": \"to-json\",\n  \"text\": \"<person name=\\\"Ada\\\"><year>1815</year></person>\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/xml-json\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"direction\": \"to-json\",\n  \"text\": \"<person name=\\\"Ada\\\"><year>1815</year></person>\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}},"/v1/html-sanitize":{"post":{"operationId":"html_sanitize","summary":"Sanitize HTML","description":"Strip scripts and unsafe markup. Keeps a short allow-list of tags. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"html":"<p>Hello <script>alert(1)</script><a href=\"https://example.com\">link</a></p>"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/html-sanitize \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"html\":\"<p>Hello <script>alert(1)</script><a href=\\\"https://example.com\\\">link</a></p>\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/html-sanitize\",\n    json={\n  \"html\": \"<p>Hello <script>alert(1)</script><a href=\\\"https://example.com\\\">link</a></p>\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/html-sanitize\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"html\": \"<p>Hello <script>alert(1)</script><a href=\\\"https://example.com\\\">link</a></p>\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}},"/v1/date-timezone":{"post":{"operationId":"date_timezone","summary":"Normalize dates","description":"Parse a messy date and convert it to a timezone you choose. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"text":"March 14, 2026 3:00 PM","sourceTimezone":"America/Chicago","targetTimezone":"UTC"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/date-timezone \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\":\"March 14, 2026 3:00 PM\",\"sourceTimezone\":\"America/Chicago\",\"targetTimezone\":\"UTC\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/date-timezone\",\n    json={\n  \"text\": \"March 14, 2026 3:00 PM\",\n  \"sourceTimezone\": \"America/Chicago\",\n  \"targetTimezone\": \"UTC\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/date-timezone\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"text\": \"March 14, 2026 3:00 PM\",\n  \"sourceTimezone\": \"America/Chicago\",\n  \"targetTimezone\": \"UTC\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}},"/v1/url-codec":{"post":{"operationId":"url_codec","summary":"URL encode or decode","description":"Percent-encode or decode a string or query map. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"action":"encode","text":"hello world & cats"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/url-codec \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"action\":\"encode\",\"text\":\"hello world & cats\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/url-codec\",\n    json={\n  \"action\": \"encode\",\n  \"text\": \"hello world & cats\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/url-codec\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"action\": \"encode\",\n  \"text\": \"hello world & cats\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.002,"x-paid-status":"coming_soon"}},"/v1/unicode":{"post":{"operationId":"unicode","summary":"Normalize Unicode","description":"NFC, NFD, NFKC, or NFKD normalization, plus a character count. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"text":"café","form":"NFC"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/unicode \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\":\"café\",\"form\":\"NFC\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/unicode\",\n    json={\n  \"text\": \"café\",\n  \"form\": \"NFC\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/unicode\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"text\": \"café\",\n  \"form\": \"NFC\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.002,"x-paid-status":"coming_soon"}},"/v1/id-generate":{"post":{"operationId":"id_generate","summary":"Make IDs","description":"Create a UUID, ULID, or NanoID. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"type":"uuid","count":2}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/id-generate \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"type\":\"uuid\",\"count\":2}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/id-generate\",\n    json={\n  \"type\": \"uuid\",\n  \"count\": 2\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/id-generate\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"type\": \"uuid\",\n  \"count\": 2\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.002,"x-paid-status":"coming_soon"}},"/v1/jwt-decode":{"post":{"operationId":"jwt_decode","summary":"Decode a JWT","description":"Read a JWT header and payload. This does not check the signature. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"token":"eyJhbGciOiJub25lIn0.eyJzdWIiOiJhZGEifQ."}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/jwt-decode \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"token\":\"eyJhbGciOiJub25lIn0.eyJzdWIiOiJhZGEifQ.\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/jwt-decode\",\n    json={\n  \"token\": \"eyJhbGciOiJub25lIn0.eyJzdWIiOiJhZGEifQ.\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/jwt-decode\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"token\": \"eyJhbGciOiJub25lIn0.eyJzdWIiOiJhZGEifQ.\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.002,"x-paid-status":"coming_soon"}},"/v1/cron-parse":{"post":{"operationId":"cron_parse","summary":"Parse a cron expression","description":"Explain a 5- or 6-field cron string and list the next fire times in UTC. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"expression":"0 9 * * 1-5","count":3}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/cron-parse \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"expression\":\"0 9 * * 1-5\",\"count\":3}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/cron-parse\",\n    json={\n  \"expression\": \"0 9 * * 1-5\",\n  \"count\": 3\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/cron-parse\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"expression\": \"0 9 * * 1-5\",\n  \"count\": 3\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}},"/v1/gtin-checksum":{"post":{"operationId":"gtin_checksum","summary":"GTIN / EAN / UPC checksum","description":"Check or fill the check digit on a barcode number. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"code":"4006381333931","action":"check"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/gtin-checksum \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"code\":\"4006381333931\",\"action\":\"check\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/gtin-checksum\",\n    json={\n  \"code\": \"4006381333931\",\n  \"action\": \"check\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/gtin-checksum\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"code\": \"4006381333931\",\n  \"action\": \"check\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.002,"x-paid-status":"coming_soon"}},"/v1/sql-format":{"post":{"operationId":"sql_format","summary":"Format SQL","description":"Pretty-print a SQL query. This is a lightweight formatter, not a full SQL parser. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"sql":"select id,name from users where active=1 order by name"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/sql-format \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"sql\":\"select id,name from users where active=1 order by name\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/sql-format\",\n    json={\n  \"sql\": \"select id,name from users where active=1 order by name\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/sql-format\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"sql\": \"select id,name from users where active=1 order by name\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}},"/v1/unit-convert":{"post":{"operationId":"unit_convert","summary":"Convert units","description":"Convert length, mass, temperature, volume, time, area, speed, and data-size units. Examples are in curl, Python, and JavaScript on the homepage and /pricing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"value":10,"from":"km","to":"mi"}}}},"responses":{"200":{"description":"Tool result, plus quota and an upsell link to paid Apify actors for bulk work."},"400":{"description":"Bad input."},"401":{"description":"A key was sent and it is not valid."},"402":{"description":"Only on /v1/x402/* — payments are not enabled yet."},"413":{"description":"Body is larger than the free 16 KB cap."},"429":{"description":"Daily or burst limit reached."}},"x-examples":{"curl":"curl -sS https://tidybytetools.tidybytetools.workers.dev/v1/unit-convert \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":10,\"from\":\"km\",\"to\":\"mi\"}'","python":"import requests\n\nr = requests.post(\n    \"https://tidybytetools.tidybytetools.workers.dev/v1/unit-convert\",\n    json={\n  \"value\": 10,\n  \"from\": \"km\",\n  \"to\": \"mi\"\n},\n    # headers={\"Authorization\": \"Bearer tbt_YOUR_KEY\"},\n)\nprint(r.json())","javascript":"const res = await fetch(\"https://tidybytetools.tidybytetools.workers.dev/v1/unit-convert\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    // Authorization: \"Bearer tbt_YOUR_KEY\",\n  },\n  body: JSON.stringify({\n  \"value\": 10,\n  \"from\": \"km\",\n  \"to\": \"mi\"\n}),\n});\nconst data = await res.json();\nconsole.log(data);"},"x-planned-price-usd":0.005,"x-paid-status":"coming_soon"}}}}