Reading time
What this does
Estimates how long a piece of text takes to read. Counts words, applies a standard reading speed (around 200 words per minute for silent reading), and returns minutes and seconds. Handy for blogs, newsletters, and accessibility hints.
Who it is for
- Blog templates showing “5 min read”
- Email footers setting expectations
- CMS plugins without a local word counter
- Editors trimming copy to a time budget
Try it
https://fetch.li/v1/readtime?text=fetch.li helps teams ship small APIs without running a platform team.
Longer sample (URL-encode in practice):
https://fetch.li/v1/readtime?text=The quick brown fox jumps over the lazy dog. Repeat for a longer article body pasted here.
HTTP example
GET /v1/readtime?text=UK%20Dev%20Suite%20documentation HTTP/1.1
Host: fetch.li
Accept: application/json
curl
curl -sS "https://fetch.li/v1/readtime?text=UK%20Dev%20Suite%20documentation"
JavaScript fetch
const text = "fetch.li helps teams ship small APIs.";
const response = await fetch(
`https://fetch.li/v1/readtime?text=${encodeURIComponent(text)}`
);
const stats = await response.json();
console.log(stats.minutes, stats.words);
Python requests
import requests
response = requests.get(
"https://fetch.li/v1/readtime",
params={"text": "fetch.li helps teams ship small APIs."},
)
response.raise_for_status()
print(response.json())
Example JSON response
{
"words": 42,
"characters": 218,
"minutes": 1,
"seconds": 13,
"wpm": 200,
"human": "1 min read"
}
For very short text:
{
"words": 3,
"characters": 11,
"minutes": 0,
"seconds": 1,
"wpm": 200,
"human": "Less than 1 min read"
}
Parameters
| Parameter | Required | Type | Description |
|---|---|---|---|
text |
Yes | string | Body text to analyse (max 50,000 characters) |
Errors that can happen
| HTTP | error.code |
When |
|---|---|---|
| 400 | invalid_body |
Missing or empty text, or text too long |
| 429 | rate_limited |
Demo limit exceeded |
| 500 | internal |
Unexpected server error |
Demo
GET endpoints work without an API key on the public demo tier (60 calls per hour per IP). POST /v1/vibe/classify needs a key.