{
  "openapi": "3.0.3",
  "info": {
    "title": "Tools That Don't Upload API",
    "description": "71 free API endpoints for file processing, code tools, converters, and more. No auth, CORS enabled, zero storage.",
    "version": "2.0.0",
    "contact": {
      "url": "https://toolsthatdontupload.com"
    }
  },
  "servers": [
    {
      "url": "https://toolsthatdontupload.com",
      "description": "Main Hub"
    },
    {
      "url": "https://audio-video-api.milkydotstudio.workers.dev",
      "description": "Audio/Video API"
    }
  ],
  "paths": {
    "/api/pdf-merge": {
      "post": {
        "summary": "Merge PDFs",
        "description": "Merge 2+ PDF files into one",
        "responses": {
          "200": {
            "description": "Merged PDF"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "files": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    },
                    "description": "PDF files"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/pdf-split": {
      "post": {
        "summary": "Split PDF",
        "description": "Split PDF by page ranges",
        "responses": {
          "200": {
            "description": "ZIP with split PDFs"
          }
        }
      }
    },
    "/api/pdf-rotate": {
      "post": {
        "summary": "Rotate PDF",
        "description": "Rotate PDF pages",
        "responses": {
          "200": {
            "description": "Rotated PDF"
          }
        }
      }
    },
    "/api/pdf-watermark": {
      "post": {
        "summary": "Watermark PDF",
        "description": "Add text watermark",
        "responses": {
          "200": {
            "description": "Watermarked PDF"
          }
        }
      }
    },
    "/api/pdf-metadata": {
      "post": {
        "summary": "PDF Metadata",
        "description": "Read/set PDF metadata",
        "responses": {
          "200": {
            "description": "Metadata JSON or updated PDF"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "PDF"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/pdf-extract": {
      "post": {
        "summary": "Extract Pages",
        "description": "Extract specific pages",
        "responses": {
          "200": {
            "description": "Extracted PDF"
          }
        }
      }
    },
    "/api/pdf-compress": {
      "post": {
        "summary": "Compress PDF",
        "description": "Compress PDF file size",
        "responses": {
          "200": {
            "description": "Compressed PDF"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "PDF"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/image-resize": {
      "post": {
        "summary": "Resize Image",
        "description": "Resize to specified dimensions",
        "responses": {
          "200": {
            "description": "Resized WebP"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Image"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/image-convert": {
      "post": {
        "summary": "Convert Image",
        "description": "Convert format (webp/jpeg/png)",
        "responses": {
          "200": {
            "description": "Converted image"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Image"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/image-compress": {
      "post": {
        "summary": "Compress Image",
        "description": "Compress to WebP",
        "responses": {
          "200": {
            "description": "Compressed WebP"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Image"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/audio-convert": {
      "post": {
        "summary": "Convert Audio",
        "description": "Convert audio format",
        "responses": {
          "200": {
            "description": "Converted audio"
          }
        },
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "mp3",
                "wav",
                "ogg",
                "m4a",
                "flac",
                "aac"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Audio"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/audio-trim": {
      "post": {
        "summary": "Trim Audio",
        "description": "Trim by timestamps",
        "responses": {
          "200": {
            "description": "Trimmed audio"
          }
        },
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "end",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Audio"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/audio-merge": {
      "post": {
        "summary": "Merge Audio",
        "description": "Merge 2+ audio files",
        "responses": {
          "200": {
            "description": "Merged audio"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "files": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    },
                    "description": "Audio files"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/video-compress": {
      "post": {
        "summary": "Compress Video",
        "description": "H.264 compression",
        "responses": {
          "200": {
            "description": "Compressed video"
          }
        },
        "parameters": [
          {
            "name": "crf",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 18,
              "maximum": 51,
              "default": 28
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Video"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/video-convert": {
      "post": {
        "summary": "Convert Video",
        "description": "Convert format",
        "responses": {
          "200": {
            "description": "Converted video"
          }
        },
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "mp4",
                "webm",
                "avi",
                "mkv",
                "mov"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Video"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/video-trim": {
      "post": {
        "summary": "Trim Video",
        "description": "Trim by timestamps",
        "responses": {
          "200": {
            "description": "Trimmed video"
          }
        },
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "end",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Video"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/video-to-audio": {
      "post": {
        "summary": "Video to Audio",
        "description": "Extract audio track",
        "responses": {
          "200": {
            "description": "Extracted audio"
          }
        },
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "mp3"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Video"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/code-format": {
      "post": {
        "summary": "Format Code",
        "description": "Format JSON/HTML/CSS/JS/SQL",
        "responses": {
          "200": {
            "description": "Formatted code"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "language": {
                    "type": "string",
                    "enum": [
                      "json",
                      "html",
                      "css",
                      "js",
                      "sql"
                    ]
                  }
                },
                "required": [
                  "code"
                ]
              }
            }
          }
        }
      }
    },
    "/api/code-minify": {
      "post": {
        "summary": "Minify Code",
        "description": "Strip comments/whitespace",
        "responses": {
          "200": {
            "description": "Minified code"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string"
                  }
                },
                "required": [
                  "code"
                ]
              }
            }
          }
        }
      }
    },
    "/api/regex-test": {
      "post": {
        "summary": "Test Regex",
        "description": "Test regex pattern",
        "responses": {
          "200": {
            "description": "Matches"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "pattern": {
                    "type": "string"
                  },
                  "text": {
                    "type": "string"
                  },
                  "flags": {
                    "type": "string"
                  }
                },
                "required": [
                  "pattern",
                  "text"
                ]
              }
            }
          }
        }
      }
    },
    "/api/sql-format": {
      "post": {
        "summary": "Format SQL",
        "description": "Format SQL with line-breaks",
        "responses": {
          "200": {
            "description": "Formatted SQL"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sql": {
                    "type": "string"
                  }
                },
                "required": [
                  "sql"
                ]
              }
            }
          }
        }
      }
    },
    "/api/code-diff": {
      "post": {
        "summary": "Code Diff",
        "description": "Diff two texts",
        "responses": {
          "200": {
            "description": "Diff result"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text1": {
                    "type": "string"
                  },
                  "text2": {
                    "type": "string"
                  }
                },
                "required": [
                  "text1",
                  "text2"
                ]
              }
            }
          }
        }
      }
    },
    "/api/unit-convert": {
      "post": {
        "summary": "Unit Convert",
        "description": "Convert between units",
        "responses": {
          "200": {
            "description": "Converted value"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "number"
                  },
                  "from": {
                    "type": "string"
                  },
                  "to": {
                    "type": "string"
                  }
                },
                "required": [
                  "value",
                  "from",
                  "to"
                ]
              }
            }
          }
        }
      }
    },
    "/api/color-convert": {
      "post": {
        "summary": "Color Convert",
        "description": "Convert HEX/RGB/HSL",
        "responses": {
          "200": {
            "description": "Color in all formats"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "color": {
                    "type": "string"
                  }
                },
                "required": [
                  "color"
                ]
              }
            }
          }
        }
      }
    },
    "/api/timezone": {
      "post": {
        "summary": "Timezone Convert",
        "description": "Convert time between zones",
        "responses": {
          "200": {
            "description": "Converted time"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "from": {
                    "type": "string"
                  },
                  "to": {
                    "type": "string"
                  }
                },
                "required": [
                  "from",
                  "to"
                ]
              }
            }
          }
        }
      }
    },
    "/api/number-base": {
      "post": {
        "summary": "Number Base",
        "description": "Convert between number bases",
        "responses": {
          "200": {
            "description": "All bases"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "string"
                  },
                  "from": {
                    "type": "integer"
                  }
                },
                "required": [
                  "value",
                  "from"
                ]
              }
            }
          }
        }
      }
    },
    "/api/currency": {
      "post": {
        "summary": "Currency Convert",
        "description": "Approximate currency conversion",
        "responses": {
          "200": {
            "description": "Converted amount"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "amount": {
                    "type": "number"
                  },
                  "from": {
                    "type": "string"
                  },
                  "to": {
                    "type": "string"
                  }
                },
                "required": [
                  "amount",
                  "from",
                  "to"
                ]
              }
            }
          }
        }
      }
    },
    "/api/lorem": {
      "get": {
        "summary": "Lorem Ipsum",
        "description": "Generate placeholder text",
        "responses": {
          "200": {
            "description": "Lorem ipsum text"
          }
        },
        "parameters": [
          {
            "name": "paragraphs",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "words",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          }
        ]
      }
    },
    "/api/slugify": {
      "post": {
        "summary": "Slugify",
        "description": "Generate URL slug",
        "responses": {
          "200": {
            "description": "URL slug"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  }
                },
                "required": [
                  "text"
                ]
              }
            }
          }
        }
      }
    },
    "/api/case-convert": {
      "post": {
        "summary": "Case Convert",
        "description": "Convert to 10 text cases",
        "responses": {
          "200": {
            "description": "All case variants"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  }
                },
                "required": [
                  "text"
                ]
              }
            }
          }
        }
      }
    },
    "/api/html-escape": {
      "post": {
        "summary": "HTML Escape",
        "description": "Escape/unescape HTML",
        "responses": {
          "200": {
            "description": "Escaped text"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  },
                  "mode": {
                    "type": "string",
                    "enum": [
                      "escape",
                      "unescape"
                    ]
                  }
                },
                "required": [
                  "text"
                ]
              }
            }
          }
        }
      }
    },
    "/api/password-gen": {
      "get": {
        "summary": "Password Generator",
        "description": "Generate strong passwords",
        "responses": {
          "200": {
            "description": "Generated passwords"
          }
        },
        "parameters": [
          {
            "name": "length",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 16
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1
            }
          }
        ]
      }
    },
    "/api/jwt-decode": {
      "post": {
        "summary": "JWT Decode",
        "description": "Decode JWT without verification",
        "responses": {
          "200": {
            "description": "Decoded JWT"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "token": {
                    "type": "string"
                  }
                },
                "required": [
                  "token"
                ]
              }
            }
          }
        }
      }
    },
    "/api/hmac": {
      "post": {
        "summary": "HMAC",
        "description": "Generate HMAC signature",
        "responses": {
          "200": {
            "description": "HMAC hash"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "message": {
                    "type": "string"
                  },
                  "secret": {
                    "type": "string"
                  },
                  "algorithm": {
                    "type": "string",
                    "enum": [
                      "SHA-256",
                      "SHA-384",
                      "SHA-512"
                    ]
                  }
                },
                "required": [
                  "message",
                  "secret"
                ]
              }
            }
          }
        }
      }
    },
    "/api/aes-encrypt": {
      "post": {
        "summary": "AES Encrypt",
        "description": "AES-GCM encrypt text",
        "responses": {
          "200": {
            "description": "Encrypted data"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string"
                  }
                },
                "required": [
                  "text",
                  "password"
                ]
              }
            }
          }
        }
      }
    },
    "/api/aes-decrypt": {
      "post": {
        "summary": "AES Decrypt",
        "description": "AES-GCM decrypt",
        "responses": {
          "200": {
            "description": "Decrypted text"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "encrypted": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string"
                  },
                  "iv": {
                    "type": "string"
                  },
                  "salt": {
                    "type": "string"
                  }
                },
                "required": [
                  "encrypted",
                  "password",
                  "iv",
                  "salt"
                ]
              }
            }
          }
        }
      }
    },
    "/api/html-to-md": {
      "post": {
        "summary": "HTML to Markdown",
        "description": "Convert HTML to Markdown",
        "responses": {
          "200": {
            "description": "Markdown text"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "html": {
                    "type": "string"
                  }
                },
                "required": [
                  "html"
                ]
              }
            }
          }
        }
      }
    },
    "/api/robots-gen": {
      "post": {
        "summary": "Robots.txt Generator",
        "description": "Generate robots.txt",
        "responses": {
          "200": {
            "description": "robots.txt content"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string"
                  },
                  "disallow": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "domain"
                ]
              }
            }
          }
        }
      }
    },
    "/api/sitemap-gen": {
      "post": {
        "summary": "Sitemap Generator",
        "description": "Generate sitemap XML",
        "responses": {
          "200": {
            "description": "Sitemap XML"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string"
                  },
                  "urls": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "domain",
                  "urls"
                ]
              }
            }
          }
        }
      }
    },
    "/api/meta-gen": {
      "post": {
        "summary": "Meta Tag Generator",
        "description": "Generate meta/OG/Twitter tags",
        "responses": {
          "200": {
            "description": "HTML meta tags"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  }
                },
                "required": [
                  "title"
                ]
              }
            }
          }
        }
      }
    },
    "/api/whois": {
      "post": {
        "summary": "WHOIS Lookup",
        "description": "Domain WHOIS via RDAP",
        "responses": {
          "200": {
            "description": "WHOIS data"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string"
                  }
                },
                "required": [
                  "domain"
                ]
              }
            }
          }
        }
      }
    },
    "/api/xml-to-json": {
      "post": {
        "summary": "XML to JSON",
        "description": "Convert XML to JSON",
        "responses": {
          "200": {
            "description": "JSON object"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "xml": {
                    "type": "string"
                  }
                },
                "required": [
                  "xml"
                ]
              }
            }
          }
        }
      }
    },
    "/api/json-to-xml": {
      "post": {
        "summary": "JSON to XML",
        "description": "Convert JSON to XML",
        "responses": {
          "200": {
            "description": "XML string"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "json": {
                    "type": "object"
                  }
                },
                "required": [
                  "json"
                ]
              }
            }
          }
        }
      }
    },
    "/api/json-schema": {
      "post": {
        "summary": "JSON Schema",
        "description": "Generate schema from sample",
        "responses": {
          "200": {
            "description": "JSON Schema"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "json": {
                    "type": "object"
                  }
                },
                "required": [
                  "json"
                ]
              }
            }
          }
        }
      }
    },
    "/api/toml-to-json": {
      "post": {
        "summary": "TOML to JSON",
        "description": "Convert TOML to JSON",
        "responses": {
          "200": {
            "description": "JSON object"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "toml": {
                    "type": "string"
                  }
                },
                "required": [
                  "toml"
                ]
              }
            }
          }
        }
      }
    },
    "/api/html-to-text": {
      "post": {
        "summary": "HTML to Text",
        "description": "Strip HTML tags",
        "responses": {
          "200": {
            "description": "Plain text"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "html": {
                    "type": "string"
                  }
                },
                "required": [
                  "html"
                ]
              }
            }
          }
        }
      }
    },
    "/api/md-table": {
      "post": {
        "summary": "Markdown Table",
        "description": "Generate MD table",
        "responses": {
          "200": {
            "description": "Markdown table"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "headers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "rows": {
                    "type": "array"
                  }
                },
                "required": [
                  "headers",
                  "rows"
                ]
              }
            }
          }
        }
      }
    },
    "/api/date-calc": {
      "post": {
        "summary": "Date Calculator",
        "description": "Calculate date differences",
        "responses": {
          "200": {
            "description": "Date calculation"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "date1": {
                    "type": "string"
                  },
                  "date2": {
                    "type": "string"
                  }
                },
                "required": [
                  "date1"
                ]
              }
            }
          }
        }
      }
    },
    "/api/cron-parse": {
      "post": {
        "summary": "Cron Parser",
        "description": "Parse cron expression",
        "responses": {
          "200": {
            "description": "Human-readable description"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "cron": {
                    "type": "string"
                  }
                },
                "required": [
                  "cron"
                ]
              }
            }
          }
        }
      }
    },
    "/api/reading-time": {
      "post": {
        "summary": "Reading Time",
        "description": "Estimate reading time",
        "responses": {
          "200": {
            "description": "Reading time estimate"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  }
                },
                "required": [
                  "text"
                ]
              }
            }
          }
        }
      }
    },
    "/api/email-validate": {
      "post": {
        "summary": "Email Validate",
        "description": "Validate email + MX check",
        "responses": {
          "200": {
            "description": "Validation result"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string"
                  }
                },
                "required": [
                  "email"
                ]
              }
            }
          }
        }
      }
    },
    "/api/ai-translate": {
      "post": {
        "summary": "AI Translate",
        "description": "Translate text (Workers AI)",
        "responses": {
          "200": {
            "description": "Translated text"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  },
                  "target": {
                    "type": "string"
                  }
                },
                "required": [
                  "text",
                  "target"
                ]
              }
            }
          }
        }
      }
    },
    "/api/ai-summarize": {
      "post": {
        "summary": "AI Summarize",
        "description": "Summarize text (Workers AI)",
        "responses": {
          "200": {
            "description": "Summary"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  }
                },
                "required": [
                  "text"
                ]
              }
            }
          }
        }
      }
    },
    "/api/ai-ocr": {
      "post": {
        "summary": "AI OCR",
        "description": "Extract text from image",
        "responses": {
          "200": {
            "description": "Extracted text"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Image"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/ai-image": {
      "post": {
        "summary": "AI Image Gen",
        "description": "Generate image from prompt",
        "responses": {
          "200": {
            "description": "Generated image"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "prompt": {
                    "type": "string"
                  }
                },
                "required": [
                  "prompt"
                ]
              }
            }
          }
        }
      }
    },
    "/api/health": {
      "get": {
        "summary": "Health Check",
        "description": "Hub health status",
        "responses": {
          "200": {
            "description": "Status JSON"
          }
        }
      }
    },
    "/api/echo": {
      "post": {
        "summary": "Echo",
        "description": "Echo back request",
        "responses": {
          "200": {
            "description": "Request echo"
          }
        }
      }
    },
    "/api/placeholder": {
      "get": {
        "summary": "Placeholder Image",
        "description": "Generate placeholder SVG",
        "responses": {
          "200": {
            "description": "SVG image"
          }
        },
        "parameters": [
          {
            "name": "w",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "h",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "text",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/ip-info": {
      "get": {
        "summary": "IP Info",
        "description": "Get client IP",
        "responses": {
          "200": {
            "description": "IP info JSON"
          }
        }
      }
    }
  }
}