{"openapi":"3.1.0","info":{"title":"Text Toolkit","version":"0.1.0","description":"String utilities — case conversion, base64/base32/hex/URL encoding, and unified/structured text diffing —","x-guidance":"String utilities — case conversion, base64/base32/hex/URL encoding, and unified/structured text diffing — Each operation is an HTTP POST to its /v1/<operation> path with a JSON request body (see each operation's requestBody schema) and returns a JSON response. Endpoints are paid per successful call via x402 or MPP (USDC on Base); an unpaid request returns 402 with payment metadata in the WWW-Authenticate header.","contact":{"email":"hello@openverbs.com"}},"x-discovery":{"ownershipProofs":["0xb1401a71756f51464a9962db12f1eb3e9522490cd20010b06d00cf7b7770acfd5f79721f9dfdf2643f8cecd29af3bde9ec133941a386042b32d9886053a70de61b","0xc1c1f11793e18a00fcb7072421f26e89fb75b6aa517fa84370564991f4b10efa024f6f57e4e67eefd20cf46cc01fc5a62d793fa8fbcda04f26c946a3433d73f91b","0x676b474af0ef9ed4809b5d12d2e789b36e52d56215b21f601d71f76620e36ec630347116a7b2b349a3c3681e5db0fbfa76c4169a676b6d6f27864d0e5017284a1c","0xc2ab96522515ed9e9bc4f1a241b774bd48df42e951ddbf7f6aa8fc76f5a96a20421703e1ec402ce7eb1e4eabea3b6e4e4129cf39d56ea91cf4fcf38561fc94fc1c"]},"servers":[{"url":"https://text.openverbs.com"}],"paths":{"/health":{"get":{"summary":"Health check","security":[],"responses":{"200":{"description":"Healthy","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"version":{"type":"string"}}}}}}}}},"/v1/case":{"post":{"summary":"Convert case","description":"Recase a string into camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case, path/case, Sentence case, Capital Case, Train-Case, no case, Title Case, or plain UPPER/lower — the word boundaries are detected regardless of the input casing. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["convert string case","camelcase converter","snake case transform","kebab case text","title case api","recase text"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000,"description":"The text to recase."},"target":{"type":"string","enum":["camel","pascal","snake","kebab","constant","dot","path","sentence","capital","train","no","title","upper","lower"],"description":"Target case, one of camel, pascal, snake, kebab, constant, dot, path, sentence, capital, train, no, title, upper, lower."}},"required":["text","target"],"additionalProperties":false}}}},"responses":{"200":{"description":"`{ text, target }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ text, target }`."}}}},"400":{"description":"Invalid request; no payment is attempted"},"402":{"description":"Payment required; x402/MPP metadata returned in headers"},"502":{"description":"Upstream provider error after payment verification"}},"x-payment-info":{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Recase a string into camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case, path/case, Sentence case, Capital Case, Train-Case, no case, Title Case, or plain UPPER/lower — the word boundaries are detected regardless of the input casing.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"evm","intent":"charge","network":"8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"tempo","intent":"charge","network":"4217","currency":"0x20c000000000000000000000b9537d11c60e8b50","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}}],"network":"4217","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A","offers":[{"amount":"2000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Recase a string into camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case, path/case, Sentence case, Capital Case, Train-Case, no case, Title Case, or plain UPPER/lower — the word boundaries are detected regardless of the input casing.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Recase a string into camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case, path/case, Sentence case, Capital Case, Train-Case, no case, Title Case, or plain UPPER/lower — the word boundaries are detected regardless of the input casing.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/encode":{"post":{"summary":"Encode text","description":"Encode a UTF-8 string into base64, base64url, hex, base32, or URL percent-encoding. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["encode text base64","string to hex","url encode text","text encoding api","utf8 to base32","base64url encode"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000,"description":"The UTF-8 text to encode."},"encoding":{"type":"string","enum":["base64","base64url","hex","base32","url"],"description":"Target encoding, one of base64, base64url, hex, base32, url."}},"required":["text","encoding"],"additionalProperties":false}}}},"responses":{"200":{"description":"`{ text, encoding }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ text, encoding }`."}}}},"400":{"description":"Invalid request; no payment is attempted"},"402":{"description":"Payment required; x402/MPP metadata returned in headers"},"502":{"description":"Upstream provider error after payment verification"}},"x-payment-info":{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Encode a UTF-8 string into base64, base64url, hex, base32, or URL percent-encoding.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"evm","intent":"charge","network":"8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"tempo","intent":"charge","network":"4217","currency":"0x20c000000000000000000000b9537d11c60e8b50","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}}],"network":"4217","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A","offers":[{"amount":"2000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Encode a UTF-8 string into base64, base64url, hex, base32, or URL percent-encoding.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Encode a UTF-8 string into base64, base64url, hex, base32, or URL percent-encoding.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/decode":{"post":{"summary":"Decode text","description":"Decode a base64, base64url, hex, base32, or URL percent-encoded string back into UTF-8 text. Malformed input for the chosen encoding is rejected as a clean 400. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["decode base64 text","hex to string","url decode text","text decoding api","base32 to utf8","base64url decode"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000,"description":"The encoded text to decode."},"encoding":{"type":"string","enum":["base64","base64url","hex","base32","url"],"description":"Source encoding, one of base64, base64url, hex, base32, url."}},"required":["text","encoding"],"additionalProperties":false}}}},"responses":{"200":{"description":"`{ text, encoding }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ text, encoding }`."}}}},"400":{"description":"Invalid request; no payment is attempted"},"402":{"description":"Payment required; x402/MPP metadata returned in headers"},"502":{"description":"Upstream provider error after payment verification"}},"x-payment-info":{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Decode a base64, base64url, hex, base32, or URL percent-encoded string back into UTF-8 text. Malformed input for the chosen encoding is rejected as a clean 400.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"evm","intent":"charge","network":"8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"tempo","intent":"charge","network":"4217","currency":"0x20c000000000000000000000b9537d11c60e8b50","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}}],"network":"4217","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A","offers":[{"amount":"2000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Decode a base64, base64url, hex, base32, or URL percent-encoded string back into UTF-8 text. Malformed input for the chosen encoding is rejected as a clean 400.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Decode a base64, base64url, hex, base32, or URL percent-encoded string back into UTF-8 text. Malformed input for the chosen encoding is rejected as a clean 400.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/diff":{"post":{"summary":"Diff text","description":"Diff two texts. The default `unified` mode returns a unified-diff patch string; `lines`, `words`, and `chars` modes return a structured array of added/removed/unchanged parts. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["diff text","generate unified diff","compare strings","word diff api","line by line diff","text patch preview"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"a":{"type":"string","maxLength":1000000,"description":"The original text."},"b":{"type":"string","maxLength":1000000,"description":"The changed text."},"mode":{"type":"string","enum":["unified","lines","words","chars"],"description":"Diff granularity, one of unified, lines, words, chars. Default unified."}},"required":["a","b"],"additionalProperties":false}}}},"responses":{"200":{"description":"`{ mode, changed, patch? , parts? }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ mode, changed, patch? , parts? }`."}}}},"400":{"description":"Invalid request; no payment is attempted"},"402":{"description":"Payment required; x402/MPP metadata returned in headers"},"502":{"description":"Upstream provider error after payment verification"}},"x-payment-info":{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Diff two texts. The default `unified` mode returns a unified-diff patch string; `lines`, `words`, and `chars` modes return a structured array of added/removed/unchanged parts.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"evm","intent":"charge","network":"8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"tempo","intent":"charge","network":"4217","currency":"0x20c000000000000000000000b9537d11c60e8b50","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}}],"network":"4217","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A","offers":[{"amount":"2000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Diff two texts. The default `unified` mode returns a unified-diff patch string; `lines`, `words`, and `chars` modes return a structured array of added/removed/unchanged parts.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Diff two texts. The default `unified` mode returns a unified-diff patch string; `lines`, `words`, and `chars` modes return a structured array of added/removed/unchanged parts.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}}},"x-service-info":{"categories":["compute"],"docs":{"homepage":"https://text.openverbs.com","apiReference":"https://text.openverbs.com/openapi.json"}}}