AI humanizer APIPublic Beta
An AI humanizer API that keeps the facts.
POST a text, get it back sounding like a person wrote it: same meaning, same language, and every number, date, link, email, citation and protected term exactly where it was. One key, one JSON call.
Available now in Public Beta. Open to any workspace.
# Rewrite a text so it reads naturally
curl -X POST https://api.apidocinfra.com/v1/text/rewrite \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "In today’s fast-paced world, it is important to note that our platform delivers value to 1,200 customers.",
"mode": "natural",
"intensity": "medium",
"protected_terms": ["DocInfra"]
}'# The same rewrite request from Node or the browser
const response = await fetch("https://api.apidocinfra.com/v1/text/rewrite", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.DOCINFRA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
text: "In today’s fast-paced world, it is important to note that our platform delivers value to 1,200 customers.",
mode: "natural",
intensity: "medium",
protected_terms: ["DocInfra"],
}),
});
const result = await response.json(); // { rewrite_id, text, language, mode, intensity, metrics }# The same rewrite request with java.net.http
var payload = """
{"text": "In today’s fast-paced world, it is important to note that our platform delivers value to 1,200 customers.", "mode": "natural", "intensity": "medium", "protected_terms": ["DocInfra"]}""";
var request = HttpRequest.newBuilder(URI.create("https://api.apidocinfra.com/v1/text/rewrite"))
.header("Authorization", "Bearer " + System.getenv("DOCINFRA_API_KEY"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
// 200 {"rewrite_id": "...", "text": "...", "language": "en", "mode": "natural", "intensity": "medium", "metrics": {...}}# The same rewrite request with urllib (standard library only)
import json
import os
import urllib.request
payload = {
"text": "In today’s fast-paced world, it is important to note that our platform delivers value to 1,200 customers.",
"mode": "natural",
"intensity": "medium",
"protected_terms": ["DocInfra"],
}
request = urllib.request.Request(
"https://api.apidocinfra.com/v1/text/rewrite",
data=json.dumps(payload).encode(),
headers={
"Authorization": "Bearer " + os.environ["DOCINFRA_API_KEY"],
"Content-Type": "application/json",
},
)
with urllib.request.urlopen(request) as response:
result = json.loads(response.read()) # {"rewrite_id": "...", "text": "...", "language": "en", "mode": "natural", "intensity": "medium", "metrics": {...}}# 200 with the rewritten text and metrics
{
"rewrite_id": "rwr_01J9Z3F8Q6W2XK4B7C9D0E1F2G",
"text": "Our platform delivers value to 1,200 customers.",
"language": "en",
"mode": "natural",
"intensity": "medium",
"metrics": { "input_words": 18, "output_words": 7, "changed_percent": 61.1 }
}Real endpoints and fields from the API contract. Replace the key and the file.
Why developers pick it
Preservation by construction
What must not change is swapped for markers before the model sees the text and verified on the way back. If a marker is lost, you get an error, not a guess.
Meaning first
The prompt is versioned in code and ranks meaning, facts, intent and language above naturalness. Nothing is inflated to look human.
Output checks
Length ratio, language and stray instructions are checked on every chunk, with one strict retry before the call fails.
Your text is not stored
Only counts, timings and cost are recorded. The text never goes to the database or the logs.
Stable API
Modes, intensity, protected terms and idempotency are part of the contract; the model behind it can change without breaking you.
Documents too
The same engine rewrites DOCX files with the layout kept, as an async job.
One call
- 1
POST /v1/text/rewrite with text, an optional mode (natural, professional, conversational, concise), intensity and protected_terms.
- 2
The API protects numbers, dates, URLs, emails, citations, code and your terms, rewrites the rest in chunks, and checks that everything protected came back once and in order.
- 3
You get the rewritten text with the detected language and metrics: words in, words out, percentage changed.
We do not promise that the output evades AI detectors, and we do not measure against them. The product is judged on naturalness, preserved meaning and exact facts.
Questions
- Which languages?
- English and Spanish are benchmarked; other languages are accepted but not measured.
- How long can a text be?
- Up to 10,000 words per call. Longer inputs are split on paragraphs and rejoined in order.
- Is it available now?
- The API is implemented and in beta. Create a workspace to get a key with it enabled.