{"openapi":"3.1.0","info":{"title":"Text Analysis Tools","version":"1.0.0","description":"Readability formulas, language guess, keywords, text similarity and diff, case conversion, SMS and tweet length limits. One call, one computed answer, no accounts or API keys. Machine-payable over x402.","x-guidance":"Text Analysis Tools: Readability formulas, language guess, keywords, text similarity and diff, case conversion, SMS and tweet length limits. Text Analysis Tools does exact text measurements an agent should not estimate: readability by six standard formulas (/readability), which language a text is in (/language-guess), the main keywords and phrases (/keyword-extract), how similar two texts are (/text-similarity) and what changed between them (/text-diff), case and slug conversion (/case-convert), and whether a text fits SMS, tweet, meta-description or other length limits (/length-limits). Inputs travel in the query string, so keep texts short (a few thousand characters). Each paid GET returns a computed verdict with the reasons, the source and what was NOT checked. A verdict of UNVERIFIED means a lookup failed: treat it as unknown. No account or key: pay per call in USDC over x402."},"servers":[{"url":"https://text-metrics.x402tookit.com"}],"paths":{"/case-convert":{"get":{"operationId":"case_convert","summary":"Convert text to camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, Title Case, sentence case and a URL slug.","description":"Convert text to camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, Title Case, sentence case and a URL slug.","tags":["text","case","slug"],"parameters":[{"name":"text","in":"query","required":true,"description":"The phrase or identifier, up to 300 characters","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"words":{"type":["array","null"],"items":{"type":"string"}},"camelCase":{"type":["null","string"]},"PascalCase":{"type":["null","string"]},"snake_case":{"type":["null","string"]},"kebab-case":{"type":["null","string"]},"CONSTANT_CASE":{"type":["null","string"]},"Title Case":{"type":["null","string"]},"Sentence case":{"type":["null","string"]},"slug":{"type":["null","string"]},"lowercase":{"type":["null","string"]},"UPPERCASE":{"type":["null","string"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"CONVERTED","summary":"6 words: camelCase helloWorldParseHttpResponseV2; snake_case hello_world_parse_http_response_v2; slug hello-world-parse-http-response-v2.","reasons":["Accents are folded to plain letters; word boundaries come from separators and camelCase humps."],"words":["hello","world","…4 more"],"camelCase":"helloWorldParseHttpResponseV2","PascalCase":"HelloWorldParseHttpResponseV2","snake_case":"hello_world_parse_http_response_v2","kebab-case":"hello-world-parse-http-response-v2","CONSTANT_CASE":"HELLO_WORLD_PARSE_HTTP_RESPONSE_V2","Title Case":"Hello World Parse Http Response V2","Sentence case":"Hello world parse http response v2","slug":"hello-world-parse-http-response-v2","lowercase":"hello world parse http response v2","UPPERCASE":"HELLO WORLD PARSE HTTP RESPONSE V2","degraded":false,"notChecked":["language-specific casing rules (Turkish dotted i, German ß)","acronym preservation in Title Case"],"source":"computed locally","asOf":"2026-10-11T04:08:06.700Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/case-convert"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/case-convert"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/case-convert"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/case-convert"}}]}}},"/keyword-extract":{"get":{"operationId":"keyword_extract","summary":"Top keywords and two-word phrases in an English text by frequency after removing stopwords, with counts and share.","description":"Top keywords and two-word phrases in an English text by frequency after removing stopwords, with counts and share.","tags":["text","keywords","nlp"],"parameters":[{"name":"text","in":"query","required":true,"description":"English text, up to 3000 characters","schema":{"type":"string"}},{"name":"n","in":"query","required":false,"description":"How many keywords, 1 to 25, default 10","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"totalWords":{"type":["null","number"]},"contentWords":{"type":["null","number"]},"uniqueContentWords":{"type":["null","number"]},"keywords":{"type":["array","null"],"items":{"type":"object","properties":{"word":{"type":["null","string"]},"count":{"type":["null","number"]},"sharePct":{"type":["null","number"]}}}},"repeatedPhrases":{"type":["array","null"],"items":{"type":"object","properties":{"phrase":{"type":["null","string"]},"count":{"type":["null","number"]}}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"KEYWORDS_FOUND","summary":"Top keywords: solar (4), energy (2), panels (2), available (1), battery (1); repeated phrases: solar panels, solar energy.","reasons":["Frequency of non-stopwords; no semantics or stemming."],"totalWords":23,"contentWords":19,"uniqueContentWords":14,"keywords":[{"word":"solar","count":4,"sharePct":21.1},{"word":"energy","count":2,"sharePct":10.5}],"repeatedPhrases":[{"phrase":"solar panels","count":2},{"phrase":"solar energy","count":2}],"degraded":false,"notChecked":["meaning (frequency only, no semantics)","languages other than English","…1 more"],"source":"computed locally","asOf":"2026-10-11T04:08:06.959Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/keyword-extract"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/keyword-extract"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/keyword-extract"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/keyword-extract"}}]}}},"/language-guess":{"get":{"operationId":"language_guess","summary":"Guess whether text is English, Spanish, French, German, Italian, Portuguese, Dutch or Swedish, with a confidence margin.","description":"Guess whether text is English, Spanish, French, German, Italian, Portuguese, Dutch or Swedish, with a confidence margin.","tags":["text","language-detection","nlp"],"parameters":[{"name":"text","in":"query","required":true,"description":"Text, at least a sentence; up to 3000 characters","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"code":{"type":["null","string"]},"language":{"type":["null","string"]},"confidence":{"type":["null","string"]},"wordsAnalyzed":{"type":["null","number"]},"ranking":{"type":["array","null"],"items":{"type":"object","properties":{"language":{"type":["null","string"]},"code":{"type":["null","string"]},"score":{"type":["null","number"]}}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"CONFIDENT","summary":"Spanish (es): 46% of words are common Spanish words; runner-up Italian 38%.","reasons":["Clear margin over the runner-up."],"code":"es","language":"Spanish","confidence":"CONFIDENT","wordsAnalyzed":13,"ranking":[{"language":"Spanish","code":"es","score":0.462},{"language":"Italian","code":"it","score":0.385}],"degraded":false,"notChecked":["languages outside the eight","mixed-language text","…2 more"],"source":"computed locally","asOf":"2026-10-11T04:08:07.222Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/language-guess"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/language-guess"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/language-guess"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/language-guess"}}]}}},"/length-limits":{"get":{"operationId":"length_limits","summary":"Check text against SMS segments (GSM-7 vs Unicode), tweet weight, meta description, title tag and push notification limits.","description":"Check text against SMS segments (GSM-7 vs Unicode), tweet weight, meta description, title tag and push notification limits.","tags":["text","sms","seo","length"],"parameters":[{"name":"text","in":"query","required":true,"description":"The text, up to 3000 characters","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"characters":{"type":["null","number"]},"charactersNoSpaces":{"type":["null","number"]},"words":{"type":["null","number"]},"sentences":{"type":["null","number"]},"paragraphs":{"type":["null","number"]},"readingTimeSeconds":{"type":["null","number"]},"sms":{"type":["null","object"],"properties":{"encoding":{"type":["null","string"]},"units":{"type":["null","number"]},"segments":{"type":["null","number"]},"perSegment":{"type":["null","number"]}}},"limits":{"type":["null","object"],"properties":{"tweet":{"type":["null","object"],"properties":{"used":{"type":["null","number"]},"limit":{"type":["null","number"]}}},"metaDescription":{"type":["null","object"],"properties":{"used":{"type":["null","number"]},"limit":{"type":["null","number"]}}},"titleTag":{"type":["null","object"],"properties":{"used":{"type":["null","number"]},"limit":{"type":["null","number"]}}},"pushNotification":{"type":["null","object"],"properties":{"used":{"type":["null","number"]},"limit":{"type":["null","number"]}}},"smsSingleSegment":{"type":["null","object"],"properties":{"used":{"type":["null","number"]},"limit":{"type":["null","number"]}}}}},"over":{"type":["array","null"],"items":{"type":"string"}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"OVER_SOME_LIMITS","summary":"99 characters, 16 words; SMS: 1 segment(s) (GSM-7); tweet weight 96/280. Over: titleTag.","reasons":["All characters are in the GSM-7 alphabet: 160 per single SMS, 153 per part of a longer one.","Tweet weight counts every link as 23 and emoji or CJK characters as 2."],"characters":99,"charactersNoSpaces":85,"words":16,"sentences":2,"paragraphs":1,"readingTimeSeconds":4,"sms":{"encoding":"GSM-7","units":99,"segments":1,"perSegment":160},"limits":{"tweet":{"used":96,"limit":280},"metaDescription":{"used":99,"limit":155},"titleTag":{"used":99,"limit":60},"pushNotification":{"used":99,"limit":178},"smsSingleSegment":{"used":99,"limit":160}},"over":["titleTag"],"degraded":false,"notChecked":["carrier-specific SMS behavior","Twitter/X premium longer-post limits","…1 more"],"source":"computed locally","asOf":"2026-10-11T04:08:07.486Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/length-limits"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/length-limits"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/length-limits"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/length-limits"}}]}}},"/readability":{"get":{"operationId":"readability","summary":"Readability of English text by Flesch ease, Flesch-Kincaid, Gunning fog, SMOG, Coleman-Liau and ARI, with a consensus grade.","description":"Readability of English text by Flesch ease, Flesch-Kincaid, Gunning fog, SMOG, Coleman-Liau and ARI, with a consensus grade.","tags":["text","readability","flesch"],"parameters":[{"name":"text","in":"query","required":true,"description":"English text, up to 3000 characters","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"words":{"type":["null","number"]},"sentences":{"type":["null","number"]},"fleschReadingEase":{"type":["null","number"]},"fleschKincaidGrade":{"type":["null","number"]},"gunningFog":{"type":["null","number"]},"smog":{},"colemanLiau":{"type":["null","number"]},"automatedReadabilityIndex":{"type":["null","number"]},"consensusGrade":{"type":["null","number"]},"longWords3PlusSyllables":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"EASY","summary":"Flesch reading ease 107.5 (easy); consensus grade level 0.3.","reasons":["21 words, 2 sentences, 10.5 words per sentence, 1.05 syllables per word.","Plain-English guidance aims for a grade level of 8 or lower for general audiences."],"words":21,"sentences":2,"fleschReadingEase":107.55,"fleschKincaidGrade":0.87,"gunningFog":4.2,"smog":null,"colemanLiau":-1.54,"automatedReadabilityIndex":-2.5,"consensusGrade":0.26,"longWords3PlusSyllables":0,"degraded":false,"notChecked":["languages other than English","meaning, tone or correctness","…2 more"],"source":"computed locally","asOf":"2026-10-11T04:08:07.744Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/readability"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/readability"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/readability"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/readability"}}]}}},"/text-diff":{"get":{"operationId":"text_diff","summary":"Word-level diff of two texts: words added, removed and kept, the changed spans, and a percent changed.","description":"Word-level diff of two texts: words added, removed and kept, the changed spans, and a percent changed.","tags":["text","diff","versioning"],"parameters":[{"name":"old","in":"query","required":true,"description":"Original text (up to 1500 characters)","schema":{"type":"string"}},{"name":"new","in":"query","required":true,"description":"New text","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"wordsOld":{"type":["null","number"]},"wordsNew":{"type":["null","number"]},"removed":{"type":["null","number"]},"added":{"type":["null","number"]},"kept":{"type":["null","number"]},"changedPct":{"type":["null","number"]},"changes":{"type":["array","null"],"items":{"type":"object","properties":{"removed":{"type":["null","string"]},"added":{"type":["null","string"]}}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"EDITED","summary":"3 word(s) removed, 4 added, 6 kept (36.8% changed).","reasons":["\"brown\" -> \"red\"","\"jumps\" -> \"leaps\"","…1 more"],"wordsOld":9,"wordsNew":10,"removed":3,"added":4,"kept":6,"changedPct":36.8,"changes":[{"removed":"brown","added":"red"},{"removed":"jumps","added":"leaps"}],"degraded":false,"notChecked":["moved paragraphs (a move shows as a delete plus an add)","formatting and whitespace changes"],"source":"computed locally","asOf":"2026-10-11T04:08:07.994Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/text-diff"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/text-diff"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/text-diff"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/text-diff"}}]}}},"/text-similarity":{"get":{"operationId":"text_similarity","summary":"Similarity of two texts by edit distance, word overlap (Jaccard) and cosine, with a same, similar or different verdict.","description":"Similarity of two texts by edit distance, word overlap (Jaccard) and cosine, with a same, similar or different verdict.","tags":["text","similarity","dedupe"],"parameters":[{"name":"a","in":"query","required":true,"description":"First text (up to 1500 characters)","schema":{"type":"string"}},{"name":"b","in":"query","required":true,"description":"Second text","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"levenshteinDistance":{"type":["null","number"]},"editSimilarity":{"type":["null","number"]},"jaccardWords":{"type":["null","number"]},"cosineWordCounts":{"type":["null","number"]},"lengths":{"type":["null","object"],"properties":{"a":{"type":["null","number"]},"b":{"type":["null","number"]}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"SIMILAR","summary":"Edit-distance similarity 57.1%, word overlap 0%, cosine 0%: similar.","reasons":["Levenshtein distance 3 edits between 6 and 7 characters."],"levenshteinDistance":3,"editSimilarity":0.5714,"jaccardWords":0,"cosineWordCounts":0,"lengths":{"a":6,"b":7},"degraded":false,"notChecked":["meaning (two sentences can mean the same with no shared words)","languages: tokenization is Latin-script words"],"source":"computed locally","asOf":"2026-10-11T04:08:08.255Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/text-similarity"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/text-similarity"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/text-similarity"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://text-metrics.x402tookit.com/text-similarity"}}]}}}}}