apyhub
Back

Text Utilities API

What it does

Text Utilities gives you a small set of text-processing endpoints for common content operations. Send text in, get back counts, transformed text, extracted contacts and URLs, or generated placeholder copy.

Use Text Utilities when you need to measure content length, estimate reading time, normalize text into a slug, sort lines or words, or replace matching text with a controlled rule set. The word-count endpoint returns words, characters, charactersNoSpaces, sentences, paragraphs, and readingTimeMinutes. The find-and-replace endpoint returns the updated text plus replacementCount. The extract endpoints return arrays of URLs or email addresses found in the input text.

You can also generate lorem ipsum with a chosen number of paragraphs and words per paragraph, or shape a slug from a text string with optional lowercase handling, separator control, stop-word removal, and maxLength. That makes Text Utilities useful for CMS workflows, content moderation checks, editorial tools, and internal automation where text needs to be measured or rewritten before it is stored or published.

The endpoints are straightforward to compose in pipelines: validate a draft, extract contact data, generate a slug, then write the processed output into your app or database.

▣ ENDPOINT 01 / 07
POST
Word Count & Reading Time
https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/word-count

QUICKSTART

GUIDE

Quickstart

Count the words in a piece of text by sending the required text field.

curl -X POST "https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/word-count" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"This is a short example sentence."}'

What you'll get back

The live response to the request above:

{
  "tool": "Word counter client and server side from freedailypro",
  "result": {
    "words": 6,
    "characters": 33,
    "charactersNoSpaces": 28,
    "sentences": 1,
    "paragraphs": 1,
    "readingTimeMinutes": 1
  }
}
TRY ITLIVE · 10 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*

About this endpoint

What it does

Counts the words, characters (with and without spaces), sentences and paragraphs in a piece of text, and estimates how long it takes to read. Use it for word limits, content briefs, SEO length checks or showing a "minutes to read" label. Reading time is based on wordsPerMinute, which defaults to 200.

Request Body

ParameterTypeMandatoryDescription
textStringYesThe text to analyze.
wordsPerMinuteNumberNoReading speed used for calculation. Minimum 50, maximum 1000. Default: 200.

Response

A successful call returns a JSON object with these fields:

ParameterTypeDescription
toolStringName of the tool that produced the response.
resultObjectText statistics.
result.wordsNumberNumber of words.
result.charactersNumberNumber of characters, including spaces.
result.charactersNoSpacesNumberNumber of characters, excluding spaces.
result.sentencesNumberNumber of sentences.
result.paragraphsNumberNumber of paragraphs.
result.readingTimeMinutesNumberEstimated reading time in minutes.
▣ ENDPOINT 02 / 07
POST
Sort Lines or Words
https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/sort

QUICKSTART

GUIDE

Quickstart

Sort a block of text by lines or words with the required text field.

curl -X POST "https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/sort" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"banana\napple\ncherry"}'

What you'll get back

The live response to the request above:

{
  "tool": "Text sorter client and server side from freedailypro",
  "result": "apple\nbanana\ncherry"
}
TRY ITLIVE · 10 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*

About this endpoint

What it does

Sorts text alphabetically, either line by line or word by word. You can sort ascending or descending, remove duplicates with unique, and choose whether upper and lower case are treated differently with caseSensitive. Use it to tidy lists, keywords, tags or names.

Request Body

ParameterTypeMandatoryDescription
textStringYesThe text to sort.
modeENUMNoSort mode. Allowed values: lines, words. Default: lines.
orderENUMNoSort order. Allowed values: asc, desc. Default: asc.
uniqueBooleanNoWhen true, removes duplicate items before returning the sorted result.
caseSensitiveBooleanNoWhen true, sorting treats letter case as significant.

Response

A successful call returns a JSON object with these fields:

ParameterTypeDescription
toolStringName of the tool that produced the response.
resultStringThe sorted text.
▣ ENDPOINT 03 / 07
POST
Find & Replace Text
https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/find-replace

QUICKSTART

GUIDE

Quickstart

Replace text in a string by sending the text, the search term, and the replacement value.

curl -X POST "https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/find-replace" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello world, welcome to the world of text utilities.","find":"world","replace":"universe"}'

What you'll get back

The live response to the request above:

{
  "tool": "Find replace client and server side from freedailypro",
  "result": "Hello universe, welcome to the universe of text utilities.",
  "replacementCount": 2
}
TRY ITLIVE · 10 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*

About this endpoint

What it does

Finds text and replaces it with something else. You can match plain text or a regular expression, replace every match or only the first, and choose whether matching is case-sensitive. The response also includes replacementCount, the number of matches found in the text.

Request Body

ParameterTypeMandatoryDescription
textStringYesThe input text to search and modify.
findStringYesThe string or pattern to search for.
replaceStringYesThe text to substitute for each match.
useRegexBooleanNoWhether find should be treated as a regular expression.
replaceAllBooleanNoWhether to replace all matches instead of only the first match. Default: true.
caseSensitiveBooleanNoWhether matching should be case sensitive. Default: false.

Response

A successful call returns a JSON object with these fields:

ParameterTypeDescription
toolStringName of the tool that produced the response.
resultStringThe text after replacement.
replacementCountNumberNumber of replacements made.
▣ ENDPOINT 04 / 07
POST
Lorem Ipsum Generator
https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/lorem

QUICKSTART

GUIDE

Quickstart

Generate a Lorem Ipsum text sample with the default minimal JSON body.

curl -X POST "https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/lorem" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"paragraphs":1,"startWithLorem":true,"wordsPerParagraph":5}'

What you'll get back

The live response to the request above:

{
  "tool": "Lorem ipsum generator client and server side from freedailypro",
  "result": "Lorem ipsum dolor sit amet."
}
TRY ITLIVE · 10 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*

About this endpoint

What it does

Generates lorem ipsum placeholder text for mockups, wireframes and test data. Choose how many paragraphs and how many words per paragraph you need, and whether the text starts with the classic "Lorem ipsum dolor sit amet".

Request Body

ParameterTypeMandatoryDescription
paragraphsNumberNoNumber of paragraphs to generate. Minimum 1, maximum 50. Default: 1.
startWithLoremBooleanNoWhether the generated text should start with “Lorem”.
wordsPerParagraphNumberNoNumber of words per paragraph. Minimum 5, maximum 500. Default: 50.

Response

A successful call returns a JSON object with these fields:

ParameterTypeDescription
toolStringName of the tool that produced the response.
resultStringThe generated placeholder text. Paragraphs are separated by a blank line.
▣ ENDPOINT 05 / 07
POST
URL Slug Generator
https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/slug

QUICKSTART

GUIDE

Quickstart

Generate a slug from a text string by sending the required text field.

curl -X POST "https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/slug" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello World"}'

What you'll get back

The live response to the request above:

{
  "tool": "Slug generator client and server side from freedailypro",
  "result": "hello-world"
}
TRY ITLIVE · 10 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*

About this endpoint

What it does

Turns a title or phrase into a clean, URL-friendly slug, for example "The Best APIs in the World" becomes the-best-apis-in-the-world. You can choose the separator, keep or remove capital letters, remove common stop words, and limit the length. Use it for blog post URLs, product pages and file names.

Request Body

ParameterTypeMandatoryDescription
textStringYesSource text to convert into a slug.
lowercaseBooleanNoWhether to convert the slug to lowercase. Default: true.
maxLengthNumberNoMaximum slug length. Must be between 0 and 500.
separatorStringNoSeparator used between slug parts. Maximum length is 3 characters. Default: -
removeStopWordsBooleanNoWhether to remove stop words while generating the slug. Default: false.

Response

A successful call returns a JSON object with these fields:

ParameterTypeDescription
toolStringName of the tool that produced the response.
resultStringThe generated URL slug.
▣ ENDPOINT 06 / 07
POST
Extract URLs from Text
https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/extract-urls

QUICKSTART

GUIDE

Quickstart

Send a text string to extract URLs from it.

curl -X POST "https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/extract-urls" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"Check out https://apyhub.com and https://docs.apyhub.com for details."}'

What you'll get back

The live response to the request above:

{
  "tool": "Url extractor client and server side from freedailypro",
  "result": [
    "https://apyhub.com",
    "https://docs.apyhub.com"
  ]
}
TRY ITLIVE · 10 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*

About this endpoint

What it does

Finds every web link in a piece of text and returns them as a list, in the order they appear. Only links that start with http:// or https:// are detected. Use it to pull links out of messages, documents, comments or scraped content.

Request Body

ParameterTypeMandatoryDescription
textStringYesText to scan for URLs.

Response

A successful call returns a JSON object with these fields:

ParameterTypeDescription
toolStringName of the tool that produced the response.
resultArray of StringURLs found in the text, in order of appearance.
▣ ENDPOINT 07 / 07
POST
Extract Emails from Text
https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/extract-emails

QUICKSTART

GUIDE

Quickstart

Send the text you want to scan for email addresses in the request body.

curl -X POST "https://api.eu.apyhub.com/freedailypro/text-utilities-api/text/extract-emails" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"Please contact [email protected] or [email protected] for help."}'

What you'll get back

The live response to the request above:

{
  "tool": "Email extractor client and server side from freedailypro",
  "result": [
    "[email protected]",
    "[email protected]"
  ]
}
TRY ITLIVE · 10 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*

About this endpoint

What it does

Finds every email address in a piece of text and returns them as a list, in the order they appear. Use it to pull contacts out of messages, documents, signatures or scraped content.

Request Body

ParameterTypeMandatoryDescription
textStringYesThe text to extract email addresses from.

Response

A successful call returns a JSON object with these fields:

ParameterTypeDescription
toolStringName of the tool that produced the response.
resultArray of StringEmail addresses found in the text, in order of appearance.
▣ 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.