{"openapi":"3.1.0","info":{"title":"Character encoding","version":"0.1.0","description":"Character-set and Unicode utilities — detect the charset of a byte buffer, transcode bytes between character sets, apply Unicode normalisation forms, and inspect a string's code points and byte layout.","x-guidance":"Character-set and Unicode utilities — detect the charset of a byte buffer, transcode bytes between character sets, apply Unicode normalisation forms, and inspect a string's code points and byte layout. 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://encoding.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/detect":{"post":{"summary":"Detect character set","description":"Guess the character set of a base64-encoded byte buffer: sniffs a byte-order mark, then falls back to ASCII / UTF-8 validation and a UTF-16 NUL-pattern heuristic. Returns a best-effort charset with a confidence label — a low-confidence guess is still a successful 200. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["detect character set","charset detection api","encoding detector","detect utf-8 bytes","base64 charset lookup","sniff byte order mark"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"bytes":{"type":"string","description":"Base64-encoded bytes to inspect."}},"required":["bytes"],"additionalProperties":false},"example":{"bytes":"SGVsbG8="}}}},"responses":{"200":{"description":"`{ charset, hasBom, bom, confidence, byteLength }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ charset, hasBom, bom, confidence, byteLength }`."}}}},"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":"Guess the character set of a base64-encoded byte buffer: sniffs a byte-order mark, then falls back to ASCII / UTF-8 validation and a UTF-16 NUL-pattern heuristic. Returns a best-effort charset with a confidence label — a low-confidence guess is still a successful 200.","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":"Guess the character set of a base64-encoded byte buffer: sniffs a byte-order mark, then falls back to ASCII / UTF-8 validation and a UTF-16 NUL-pattern heuristic. Returns a best-effort charset with a confidence label — a low-confidence guess is still a successful 200.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Guess the character set of a base64-encoded byte buffer: sniffs a byte-order mark, then falls back to ASCII / UTF-8 validation and a UTF-16 NUL-pattern heuristic. Returns a best-effort charset with a confidence label — a low-confidence guess is still a successful 200.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/transcode":{"post":{"summary":"Transcode between character sets","description":"Decode a base64 byte buffer from one character set and re-encode it into another (utf-8, utf-16le, utf-16be, latin1, ascii). Characters that the target set cannot represent, or bytes invalid for the source set, are clean 400s. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["transcode charset","convert text encoding","utf-8 to utf-16","latin1 to utf8","decode base64 bytes","character set converter"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"bytes":{"type":"string","description":"Base64-encoded source bytes."},"from":{"type":"string","enum":["utf-8","utf-16le","utf-16be","latin1","ascii","utf8","utf16le","utf16be","iso-8859-1","windows-1252","us-ascii"],"description":"Source character set."},"to":{"type":"string","enum":["utf-8","utf-16le","utf-16be","latin1","ascii","utf8","utf16le","utf16be","iso-8859-1","windows-1252","us-ascii"],"description":"Target character set."}},"required":["bytes","from","to"],"additionalProperties":false},"example":{"bytes":"SGVsbG8=","from":"utf-8","to":"utf-16le"}}}},"responses":{"200":{"description":"`{ bytes, from, to, byteLength, text }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ bytes, from, to, byteLength, text }`."}}}},"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 byte buffer from one character set and re-encode it into another (utf-8, utf-16le, utf-16be, latin1, ascii). Characters that the target set cannot represent, or bytes invalid for the source set, are clean 400s.","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 byte buffer from one character set and re-encode it into another (utf-8, utf-16le, utf-16be, latin1, ascii). Characters that the target set cannot represent, or bytes invalid for the source set, are clean 400s.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Decode a base64 byte buffer from one character set and re-encode it into another (utf-8, utf-16le, utf-16be, latin1, ascii). Characters that the target set cannot represent, or bytes invalid for the source set, are clean 400s.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/normalize":{"post":{"summary":"Unicode normalisation","description":"Apply a Unicode normalisation form (NFC, NFD, NFKC or NFKD) to a string. Reports whether the text changed and its length in UTF-16 code units and code points. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["unicode normalization api","normalize unicode string","nfc nfkc converter","unicode form conversion","canonical unicode text","normalize text accents"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"String to normalise."},"form":{"type":"string","enum":["NFC","NFD","NFKC","NFKD"],"description":"Normalisation form. Default NFC."}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"`{ text, form, changed, length, codePoints }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ text, form, changed, length, codePoints }`."}}}},"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":"Apply a Unicode normalisation form (NFC, NFD, NFKC or NFKD) to a string. Reports whether the text changed and its length in UTF-16 code units and code points.","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":"Apply a Unicode normalisation form (NFC, NFD, NFKC or NFKD) to a string. Reports whether the text changed and its length in UTF-16 code units and code points.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Apply a Unicode normalisation form (NFC, NFD, NFKC or NFKD) to a string. Reports whether the text changed and its length in UTF-16 code units and code points.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/inspect":{"post":{"summary":"Inspect code points","description":"Break a string into its Unicode code points, each with its U+ notation, decimal value and UTF-8 / UTF-16 byte layout, plus total byte lengths. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["inspect unicode code points","unicode codepoint lookup","string byte layout","utf-8 bytes inspector","utf-16 code units","text code points"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"String to inspect."}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"`{ characters: [{ char, codePoint, decimal, utf8, utf16 }], codePoints, utf8Bytes, utf16Bytes }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ characters: [{ char, codePoint, decimal, utf8, utf16 }], codePoints, utf8Bytes, utf16Bytes }`."}}}},"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":"Break a string into its Unicode code points, each with its U+ notation, decimal value and UTF-8 / UTF-16 byte layout, plus total byte lengths.","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":"Break a string into its Unicode code points, each with its U+ notation, decimal value and UTF-8 / UTF-16 byte layout, plus total byte lengths.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Break a string into its Unicode code points, each with its U+ notation, decimal value and UTF-8 / UTF-16 byte layout, plus total byte lengths.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}}},"x-service-info":{"categories":["text"],"docs":{"homepage":"https://encoding.openverbs.com","apiReference":"https://encoding.openverbs.com/openapi.json"}}}