{
  "name": "formatho-api",
  "version": "v1",
  "status": "preview",
  "description": "Free, privacy-first developer tool APIs on Cloudflare's edge. Query params pass through 1:1 to each tool. Anonymous use is rate-limited per IP; API keys with higher limits are coming. Zero tracking, zero payload logging.",
  "rate_limits": {
    "anonymous": "30 requests / 60s per IP (429 + Retry-After when exceeded)",
    "keyed": "higher limits — API keys coming soon",
    "unmetered": "legacy per-tool *.workers.dev/api URLs"
  },
  "routes": [
    {
      "path": "/v1/json-format",
      "method": "GET, POST",
      "description": "Format, minify and validate JSON (json, indent)",
      "legacy_endpoint": "https://json-formatter-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/base64",
      "method": "GET, POST",
      "description": "Base64 encode/decode text (text, mode)",
      "legacy_endpoint": "https://base64-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/url-encode",
      "method": "GET, POST",
      "description": "URL encode/decode (text, mode)",
      "legacy_endpoint": "https://url-encoder-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/md5",
      "method": "GET, POST",
      "description": "MD5 hash of text (text)",
      "legacy_endpoint": "https://md5-generator-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/sha256",
      "method": "GET, POST",
      "description": "SHA-256 hash of text (text)",
      "legacy_endpoint": "https://sha256-generator-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/hash",
      "method": "GET, POST",
      "description": "Hash text with a chosen algorithm (algorithm, text)",
      "legacy_endpoint": "https://hash-generator-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/uuid",
      "method": "GET, POST",
      "description": "Generate UUID v4 (count, uppercase)",
      "legacy_endpoint": "https://uuid-generator-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/random-string",
      "method": "GET, POST",
      "description": "Random string generator (length, charset)",
      "legacy_endpoint": "https://random-string-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/slug",
      "method": "GET, POST",
      "description": "Slugify text into URL-safe form (text)",
      "legacy_endpoint": "https://slug-generator-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/timestamp",
      "method": "GET, POST",
      "description": "Unix ⇄ ISO timestamp conversion (unix or iso)",
      "legacy_endpoint": "https://timestamp-converter-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/jwt-decode",
      "method": "GET, POST",
      "description": "Decode JWT header/payload (token)",
      "legacy_endpoint": "https://jwt-decoder-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/cron-parse",
      "method": "GET, POST",
      "description": "Explain a cron expression, next runs (expr)",
      "legacy_endpoint": "https://cron-parser-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/case-convert",
      "method": "GET, POST",
      "description": "camel/snake/kebab/upper/lower case (text, to)",
      "legacy_endpoint": "https://case-converter-formatho.filesformatho.workers.dev/api"
    },
    {
      "path": "/v1/lorem",
      "method": "GET, POST",
      "description": "Lorem ipsum paragraphs/words (paragraphs, words)",
      "legacy_endpoint": "https://lorem-ipsum-formatho.filesformatho.workers.dev/api"
    }
  ],
  "docs": "https://api.formatho.com/"
}