{"openapi":"3.0.3","info":{"title":"DevToolsHub Public API","version":"1.0.0","description":"Free developer utilities as JSON endpoints. No API key required. Rate limit: 60 requests/minute per IP. Every response uses the envelope { ok, data } on success or { ok, error } on failure."},"servers":[{"url":"https://devtoolshub.tools/api/v1"}],"paths":{"/uuid":{"get":{"summary":"Generate UUID v4 values","parameters":[{"name":"count","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":1}}],"responses":{"200":{"description":"UUIDs generated","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"uuids":{"type":"array","items":{"type":"string","format":"uuid"}},"count":{"type":"integer"},"version":{"type":"integer"}}}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"}}}}}}}}},"/hash":{"get":{"summary":"Hash text (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 computed","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"algo":{"type":"string"},"hash":{"type":"string"},"length":{"type":"integer"}}}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"}}}}}}}},"post":{"summary":"Hash text (md5, sha1, sha256, sha512)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string"},"algo":{"type":"string","enum":["md5","sha1","sha256","sha512"]}}}}}},"responses":{"200":{"description":"Hash computed"},"400":{"description":"Invalid body"}}}},"/base64":{"get":{"summary":"Base64 encode or decode","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string"}},{"name":"action","in":"query","schema":{"type":"string","enum":["encode","decode"],"default":"encode"}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"action":{"type":"string"},"result":{"type":"string"}}}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"}}}}}}}},"post":{"summary":"Base64 encode or decode","responses":{"200":{"description":"Result"}}}},"/json/validate":{"post":{"summary":"Validate JSON","description":"Send { \"json\": \"<string>\" } or the raw document as the body.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Validation result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"valid":{"type":"boolean"},"error":{"type":"string","nullable":true},"line":{"type":"integer","nullable":true},"column":{"type":"integer","nullable":true}}}}}}}}}}},"/jwt/decode":{"get":{"summary":"Decode a JWT (no signature verification)","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Decoded token","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"header":{"type":"object"},"payload":{"type":"object"},"expired":{"type":"boolean","nullable":true},"exp":{"type":"integer","nullable":true}}}}}}}},"400":{"description":"Invalid token","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"}}}}}}}},"post":{"summary":"Decode a JWT (no signature verification)","responses":{"200":{"description":"Decoded token"}}}},"/cron/next":{"get":{"summary":"Parse a cron expression and list next run times (UTC)","parameters":[{"name":"expr","in":"query","required":true,"schema":{"type":"string"},"example":"0 9 * * 1-5"},{"name":"count","in":"query","schema":{"type":"integer","minimum":1,"maximum":20,"default":5}}],"responses":{"200":{"description":"Parsed expression with next runs"},"400":{"description":"Invalid expression","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"}}}}}}}}},"/time":{"get":{"summary":"Current time (ISO, unix, unix_ms, UTC string)","responses":{"200":{"description":"Current time"}}}}}}