apyhub
ARTIFICIAL INTELLIGENCE · SEO

Readability Scores API

Hosted on ApyHub

What it does

Readability Score analyzes plain text and returns readability metrics you can use to check how easy the text is to read. Send a text string, and choose language as english or german to select the scoring algorithm.

The response includes text stats such as words, sentences, characters, and paragraphs, plus estimated reading_time, speaking_time, and average lengths for words, sentences, and paragraphs. For English text, you also get flesh_kincaid_reading_ease; for German text, the service returns wiener_sachtextformel. Each score object includes the measured level, score, class, label, and class_label.

Use Readability Score when you need to assess documentation, marketing copy, help articles, or user-facing product text before publishing. It gives you a fast way to compare drafts, enforce writing guidelines, or flag content that is too dense for your target audience.

POST
Score readability of plain text
http://localhost:8080/apyhub/score-readability-of-plain-text
QUICKSTARTGUIDE

Quickstart

Send some plain text to get a readability score back.

curl -X POST "http://localhost:8080/apyhub/score-readability-of-plain-text" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"The quick brown fox jumps over the lazy dog. This sentence is simple and easy to read. Children enjoy reading short books."}'

What you'll get back

Returns a JSON object with a data object. Inside data, stats contains text metrics such as words, sentences, characters, paragraphs, reading_time, speaking_time, avg_word_length, avg_sentence_length, and avg_paragraph_length, and flesh_kincaid_reading_ease contains the readability result for English text.

{
  "data": {
    "stats": {
      "words": 95,
      "sentences": 8,
      "characters": 512,
      "paragraphs": 2,
      "reading_time": 6.49,
      "speaking_time": 38,
      "avg_word_length": 5.39,
      "avg_sentence_length": 11.88,
      "avg_paragraph_length": 4
    },
    "flesh_kincaid_reading_ease": {
      "class": "8th & 9th grade",
      "label": false,
      "level": 6.49,
      "score": 65.74,
      "class_label": "Plain English. Easily understood by 13- to 15-year-old students."
    }
  }
}
TRY ITLIVE · 250 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
body*
Raw text to analyse.
Scoring algorithm to use. `english` returns Flesch-Kincaid Reading Ease; `german` returns Wiener Sachtextformel.

About this endpoint

What it does

Scores raw plain text for readability and returns text statistics plus a readability result for the selected language algorithm. The request body must include the text to analyze, and may include language to choose between the English and German scoring methods.

Request Body

ParameterTypeMandatoryDescription
textStringYesRaw text to analyse.
languageENUMNoScoring algorithm to use. Allowed values: english, german. Default: english. english returns Flesch-Kincaid Reading Ease; german returns Wiener Sachtextformel.

Response

Returns a JSON object with a data object field. Inside data, stats is an object with text statistics, and the readability result is returned as either flesh_kincaid_reading_ease or wiener_sachtextformel, depending on the selected algorithm.

ParameterTypeMandatoryDescription
dataObjectYesResponse wrapper object. Contains stats and one readability result object.
data.statsObjectYesText statistics object.
data.stats.wordsIntegerNoNumber of words.
data.stats.sentencesIntegerNoNumber of sentences.
data.stats.charactersIntegerNoNumber of characters.
data.stats.paragraphsIntegerNoNumber of paragraphs.
data.stats.reading_timeNumberNoEstimated reading time in seconds.
data.stats.speaking_timeNumberNoEstimated speaking time in seconds.
data.stats.avg_word_lengthNumberNoAverage word length.
data.stats.avg_sentence_lengthNumberNoAverage sentence length.
data.stats.avg_paragraph_lengthNumberNoAverage paragraph length.
data.flesh_kincaid_reading_easeObjectNoReadability result returned for language: english. Contains class, label, level, score, and class_label.
data.flesh_kincaid_reading_ease.classStringNoReadability class.
data.flesh_kincaid_reading_ease.labelBooleanNoWhether the text meets a standard readability threshold.
data.flesh_kincaid_reading_ease.levelNumberNoReadability level.
data.flesh_kincaid_reading_ease.scoreNumberNoFlesch-Kincaid Reading Ease score.
data.flesh_kincaid_reading_ease.class_labelStringNoHuman-readable class label.
data.wiener_sachtextformelObjectNoReadability result returned for language: german. Contains class, label, level, score, and class_label.
data.wiener_sachtextformel.classStringNoReadability class.
data.wiener_sachtextformel.labelBooleanNoWhether the text meets a standard readability threshold.
data.wiener_sachtextformel.levelNumberNoReadability level.
data.wiener_sachtextformel.scoreNumberNoWiener Sachtextformel score.
data.wiener_sachtextformel.class_labelStringNoHuman-readable class label.

Notes

The response schema is a oneOf: the top-level shape is the same, but the readability result field changes with the selected language. Read data.flesh_kincaid_reading_ease for English scoring, or data.wiener_sachtextformel for German scoring.

Body

Name
Type
Description
bodyREQUIRED
object
▣ COMMON ERRORS

Errors any endpoint can return

400bad_request

Required parameter missing or malformed body.

401unauthorized

API key missing, revoked, or not authorized for this service.

429rate_limited

Your plan's per-second rate exceeded. Retry with exponential backoff.

503upstream_busy

Backend temporarily unavailable. Try again in a few seconds.