{"openapi":"3.1.0","info":{"title":"Grasany Tools API","version":"0.3.0","description":"Free stateless utilities. File tools run locally and are available as browser workflows."},"servers":[{"url":"https://tools.grasany.com"}],"paths":{"/api/tools":{"get":{"operationId":"catalog","responses":{"200":{"description":"All available browser tools"}}}},"/api/run":{"post":{"operationId":"runTool","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"tool":{"const":"guide.reply"},"params":{"type":"object","properties":{"input":{"type":"string","minLength":1,"maxLength":500}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"finance.emi"},"params":{"type":"object","properties":{"principal":{"type":"number","description":"Principal in INR","minimum":0,"maximum":1000000000000},"annualRate":{"type":"number","description":"Initial annual nominal interest (%)","minimum":0,"maximum":1000},"months":{"type":"integer","description":"Original whole months","minimum":1,"maximum":1200},"interestMethod":{"type":"string","enum":["reducing","flat"]},"rateType":{"type":"string","enum":["fixed","floating"]},"repayment":{"type":"string","enum":["emi","equalPrincipal","interestOnly"]},"dayCount":{"type":"string","enum":["monthly","actual365","actualActual","actual360"]},"startDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"rateReset":{"type":"string","enum":["payment","tenure"]},"rateChanges":{"type":"array","maxItems":100,"items":{"type":"object","properties":{"annualRate":{"type":"number","description":"New annual nominal interest (%)","minimum":0,"maximum":1000},"month":{"type":"integer","description":"Effective from start of this loan month","minimum":1,"maximum":1200},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"required":["annualRate"],"additionalProperties":false,"oneOf":[{"required":["month"],"not":{"required":["date"]}},{"required":["date"],"not":{"required":["month"]}}]}},"paymentAmount":{"type":"number","description":"Optional current EMI for floating keep-EMI scenarios","minimum":0.01,"maximum":1000000000000},"flatRebate":{"type":"string","enum":["none","unearned"]}},"required":["principal","annualRate","months"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"finance.prepayment"},"params":{"type":"object","properties":{"principal":{"type":"number","description":"Principal in INR","minimum":0,"maximum":1000000000000},"annualRate":{"type":"number","description":"Initial annual nominal interest (%)","minimum":0,"maximum":1000},"months":{"type":"integer","description":"Original whole months","minimum":1,"maximum":1200},"interestMethod":{"type":"string","enum":["reducing","flat"]},"rateType":{"type":"string","enum":["fixed","floating"]},"repayment":{"type":"string","enum":["emi","equalPrincipal","interestOnly"]},"dayCount":{"type":"string","enum":["monthly","actual365","actualActual","actual360"]},"startDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"rateReset":{"type":"string","enum":["payment","tenure"]},"rateChanges":{"type":"array","maxItems":100,"items":{"type":"object","properties":{"annualRate":{"type":"number","description":"New annual nominal interest (%)","minimum":0,"maximum":1000},"month":{"type":"integer","description":"Effective from start of this loan month","minimum":1,"maximum":1200},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"required":["annualRate"],"additionalProperties":false,"oneOf":[{"required":["month"],"not":{"required":["date"]}},{"required":["date"],"not":{"required":["month"]}}]}},"paymentAmount":{"type":"number","description":"Optional current EMI for floating keep-EMI scenarios","minimum":0.01,"maximum":1000000000000},"flatRebate":{"type":"string","enum":["none","unearned"]},"extraMonthly":{"type":"number","description":"Extra monthly payment","minimum":0,"maximum":1000000000000},"extraStartMonth":{"type":"integer","description":"Start month","minimum":1,"maximum":1200},"lumpSum":{"type":"number","description":"One-time payment","minimum":0,"maximum":1000000000000},"lumpMonth":{"type":"integer","description":"One-time payment month","minimum":1,"maximum":1200},"feePercent":{"type":"number","description":"Prepayment fee (%)","minimum":0,"maximum":100},"mode":{"type":"string","enum":["tenure","payment"]}},"required":["principal","annualRate","months"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"finance.sip"},"params":{"type":"object","properties":{"annualRate":{"type":"number","description":"Assumed annual return (%)","minimum":-99.99,"maximum":1000},"months":{"type":"integer","description":"Whole months","minimum":1,"maximum":1200},"timing":{"type":"string","enum":["start","end"]},"rateBasis":{"type":"string","enum":["effective","nominal"]},"annualStepUp":{"type":"number","description":"Annual step up (%)","minimum":0,"maximum":100},"monthly":{"type":"number","description":"Monthly investment","minimum":0,"maximum":1000000000000}},"required":["monthly","annualRate","months"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"finance.swp"},"params":{"type":"object","properties":{"annualRate":{"type":"number","description":"Assumed annual return (%)","minimum":-99.99,"maximum":1000},"months":{"type":"integer","description":"Whole months","minimum":1,"maximum":1200},"timing":{"type":"string","enum":["start","end"]},"rateBasis":{"type":"string","enum":["effective","nominal"]},"annualStepUp":{"type":"number","description":"Annual step up (%)","minimum":0,"maximum":100},"initial":{"type":"number","description":"Initial investment","minimum":0,"maximum":1000000000000},"withdrawal":{"type":"number","description":"Monthly withdrawal","minimum":0,"maximum":1000000000000}},"required":["initial","withdrawal","annualRate","months"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.percentage"},"params":{"type":"object","properties":{"value":{"type":"number","description":"Value","minimum":0},"percent":{"type":"number","description":"Percentage (%)","minimum":0}},"required":["value","percent"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.percentage-change"},"params":{"type":"object","properties":{"from":{"type":"number","description":"Original value","minimum":0},"to":{"type":"number","description":"New value","minimum":0}},"required":["from","to"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.compound"},"params":{"type":"object","properties":{"principal":{"type":"number","description":"Initial amount (₹)","minimum":0},"rate":{"type":"number","description":"Annual nominal interest (%)","minimum":0},"years":{"type":"number","description":"Years","minimum":0},"frequency":{"type":"string","description":"Compounds per year","enum":["1","4","12","365"]}},"required":["principal","rate","years","frequency"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.lumpsum"},"params":{"type":"object","properties":{"principal":{"type":"number","description":"Investment (₹)","minimum":0},"rate":{"type":"number","description":"Annual return (%)","minimum":0},"years":{"type":"number","description":"Years","minimum":0}},"required":["principal","rate","years"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.simple-interest"},"params":{"type":"object","properties":{"principal":{"type":"number","description":"Principal (₹)","minimum":0},"rate":{"type":"number","description":"Annual interest (%)","minimum":0},"years":{"type":"number","description":"Years","minimum":0}},"required":["principal","rate","years"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.cagr"},"params":{"type":"object","properties":{"start":{"type":"number","description":"Starting value","minimum":0.01},"end":{"type":"number","description":"Ending value","minimum":0},"years":{"type":"number","description":"Years","minimum":0.01}},"required":["start","end","years"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.roi"},"params":{"type":"object","properties":{"cost":{"type":"number","description":"Initial cost","minimum":0.01},"fees":{"type":"number","description":"Additional costs","minimum":0},"returns":{"type":"number","description":"Final proceeds","minimum":0}},"required":["cost","fees","returns"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.inflation"},"params":{"type":"object","properties":{"amount":{"type":"number","description":"Amount (₹)","minimum":0},"rate":{"type":"number","description":"Annual inflation (%)","minimum":0},"years":{"type":"number","description":"Years","minimum":0}},"required":["amount","rate","years"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.savings-goal"},"params":{"type":"object","properties":{"target":{"type":"number","description":"Target (₹)","minimum":0},"initial":{"type":"number","description":"Already invested (₹)","minimum":0},"rate":{"type":"number","description":"Assumed annual return (%)","minimum":0},"months":{"type":"number","description":"Months","minimum":1}},"required":["target","initial","rate","months"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.fd"},"params":{"type":"object","properties":{"principal":{"type":"number","description":"Deposit (₹)","minimum":0},"rate":{"type":"number","description":"Annual nominal interest (%)","minimum":0},"months":{"type":"number","description":"Months","minimum":1}},"required":["principal","rate","months"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.unit"},"params":{"type":"object","properties":{"value":{"type":"number","description":"Value","minimum":-1000000000000000},"from":{"type":"string","description":"From","enum":["km","m","cm","mm","mi","ft","in","kg","g","lb","oz","m2","ft2","acre","ha","l","ml","usgal","kmh","mph","ms","c","f","k"]},"to":{"type":"string","description":"To","enum":["km","m","cm","mm","mi","ft","in","kg","g","lb","oz","m2","ft2","acre","ha","l","ml","usgal","kmh","mph","ms","c","f","k"]}},"required":["value","from","to"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.fuel"},"params":{"type":"object","properties":{"distance":{"type":"number","description":"Distance (km)","minimum":0},"mileage":{"type":"number","description":"Mileage (km/litre)","minimum":0.01},"price":{"type":"number","description":"Price per litre (₹)","minimum":0}},"required":["distance","mileage","price"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.electricity"},"params":{"type":"object","properties":{"watts":{"type":"number","description":"Power (watts)","minimum":0},"hours":{"type":"number","description":"Hours per day","minimum":0},"days":{"type":"number","description":"Days","minimum":0},"tariff":{"type":"number","description":"Tariff per kWh (₹)","minimum":0}},"required":["watts","hours","days","tariff"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.date-difference"},"params":{"type":"object","properties":{"from":{"type":"string","description":"Start date"},"to":{"type":"string","description":"End date"}},"required":["from","to"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.unix"},"params":{"type":"object","properties":{"timestamp":{"type":"number","description":"Timestamp","minimum":-8640000000000000},"unit":{"type":"string","description":"Input unit","enum":["seconds","milliseconds"]}},"required":["timestamp","unit"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.url"},"params":{"type":"object","properties":{"input":{"type":"string","description":"Text"},"mode":{"type":"string","description":"Operation","enum":["encode","decode"]}},"required":["input","mode"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.json-minify"},"params":{"type":"object","properties":{"input":{"type":"string","description":"JSON"}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.csv-json"},"params":{"type":"object","properties":{"input":{"type":"string","description":"CSV"}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.json-csv"},"params":{"type":"object","properties":{"input":{"type":"string","description":"JSON array"}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.jwt"},"params":{"type":"object","properties":{"input":{"type":"string","description":"JWT"}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.uuid"},"params":{"type":"object","properties":{"count":{"type":"number","description":"How many","minimum":1}},"required":["count"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.password"},"params":{"type":"object","properties":{"length":{"type":"number","description":"Length","minimum":8},"alphabet":{"type":"string","description":"Characters","enum":["full","alphanumeric"]}},"required":["length","alphabet"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.sha256"},"params":{"type":"object","properties":{"input":{"type":"string","description":"Text"}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.text-count"},"params":{"type":"object","properties":{"input":{"type":"string","description":"Text"}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.text-case"},"params":{"type":"object","properties":{"input":{"type":"string","description":"Text"},"mode":{"type":"string","description":"Case","enum":["upper","lower","title","sentence"]}},"required":["input","mode"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.slug"},"params":{"type":"object","properties":{"input":{"type":"string","description":"Text"}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.dedupe"},"params":{"type":"object","properties":{"input":{"type":"string","description":"Lines"}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.sort-lines"},"params":{"type":"object","properties":{"input":{"type":"string","description":"Lines"},"order":{"type":"string","description":"Order","enum":["asc","desc"]}},"required":["input","order"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"utility.color"},"params":{"type":"object","properties":{"hex":{"type":"string","description":"HEX color"}},"required":["hex"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"developer.json"},"params":{"type":"object","properties":{"input":{"type":"string","maxLength":1000000}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"developer.base64"},"params":{"type":"object","properties":{"input":{"type":"string","maxLength":1000000},"operation":{"type":"string","enum":["encode","decode"]}},"required":["input","operation"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"developer.qr"},"params":{"type":"object","properties":{"input":{"type":"string","maxLength":2000}},"required":["input"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"catalog.list"},"params":{"type":"object","properties":{},"required":[],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"workflow.prepare"},"params":{"type":"object","properties":{"toolId":{"type":"string","enum":["image","upscale","pdf","resize","compress","metadata","rotate","crop","filters","grayscale","gemini","watermark","pdf-jpg","pdf-text","image-pdf"]}},"required":["toolId"],"additionalProperties":false}},"required":["tool","params"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Tool result"},"400":{"description":"Invalid tool or parameters"}}}}}}