{"openapi":"3.1.0","info":{"title":"CrewHaus Tools API","description":"Free developer tools with programmatic API access. 15 tools available for AI agents and automation. No authentication required.","version":"1.0.0","contact":{"email":"crew@crewhaus.ai","url":"https://crewhaus.ai"},"license":{"name":"MIT"}},"servers":[{"url":"https://crewhaus.ai","description":"Production server"}],"paths":{"/api/tools":{"get":{"summary":"List all available tools","description":"Returns a list of all tools with their metadata and API endpoints","operationId":"listTools","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"tools":{"type":"array","items":{"$ref":"#/components/schemas/ToolMetadata"}},"meta":{"type":"object","properties":{"total":{"type":"number"},"apiAccessible":{"type":"number"},"visualOnly":{"type":"number"}}},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/word-counter":{"post":{"summary":"Word Counter","description":"Paste or type your text to instantly see word count, character count, sentence count, paragraph count, and estimated reading time. Works entirely in your browser — nothing is sent to a server.","operationId":"word_counter","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","description":"Text to analyze"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"words":{"type":"number"},"characters":{"type":"number"},"sentences":{"type":"number"},"paragraphs":{"type":"number"},"readingTime":{"type":"string"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/case-converter":{"post":{"summary":"Case Converter","description":"Instantly convert text between eight common case formats: UPPERCASE, lowercase, Title Case, Sentence case, camelCase, PascalCase, snake_case, and kebab-case. Paste your text and click any format to convert.","operationId":"case_converter","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input","format"],"properties":{"input":{"type":"string","description":"Text to convert"},"format":{"type":"string","enum":["upper","lower","title","camel","pascal","snake","kebab"]}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"output":{"type":"string"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/lorem-ipsum-generator":{"post":{"summary":"Lorem Ipsum Generator","description":"Generate lorem ipsum placeholder text for your designs and mockups. Choose between paragraphs, sentences, or individual words, set the count, and copy with one click.","operationId":"lorem_ipsum_generator","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["paragraphs","sentences","words"],"default":"paragraphs"},"count":{"type":"number","default":3,"minimum":1,"maximum":100}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"output":{"type":"string"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/json-formatter":{"post":{"summary":"JSON Formatter","description":"Paste raw JSON to format and validate it instantly. Errors are shown with line numbers. Syntax highlighting makes deeply nested structures easy to read. Works entirely client-side.","operationId":"json_formatter","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","description":"JSON string to format and validate"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"output":{"type":"string"},"valid":{"type":"boolean"},"error":{"type":"string"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/base64-encoder":{"post":{"summary":"Base64 Encoder / Decoder","description":"Encode any text to Base64 or decode Base64 back to plain text. Handles Unicode characters correctly. All processing happens in your browser — no data is sent anywhere.","operationId":"base64_encoder","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","description":"String to encode or decode"},"action":{"type":"string","enum":["encode","decode"],"default":"encode"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"output":{"type":"string"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/uuid-generator":{"post":{"summary":"UUID Generator","description":"Generate cryptographically random UUID v4 values using your browser's built-in crypto API. Generate one at a time or bulk generate up to 100 UUIDs. Copy any single UUID or all at once.","operationId":"uuid_generator","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number","default":1,"minimum":1,"maximum":100}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"uuids":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/hash-generator":{"post":{"summary":"Hash Generator","description":"Generate cryptographic hashes from any text input. Supports MD5, SHA-1, SHA-256, and SHA-512 algorithms. Hashes update in real time as you type. All computation happens in your browser.","operationId":"hash_generator","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","description":"Text to hash"},"algorithm":{"type":"string","enum":["md5","sha1","sha256","sha512"],"default":"sha256"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"hash":{"type":"string"},"algorithm":{"type":"string"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/regex-tester":{"post":{"summary":"Regex Tester","description":"Enter a regular expression and a test string to see all matches highlighted in real time. Capture groups are listed below the match, with full support for flags like global, case-insensitive, and multiline.","operationId":"regex_tester","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["pattern","input"],"properties":{"pattern":{"type":"string","description":"Regular expression pattern"},"flags":{"type":"string","default":"","description":"Regex flags (e.g., gi)"},"input":{"type":"string","description":"Text to test against"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"matches":{"type":"array","items":{"type":"string"}},"valid":{"type":"boolean"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/password-generator":{"post":{"summary":"Password Generator","description":"Generate cryptographically secure random passwords using your browser's crypto API. Configure length, character sets (uppercase, lowercase, numbers, symbols), and view a real-time strength meter.","operationId":"password_generator","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"length":{"type":"number","default":16,"minimum":4,"maximum":128},"uppercase":{"type":"boolean","default":true},"lowercase":{"type":"boolean","default":true},"numbers":{"type":"boolean","default":true},"symbols":{"type":"boolean","default":true},"count":{"type":"number","default":1,"minimum":1,"maximum":100}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"passwords":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/text-diff":{"post":{"summary":"Text Diff","description":"Paste two versions of any text and instantly see a line-by-line diff. Additions are highlighted in green, deletions in red. Uses the LCS algorithm for accurate results. Runs entirely in your browser.","operationId":"text_diff","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["original","modified"],"properties":{"original":{"type":"string","description":"Original text"},"modified":{"type":"string","description":"Modified text"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"diffs":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["add","remove","equal"]},"value":{"type":"string"}}}}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/html-entity-encoder":{"post":{"summary":"HTML Entity Encoder","description":"Encode plain text or HTML to HTML entities (< → &lt;) or decode entities back to characters. Supports all named entities and numeric character references including Unicode. Runs in your browser.","operationId":"html_entity_encoder","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","description":"String to encode or decode"},"action":{"type":"string","enum":["encode","decode"],"default":"encode"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"output":{"type":"string"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/url-encoder":{"post":{"summary":"URL Encoder / Decoder","description":"Encode any string for safe use in a URL, or decode percent-encoded URL components back to readable text. Uses the browser's native encodeURIComponent and decodeURIComponent functions.","operationId":"url_encoder","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","description":"String to encode or decode"},"action":{"type":"string","enum":["encode","decode"],"default":"encode"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"output":{"type":"string"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/timestamp-converter":{"post":{"summary":"Timestamp Converter","description":"Enter a Unix timestamp to see it converted to ISO 8601, UTC, and local time formats. Shows the current Unix timestamp in real time. Also convert ISO 8601 dates back to Unix timestamps.","operationId":"timestamp_converter","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Unix timestamp or ISO 8601 date string"},"action":{"type":"string","enum":["to-iso","to-unix"]}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"unix":{"type":"number"},"iso":{"type":"string"},"utc":{"type":"string"},"local":{"type":"string"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/jwt-decoder":{"post":{"summary":"JWT Decoder","description":"Paste any JWT token to decode and display the header and payload as formatted JSON. Timestamp fields (exp, iat, nbf) are shown in human-readable format. No signature verification — decode only. Runs entirely in your browser.","operationId":"jwt_decoder","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","description":"JWT token to decode"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"header":{"type":"object"},"payload":{"type":"object"},"valid":{"type":"boolean"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/percentage-calculator":{"post":{"summary":"Percentage Calculator","description":"Three calculation modes in one tool: find X% of a number, calculate what percentage one number is of another, and compute the percentage change between two values. Instant results as you type.","operationId":"percentage_calculator","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["mode","a","b"],"properties":{"mode":{"type":"string","enum":["of","is-what-percent","change"]},"a":{"type":"number"},"b":{"type":"number"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"},"result":{"type":"number"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/tariff-calculator":{"post":{"summary":"Tariff Impact Calculator","description":"Calculate the estimated tariff impact on your imports based on country of origin, product category, and order size. Covers baseline tariffs, Section 301 (China), Section 232 (steel/aluminum/auto), and USMCA. See per-unit landed costs, effective tariff rates, and price impact percentages. Updated for April 2026 tariff schedules.","operationId":"tariff_calculator","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"string"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}},"/api/tools/qr-code-generator":{"post":{"summary":"QR Code Generator","description":"Create QR codes for any URL, YouTube video, Spotify song, Instagram profile, Wi-Fi network, email, or plain text. Customize colors, add a center logo for branding, and choose error correction level. Download as PNG or copy to clipboard. Everything runs in your browser — logos and data never leave your device.","operationId":"qr_code_generator","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"string"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"_links":{"$ref":"#/components/schemas/Links"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}}}}}}}}},"components":{"schemas":{"ToolMetadata":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string","enum":["Text","Developer","Security","Design","Productivity","Math"]},"icon":{"type":"string"},"webUrl":{"type":"string","format":"uri"},"apiAvailable":{"type":"boolean"},"apiEndpoint":{"type":"string","format":"uri","nullable":true}}},"Links":{"type":"object","properties":{"self":{"type":"string","format":"uri"},"docs":{"type":"string","format":"uri"}}}}}}