{"openapi":"3.0.3","info":{"title":"Kael API ⚡","description":"Free developer utility API with 50 endpoints. 免费开发者工具API，提供50个实用接口。","version":"2.0.0","contact":{"name":"Kael API","url":"https://www.kael.ink","email":"kael@kael.ink"},"license":{"name":"Free to Use","url":"https://www.kael.ink/docs"}},"servers":[{"url":"https://www.kael.ink","description":"Production (AWS Singapore)"}],"tags":[{"name":"Encoding & Security","description":"Hashing, encoding, passwords, JWT"},{"name":"Formatting","description":"JSON, CSS, SQL, Markdown formatting"},{"name":"Conversion","description":"Color, bytes, date, timestamp conversion"},{"name":"Generation","description":"UUID, QR, random, Lorem, placeholders"},{"name":"Text","description":"Regex, diff, text stats, cron parsing"},{"name":"Network","description":"IP, headers, user-agent, URL shortener"},{"name":"China Tools","description":"ID card validation, phone number lookup"},{"name":"System","description":"Health, API keys, tiers"},{"name":"Transform","description":"Data transformation endpoints"},{"name":"Security","description":"Security and crypto endpoints"}],"paths":{"/api/health":{"get":{"tags":["System"],"summary":"Health check","responses":{"200":{"description":"Service status"}}}},"/api/uuid":{"get":{"tags":["Generation"],"summary":"Generate UUID v4","parameters":[{"name":"count","in":"query","schema":{"type":"integer","default":1,"maximum":100},"description":"Number of UUIDs"}],"responses":{"200":{"description":"UUID(s) generated"}}}},"/api/hash":{"get":{"tags":["Encoding & Security"],"summary":"Generate hash (MD5/SHA1/SHA256/SHA512)","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string"}},{"name":"algo","in":"query","schema":{"type":"string","enum":["md5","sha1","sha256","sha512"],"default":"sha256"}}],"responses":{"200":{"description":"Hash result"}}}},"/api/encode":{"get":{"tags":["Encoding & Security"],"summary":"Base64/URL encode/decode","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","schema":{"type":"string","enum":["base64","url"],"default":"base64"}},{"name":"action","in":"query","schema":{"type":"string","enum":["encode","decode"],"default":"encode"}}],"responses":{"200":{"description":"Encoded/decoded result"}}}},"/api/password":{"get":{"tags":["Encoding & Security"],"summary":"Generate secure password","parameters":[{"name":"length","in":"query","schema":{"type":"integer","default":16}},{"name":"numbers","in":"query","schema":{"type":"boolean","default":true}},{"name":"symbols","in":"query","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Generated password"}}}},"/api/password-strength":{"post":{"tags":["Encoding & Security"],"summary":"Check password strength","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string"}},"required":["password"]}}}},"responses":{"200":{"description":"Strength assessment"}}}},"/api/jwt/decode":{"get":{"tags":["Encoding & Security"],"summary":"Decode JWT token","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Decoded JWT"}}}},"/api/json/validate":{"post":{"tags":["Formatting"],"summary":"Validate JSON","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"json":{"type":"string"}},"required":["json"]}}}},"responses":{"200":{"description":"Validation result"}}}},"/api/json/format":{"post":{"tags":["Formatting"],"summary":"Format/minify JSON","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"json":{"type":"string"},"indent":{"type":"integer","default":2}},"required":["json"]}}}},"responses":{"200":{"description":"Formatted JSON"}}}},"/api/css/minify":{"post":{"tags":["Formatting"],"summary":"Minify CSS","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"css":{"type":"string"}},"required":["css"]}}}},"responses":{"200":{"description":"Minified CSS"}}}},"/api/sql/format":{"post":{"tags":["Formatting"],"summary":"Format SQL query","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sql":{"type":"string"}},"required":["sql"]}}}},"responses":{"200":{"description":"Formatted SQL"}}}},"/api/md2html":{"post":{"tags":["Formatting"],"summary":"Convert Markdown to HTML","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"markdown":{"type":"string"}},"required":["markdown"]}}}},"responses":{"200":{"description":"HTML output"}}}},"/api/color":{"get":{"tags":["Conversion"],"summary":"Convert color formats (HEX/RGB/HSL)","parameters":[{"name":"hex","in":"query","schema":{"type":"string"},"description":"HEX color (e.g. #ff5733)"}],"responses":{"200":{"description":"Color conversions"}}}},"/api/bytes":{"get":{"tags":["Conversion"],"summary":"Convert storage units (B/KB/MB/GB/TB/PB)","parameters":[{"name":"value","in":"query","required":true,"schema":{"type":"number"}},{"name":"from","in":"query","required":true,"schema":{"type":"string","enum":["B","KB","MB","GB","TB","PB"]}}],"responses":{"200":{"description":"Conversion results"}}}},"/api/date":{"get":{"tags":["Conversion"],"summary":"Date/epoch converter with timezone support","parameters":[{"name":"date","in":"query","schema":{"type":"string"}},{"name":"tz","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Date details"}}}},"/api/ts":{"get":{"tags":["Conversion"],"summary":"Current Unix timestamp","responses":{"200":{"description":"Timestamp"}}}},"/api/chmod":{"get":{"tags":["Conversion"],"summary":"Unix permissions calculator (numeric ↔ symbolic)","parameters":[{"name":"mode","in":"query","required":true,"schema":{"type":"string"},"description":"e.g. 755 or rwxr-xr-x"}],"responses":{"200":{"description":"Permission details"}}}},"/api/qr":{"get":{"tags":["Generation"],"summary":"Generate QR code","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string"}},{"name":"size","in":"query","schema":{"type":"integer","default":200}}],"responses":{"200":{"description":"QR code image (PNG)"}}}},"/api/random":{"get":{"tags":["Generation"],"summary":"Generate random number or string","parameters":[{"name":"min","in":"query","schema":{"type":"integer","default":0}},{"name":"max","in":"query","schema":{"type":"integer","default":100}},{"name":"type","in":"query","schema":{"type":"string","enum":["number","string"],"default":"number"}}],"responses":{"200":{"description":"Random result"}}}},"/api/lorem":{"get":{"tags":["Generation"],"summary":"Generate Lorem Ipsum text","parameters":[{"name":"paragraphs","in":"query","schema":{"type":"integer","default":1}}],"responses":{"200":{"description":"Lorem ipsum text"}}}},"/api/placeholder":{"get":{"tags":["Generation"],"summary":"Generate placeholder image","parameters":[{"name":"w","in":"query","schema":{"type":"integer","default":300}},{"name":"h","in":"query","schema":{"type":"integer","default":200}},{"name":"bg","in":"query","schema":{"type":"string"}},{"name":"text","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Placeholder image (PNG/SVG)"}}}},"/api/slug":{"get":{"tags":["Generation"],"summary":"Generate URL slug","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"URL slug"}}}},"/api/regex":{"post":{"tags":["Text"],"summary":"Test regex pattern","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"pattern":{"type":"string"},"text":{"type":"string"},"flags":{"type":"string"}},"required":["pattern","text"]}}}},"responses":{"200":{"description":"Match results"}}}},"/api/diff":{"post":{"tags":["Text"],"summary":"Compare two texts","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text1":{"type":"string"},"text2":{"type":"string"}},"required":["text1","text2"]}}}},"responses":{"200":{"description":"Diff result"}}}},"/api/text/stats":{"post":{"tags":["Text"],"summary":"Text statistics (word count, reading time)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}}}},"responses":{"200":{"description":"Text statistics"}}}},"/api/cron":{"get":{"tags":["Text"],"summary":"Parse cron expression","parameters":[{"name":"expr","in":"query","required":true,"schema":{"type":"string"},"description":"Cron expression (e.g. */5 * * * *)"}],"responses":{"200":{"description":"Cron details and next runs"}}}},"/api/ip":{"get":{"tags":["Network"],"summary":"Get your public IP","responses":{"200":{"description":"Public IP address"}}}},"/api/ip/parse":{"get":{"tags":["Network"],"summary":"Parse IP/CIDR subnet","parameters":[{"name":"ip","in":"query","required":true,"schema":{"type":"string"},"description":"IP or CIDR (e.g. 192.168.1.0/24)"}],"responses":{"200":{"description":"Subnet details"}}}},"/api/headers":{"get":{"tags":["Network"],"summary":"Echo HTTP request headers","responses":{"200":{"description":"Request headers"}}}},"/api/useragent":{"get":{"tags":["Network"],"summary":"Parse User-Agent string","parameters":[{"name":"ua","in":"query","schema":{"type":"string"},"description":"UA string (defaults to request UA)"}],"responses":{"200":{"description":"Parsed UA details"}}}},"/api/shorten":{"get":{"tags":["Network"],"summary":"Shorten URL","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Shortened URL"}}}},"/api/screenshot":{"get":{"tags":["Network"],"summary":"Take website screenshot (Pro)","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"}},{"name":"width","in":"query","schema":{"type":"integer","default":1280}},{"name":"height","in":"query","schema":{"type":"integer","default":800}}],"responses":{"200":{"description":"Screenshot image (PNG)"}},"security":[{"ApiKeyHeader":[]}]}},"/api/idcard/validate":{"post":{"tags":["China Tools"],"summary":"Validate Chinese 18-digit ID card number","description":"Validates checksum, extracts birth date, gender, age, and issuing region.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"idcard":{"type":"string","description":"18-digit Chinese ID card number"}},"required":["idcard"]}}}},"responses":{"200":{"description":"Validation result with extracted info"}}}},"/api/phone/validate":{"post":{"tags":["China Tools"],"summary":"Validate Chinese phone number + carrier detection","description":"Validates format and identifies carrier (移动/联通/电信/广电).","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"11-digit Chinese phone number"}},"required":["phone"]}}}},"responses":{"200":{"description":"Validation result with carrier info"}}}},"/api/md2image":{"post":{"tags":["Formatting"],"summary":"Render Markdown to image","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"markdown":{"type":"string"}},"required":["markdown"]}}}},"responses":{"200":{"description":"Rendered image (PNG)"}}}},"/api/keys/register":{"post":{"tags":["System"],"summary":"Register a free API key","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"200":{"description":"API key"}}}},"/api/keys/info":{"get":{"tags":["System"],"summary":"Get API key info","security":[{"ApiKeyHeader":[]}],"responses":{"200":{"description":"Key details and usage"}}}},"/api/tiers":{"get":{"tags":["System"],"summary":"List pricing tiers","responses":{"200":{"description":"Available tiers"}}}},"/api/html/encode":{"get":{"tags":["Encoding"],"summary":"HTML Encode — HTML实体编码","description":"Encode special characters to HTML entities. 将特殊字符转换为HTML实体。","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string"},"description":"Text to encode"}],"responses":{"200":{"description":"Encoded HTML text"}}}},"/api/html/decode":{"get":{"tags":["Encoding"],"summary":"HTML Decode — HTML实体解码","description":"Decode HTML entities back to characters. 将HTML实体还原为字符。","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string"},"description":"HTML-encoded text to decode"}],"responses":{"200":{"description":"Decoded text"}}}},"/api/base/convert":{"get":{"tags":["Utility"],"summary":"Base Convert — 进制转换","description":"Convert numbers between bases (2-36). 在不同进制之间转换数字。","parameters":[{"name":"number","in":"query","required":true,"schema":{"type":"string"},"description":"Number to convert"},{"name":"from","in":"query","schema":{"type":"integer","default":10},"description":"Source base (2-36)"},{"name":"to","in":"query","schema":{"type":"integer","default":16},"description":"Target base (2-36)"}],"responses":{"200":{"description":"Converted number"}}}},"/api/url/parse":{"get":{"tags":["Utility"],"summary":"URL Parse — URL解析","description":"Parse URL into components (protocol, host, path, query, etc). 解析URL为各个组成部分。","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"description":"URL to parse"}],"responses":{"200":{"description":"Parsed URL components"}}}},"/api/case/convert":{"get":{"tags":["Utility"],"summary":"Case Convert — 大小写转换","description":"Convert text between camelCase, snake_case, kebab-case, PascalCase, etc. 各种命名规范转换。","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string"},"description":"Text to convert"},{"name":"to","in":"query","required":true,"schema":{"type":"string","enum":["camel","snake","kebab","pascal","upper","lower","title"]},"description":"Target case"}],"responses":{"200":{"description":"Converted text"}}}},"/api/json/yaml":{"post":{"tags":["Transform"],"summary":"JSON to YAML — JSON转YAML","description":"Convert JSON to YAML format. 将JSON转换为YAML格式。","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"json":{"type":"string","description":"JSON string or object to convert"}}}}}},"responses":{"200":{"description":"YAML output"}}}},"/api/html/minify":{"post":{"tags":["Transform"],"summary":"HTML Minify — HTML压缩","description":"Minify HTML by removing whitespace and comments. 压缩HTML代码。","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"html":{"type":"string","description":"HTML to minify"}}}}}},"responses":{"200":{"description":"Minified HTML"}}}},"/api/string/reverse":{"get":{"tags":["Utility"],"summary":"String Reverse — 字符串反转","description":"Reverse a string. 反转字符串。","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string"},"description":"Text to reverse"}],"responses":{"200":{"description":"Reversed string"}}}},"/api/string/truncate":{"get":{"tags":["Utility"],"summary":"String Truncate — 字符串截断","description":"Truncate string to specified length with ellipsis. 截断字符串到指定长度。","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string"},"description":"Text to truncate"},{"name":"length","in":"query","schema":{"type":"integer","default":100},"description":"Max length"}],"responses":{"200":{"description":"Truncated string"}}}},"/api/ip/validate":{"get":{"tags":["Network"],"summary":"IP Validate — IP地址验证","description":"Validate if a string is a valid IPv4 or IPv6 address. 验证IP地址是否合法。","parameters":[{"name":"ip","in":"query","required":true,"schema":{"type":"string"},"description":"IP address to validate"}],"responses":{"200":{"description":"Validation result"}}}},"/api/jwt/generate":{"post":{"tags":["Security"],"summary":"JWT Generate — JWT生成","description":"Generate a JWT token with custom payload and secret. 使用自定义载荷和密钥生成JWT令牌。","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"payload":{"type":"object"},"secret":{"type":"string"},"expiresIn":{"type":"string","default":"1h"}}}}}},"responses":{"200":{"description":"Generated JWT token"}}}},"/api/crypto/encrypt":{"post":{"tags":["Security"],"summary":"AES Encrypt — AES加密","description":"Encrypt text using AES-256-CBC. AES-256-CBC加密文本。","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string"},"key":{"type":"string"}},"required":["text","key"]}}}},"responses":{"200":{"description":"Encrypted ciphertext"}}}},"/api/crypto/decrypt":{"post":{"tags":["Security"],"summary":"AES Decrypt — AES解密","description":"Decrypt AES-256-CBC encrypted text. AES-256-CBC解密文本。","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"encrypted":{"type":"string"},"key":{"type":"string"}},"required":["encrypted","key"]}}}},"responses":{"200":{"description":"Decrypted plaintext"}}}}},"components":{"securitySchemes":{"ApiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Optional API key for higher rate limits. Register for free at POST /api/keys/register"}}}}