{"openapi": "3.1.0", "info": {"title": "MiniWebtool API", "version": "1.0", "description": "Stop wasting LLM tokens on deterministic work. MiniWebtool API returns exact JSON for calculators, text utilities, hashes, and finance math. Every endpoint is versioned, billed from a single credit pool, and usable from any HTTP client or MCP agent."}, "paths": {"/v1/health": {"get": {"operationId": "miniwebtool_apiv1_api_health", "summary": "Health check", "parameters": [], "responses": {"200": {"description": "OK"}}, "tags": ["system"]}}, "/v1/whoami": {"get": {"operationId": "miniwebtool_apiv1_api_whoami", "summary": "Introspect the current API key", "parameters": [], "responses": {"200": {"description": "OK"}}, "tags": ["system"], "security": [{"ApiKeyAuth": []}]}}, "/v1/tools": {"get": {"operationId": "miniwebtool_apiv1_api_list_tools", "summary": "List all available tools", "parameters": [], "responses": {"200": {"description": "OK"}}, "tags": ["system"]}}, "/v1/tools/simple-interest-calculator/run": {"post": {"operationId": "post_simple_interest_calculator", "summary": "Simple-interest formula: I = P * r * t.", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "**Credit cost:** 2 per call. **Version:** `2026-04-22`.\n\n**Try it:** [Interactive playground + 7-language snippets](/tools/simple-interest-calculator/)", "tags": ["Finance \u00b7 Interest"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SimpleInterestIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}, "/v1/tools/compound-interest-calculator/run": {"post": {"operationId": "post_compound_interest_calculator", "summary": "Compound-interest formula with selectable compounding frequency.", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "**Credit cost:** 2 per call. **Version:** `2026-04-22`.\n\n**Try it:** [Interactive playground + 7-language snippets](/tools/compound-interest-calculator/)", "tags": ["Finance \u00b7 Interest"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CompoundInterestIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}, "/v1/tools/mortgage-calculator/run": {"post": {"operationId": "post_mortgage_calculator", "summary": "Monthly payment, total interest, LTV, and optional amortization schedule.", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "**Credit cost:** 5 per call. **Version:** `2026-04-22`.\n\n**Try it:** [Interactive playground + 7-language snippets](/tools/mortgage-calculator/)", "tags": ["Finance \u00b7 Loans"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MortgageIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}, "/v1/tools/sha256-hash-generator/run": {"post": {"operationId": "post_sha256_hash_generator", "summary": "Generate a SHA-256 hex digest of a UTF-8 string.", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "**Credit cost:** 1 per call. **Version:** `2026-04-22`.\n\n**Try it:** [Interactive playground + 7-language snippets](/tools/sha256-hash-generator/)", "tags": ["Hash \u00b7 Digest"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/TextIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}, "/v1/tools/md5-hash-generator/run": {"post": {"operationId": "post_md5_hash_generator", "summary": "Generate an MD5 hex digest for checksum and legacy compatibility.", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "**Credit cost:** 1 per call. **Version:** `2026-04-22`.\n\n**Try it:** [Interactive playground + 7-language snippets](/tools/md5-hash-generator/)", "tags": ["Hash \u00b7 Digest"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/TextIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}, "/v1/tools/percentage-calculator/run": {"post": {"operationId": "post_percentage_calculator", "summary": "Six percentage operations behind one endpoint, selected by mode.", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "**Credit cost:** 1 per call. **Version:** `2026-04-22`.\n\n**Try it:** [Interactive playground + 7-language snippets](/tools/percentage-calculator/)", "tags": ["Math \u00b7 Percentage"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PercentageIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}, "/v1/tools/word-counter/run": {"post": {"operationId": "post_word_counter", "summary": "Count words, characters, sentences, paragraphs, reading/speaking time, top words.", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "**Credit cost:** 1 per call. **Version:** `2026-04-22`.\n\n**Try it:** [Interactive playground + 7-language snippets](/tools/word-counter/)", "tags": ["Text \u00b7 Analysis"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/WordCounterIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}, "/v1/tools/character-counter/run": {"post": {"operationId": "post_character_counter", "summary": "Count characters, letters, digits, whitespace, and punctuation.", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "**Credit cost:** 1 per call. **Version:** `2026-04-22`.\n\n**Try it:** [Interactive playground + 7-language snippets](/tools/character-counter/)", "tags": ["Text \u00b7 Analysis"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CharCounterIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}, "/v1/tools/line-counter/run": {"post": {"operationId": "post_line_counter", "summary": "Count total / non-empty / empty lines and longest-line length.", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "**Credit cost:** 1 per call. **Version:** `2026-04-22`.\n\n**Try it:** [Interactive playground + 7-language snippets](/tools/line-counter/)", "tags": ["Text \u00b7 Analysis"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/LineCounterIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}, "/v1/tools/remove-spaces/run": {"post": {"operationId": "post_remove_spaces", "summary": "Strip whitespace: all, extra, leading, trailing, or per-line.", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "**Credit cost:** 1 per call. **Version:** `2026-04-22`.\n\n**Try it:** [Interactive playground + 7-language snippets](/tools/remove-spaces/)", "tags": ["Text \u00b7 Whitespace"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/RemoveSpacesIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}}, "components": {"schemas": {"SimpleInterestIn": {"properties": {"principal": {"exclusiveMinimum": 0, "title": "Principal", "type": "number"}, "annual_rate_percent": {"maximum": 1000, "minimum": 0, "title": "Annual Rate Percent", "type": "number"}, "years": {"maximum": 200, "minimum": 0, "title": "Years", "type": "number"}}, "required": ["principal", "annual_rate_percent", "years"], "title": "SimpleInterestIn", "type": "object"}, "CompoundInterestIn": {"properties": {"principal": {"exclusiveMinimum": 0, "title": "Principal", "type": "number"}, "annual_rate_percent": {"maximum": 1000, "minimum": 0, "title": "Annual Rate Percent", "type": "number"}, "years": {"maximum": 200, "minimum": 0, "title": "Years", "type": "number"}, "compounding": {"default": "monthly", "description": "annually | semiannually | quarterly | monthly | weekly | daily", "title": "Compounding", "type": "string"}}, "required": ["principal", "annual_rate_percent", "years"], "title": "CompoundInterestIn", "type": "object"}, "MortgageIn": {"properties": {"home_price": {"exclusiveMinimum": 0, "title": "Home Price", "type": "number"}, "down_payment": {"minimum": 0, "title": "Down Payment", "type": "number"}, "annual_rate_percent": {"maximum": 100, "minimum": 0, "title": "Annual Rate Percent", "type": "number"}, "years": {"exclusiveMinimum": 0, "maximum": 100, "title": "Years", "type": "number"}, "include_schedule": {"default": false, "title": "Include Schedule", "type": "boolean"}, "property_tax_annual": {"default": 0.0, "minimum": 0, "title": "Property Tax Annual", "type": "number"}, "home_insurance_annual": {"default": 0.0, "minimum": 0, "title": "Home Insurance Annual", "type": "number"}, "pmi_annual_percent": {"default": 0.0, "maximum": 10, "minimum": 0, "title": "Pmi Annual Percent", "type": "number"}}, "required": ["home_price", "down_payment", "annual_rate_percent", "years"], "title": "MortgageIn", "type": "object"}, "TextIn": {"properties": {"text": {"maxLength": 100000, "title": "Text", "type": "string"}}, "required": ["text"], "title": "TextIn", "type": "object"}, "PercentageIn": {"properties": {"mode": {"description": "percent_of | is_what_percent_of | increase | decrease | change | difference", "title": "Mode", "type": "string"}, "a": {"title": "A", "type": "number"}, "b": {"title": "B", "type": "number"}}, "required": ["mode", "a", "b"], "title": "PercentageIn", "type": "object"}, "WordCounterIn": {"properties": {"text": {"description": "Text to analyze. UTF-8, up to 200K chars.", "maxLength": 200000, "title": "Text", "type": "string"}}, "required": ["text"], "title": "WordCounterIn", "type": "object"}, "CharCounterIn": {"properties": {"text": {"maxLength": 200000, "title": "Text", "type": "string"}}, "required": ["text"], "title": "CharCounterIn", "type": "object"}, "LineCounterIn": {"properties": {"text": {"maxLength": 500000, "title": "Text", "type": "string"}}, "required": ["text"], "title": "LineCounterIn", "type": "object"}, "RemoveSpacesIn": {"properties": {"text": {"maxLength": 200000, "title": "Text", "type": "string"}, "mode": {"default": "all", "description": "One of: all, extra, leading, trailing, lines.", "title": "Mode", "type": "string"}}, "required": ["text"], "title": "RemoveSpacesIn", "type": "object"}}, "securitySchemes": {"ApiKeyAuth": {"type": "http", "scheme": "bearer"}}}, "servers": []}