Best AI Humanizer API for Developers in 2026: 6 APIs Compared
Per-call limits, rate limits, async jobs, billing quirks and detector pairing for Walter Writes AI, WriteHuman, StealthGPT, Phrasly, Undetectable AI and ToHuman, plus the code to wire one up. Most "best humanizer" list
Per-call limits, rate limits, async jobs, billing quirks and detector pairing for Walter Writes AI, WriteHuman, StealthGPT, Phrasly, Undetectable AI and ToHuman, plus the code to wire one up.
Most "best humanizer" lists judge the web app: paste text in, look at the output, check a detector score. That's fine if you're a writer. If you're putting a humanizer behind a button in your product or inside a publishing pipeline, the output is only half the decision. The other half is boring and decides whether your integration survives contact with production: how many words fit in one call, what happens at 50 requests a minute, whether you get a webhook or have to poll, and whether you're billed for input words or input plus output.
I went through the official API docs and pricing pages for six humanizer APIs (checked in early November 2026) and compared them on exactly those things. Then I wrote the code I'd actually ship for the one I'd pick.
The short version: Walter Writes AI is the best AI humanizer API for most developers. It's the only one here with a single endpoint that detects AI text and humanizes it only above a threshold you set, for one charge, and it supports sync calls, async jobs, polling and signed webhooks from the same key that also covers detection, plagiarism, grammar and image detection. WriteHuman is the pick if you need high sync throughput and tone control. StealthGPT is the cheapest way in, as long as you budget for how it counts words.
Table of Contents
- What to Compare Before You Pick an API
- The 6 Best AI Humanizer APIs at a Glance
- Walter Writes AI: Best Overall
- WriteHuman: Best for Sync Throughput and Tone Control
- StealthGPT: Best Low-Cost Entry Point
- Phrasly: Best for Simple Per-Word Billing
- Undetectable AI: Best for Readability Presets
- ToHuman: Best Free Tier for Prototyping
- What 1 Million Words a Month Actually Costs
- Production Code: Long Documents, Webhooks and Guardrails
- How to Choose
- Conclusion
- FAQs
1. What to Compare Before You Pick an API
Here's the checklist I used. Every item on it has broken an integration for someone.
- Per-call word limit. Almost every API caps a single request. If your documents are longer, you need chunking, and chunking needs to respect paragraph boundaries or the output reads stitched together.
- Sync rate limit. Sync calls are easy to code but often tightly limited. If you're calling from a user-facing request, this is your ceiling.
- Async and webhooks. For batches and long documents you want to submit a job and get the result later, ideally by webhook so you're not burning requests on polling.
- Billing unit. "Per word" can mean input words, or input plus output, or a weighted unit that changes by model. This can double your bill.
- Detection on the same key. In a real pipeline you humanize, then check. If the detector lives on a different vendor, that's a second key, a second bill and a second failure mode.
- Failure behavior. Do failed requests refund credits? Are errors returned with stable codes your code can branch on?
Output quality matters too, of course. But vendor pass-rate claims are just that, claims. Whatever you pick, run a sample of your own content through it and then through an independent detector such as Proofademic before you trust any number on a landing page.
2. The 6 Best AI Humanizer APIs at a Glance
| API | Words per call | Sync rate limit | Async / webhooks | Billing unit | Detector on same key | Entry price |
|---|---|---|---|---|---|---|
| Walter Writes AI | 50 to 2,000 | 3/min (async has no time limit) | Yes / Yes, with secret header | 1 credit per input word | Yes, plus detect-and-humanize | $49/mo for 300K |
| WriteHuman | 2,000 to 6,000 by plan | 40 to 160/min | Not on API page | Input words | Yes | $29/mo for 125K |
| StealthGPT | Not stated on pricing page | Not stated on pricing page | Not stated on pricing page | Input + output words | Yes | $19/mo for 100K |
| Phrasly | Not stated on business page | "Generous", no number | Streaming / No | Per 1,000 words | Yes | $100/mo minimum |
| Undetectable AI | 50 to 15,000 characters | 3/sec per IP | Async only (polling) / No | Web plan word credits | Not in humanizer docs | Shares web plan |
| ToHuman | 2,000 (sync) | 60 to 300/min | Yes / Yes | Words | No | Free 2,500/mo |
A few notes on reading this. "Not stated" means I couldn't find it in the vendor's public API or pricing page, not that the feature doesn't exist. And rate limits are per plan, so check yours before you design around them.
3. Walter Writes AI: Best Overall
Walter calls its API "the authenticity layer for the AI content era," and the design backs that up. One developer portal and one credit pool cover a humanizer, an AI detector, a combined detect-and-humanize endpoint, plagiarism scanning, grammar correction, AI image detection and AI voice detection. Keys are scoped, so a key for your CMS can be limited to humanizer and detector while another only scans images.
Endpoints you'll actually use
-
POST /api/humanizer/takescontentand returns the humanizedresult,word_count,execution_timeandcredits_remaining. -
POST /api/detector/returns anai_scorefrom 0.0 to 1.0, a binaryresult, and per-sentenceitems. -
POST /api/detect-and-humanize/takescontentand adetection_threshold. It scores the text and only humanizes it if the score is above your threshold. If it doesn't humanize, it returns the per-sentence detection items instead. -
GET /api/jobs/{task_id}/fetches async results.
Why it ranks first
The detect-and-humanize endpoint is the feature I'd build around. Per Walter's credits docs, it charges once for the full word count whether or not humanization runs. So "check this, and only rewrite it if it looks AI-generated" costs the same as humanizing alone, and it's one request instead of two with logic in between. Human-written text passes through untouched, which is exactly what you want in a CMS where some authors use AI and some don't.
The async story is also the most complete here. Add poll: true, a callback_url, or both, and you get a 202 with a task_id. Webhooks include an X-Webhook-Secret header you set per request, are retried up to three times with exponential backoff, and are only sent to publicly routable URLs. Failed jobs refund credits automatically, and errors come back with stable codes like insufficient_credits, credits_exhausted and trial_expired.
On the trust side, Walter's API page lists SOC 2 Type II and an enterprise uptime commitment, which matters if you're selling into companies that will send you a security questionnaire.
The limits to design around
- Each request takes 50 to 2,000 words. Requests outside that range are rejected with a
400before any credits are charged. - Sync humanizer calls are limited to 3 requests per minute per user. Async requests have no time-based limit; they're capped by credits and a pending-jobs limit that runs from 2 on the trial to 50 on the 25M plan.
- Async results expire after one hour, so fetch or store them promptly.
- The humanizer API takes
contentonly. There's no tone or strength parameter, so if you need certain phrases kept exactly, check for them after the call (code below).
In practice that means: use sync for small interactive requests, async for everything else. Section 10 has the code.
Pricing: 1 credit per word, one pool for every API. Plans run from $49/month for 300K credits to $1,699/month for 25M, credits reset monthly, and new accounts get 2,000 trial credits for 5 days with no card required.
Minimal example
import os
import requests
BASE = "https://developer-portal.walterwrites.ai/api"
HEADERS = {
"Content-Type": "application/json",
"X-API-Key": os.environ["WALTER_API_KEY"], # needs humanizer + ai_detector scopes
}
def check_and_humanize(text: str, threshold: float = 0.5) -> dict:
r = requests.post(
f"{BASE}/detect-and-humanize/",
headers=HEADERS,
json={"content": text, "detection_threshold": threshold},
timeout=120,
)
r.raise_for_status()
data = r.json()
return {
"ai_score": data["ai_score"],
"humanized": data["humanized"],
"text": data["humanized_content"] if data["humanized"] else data["content"],
}
If you'd rather run Walter from an AI assistant than from your own code, it also has an MCP server for Claude, ChatGPT and Claude Code. For a deeper walkthrough of the API itself, I covered setup, scopes and error handling in this AI humanizer API integration guide.
4. WriteHuman: Best for Sync Throughput and Tone Control
WriteHuman's API is a clean, single-endpoint design: POST /v1/humanize with a Bearer key, plus POST /v1/detect and a read-only GET /v1/usage.
What stands out
- Higher sync limits. 40 requests per minute on Standard, 120 on Premium 400K, and 160 from Premium 800K up. If you must stay synchronous inside a user request, this is the most headroom on the list.
- Larger calls. 2,000 words per call on Standard, 4,000 on Premium 400K, and 6,000 from Premium 800K.
- Controls. Seven tones (professional, academic, blog, casual, creative, scientific, technical) and 40+ languages, auto-detected or pinned per request.
- Best of three. Premium plans return three rewrites per call, each with a 0 to 1 human-likeness score, so your code can pick the strongest automatically.
Trade-offs: its own page lists about 20 seconds as the average response time, so "sync" here still means a long-running request. I didn't find async jobs or webhooks documented, and there's no free API tier on the pricing page.
Pricing: Standard is $29/month for 125K words. Premium runs from $69/month for 400K to $419/month for 3M. Billing is by input word, and 100K-word top-up packs cost $25 and don't expire.
5. StealthGPT: Best Low-Cost Entry Point
StealthGPT's API has the lowest entry price and a choice of three models: Super (its flagship, aimed at the strictest detectors), Standard (the balanced option) and Lite (fast, light cleanup).
What stands out
- API plans start at $19/month for 100K Standard words, then $49 for 275K and $99 for 600K.
- Extra Standard usage is $0.20 per 1,000 words.
- It also has a detector and an MCP integration.
Trade-offs: read the billing unit carefully. Plan words are counted on input plus output, and the Super model uses 2.5 plan words per Super word. So 100K "words" on the Build plan is closer to 50K words of input on Standard, and fewer on Super. That's not hidden, it's on the pricing page, but it's easy to miss when you compare headline prices.
6. Phrasly: Best for Simple Per-Word Billing
Phrasly's Business API keeps things simple: POST /api/v1/humanize with an x-api-key header, a detection endpoint that returns flagged sentences, and streaming responses for UIs that want to show progress.
What stands out
- Straightforward pricing: $0.14 per 1,000 words for humanization and $0.02 per 1,000 for detection, with overage at the same rates.
- A premium "Ultra" model at $0.30 per 1,000 words, available on request.
- Typical responses come back in under two seconds, according to Phrasly, with a 99.9% uptime SLA.
Trade-offs: there's a $100 monthly minimum (it includes $100 of credits), so it's not a hobby-project option. Rate limits are described as "generous" without a number, which makes capacity planning harder. No webhook-based async is mentioned.
7. Undetectable AI: Best for Readability Presets
Undetectable AI's API gives you the most explicit rewrite controls of the group.
What stands out
-
Presets.
readability(High School, University, Doctorate, Journalist, Marketing),purpose(Essay, Article, Marketing Material, Cover Letter, Legal Material and more) and an optionalstrength(Quality, Balanced, More Human). - Long inputs. Each document can be 50 to 15,000 characters.
-
Clear errors. A
402when you're out of words is a nice touch for branching logic.
Trade-offs: humanization is async only. You submit a document, get an ID, and poll. Processing averages about 10 seconds, but the docs recommend checking about every 30 seconds, so real-world latency is closer to half a minute. There's no webhook. The rate limit is 3 requests per second per IP, and the API draws on the same word credits as the web app rather than having its own API plans.
8. ToHuman: Best Free Tier for Prototyping
ToHuman is the newest name here and the easiest to start with.
What stands out
- A free plan with 2,500 words a month, API included, no card.
- A sync endpoint (
POST /api/v1/humanizations/sync, up to 2,000 words) and an async endpoint with optional webhooks. - Four intensity levels (minimal, subtle, medium, heavy) and generous rate limits: 60 requests per minute on Free and 300 on Pro.
- Integrations for n8n, Zapier, Make, LangChain, CrewAI and AutoGen.
Trade-offs: it's English only, there's no detector on the same key, and Pro is $19/month for 100K words, so at real volume you're buying 50K-word packs or talking to sales. ToHuman also publishes its own median latency by input size, and for inputs over 500 words it's around a minute.
9. What 1 Million Words a Month Actually Costs
Headline prices don't compare well because the units differ. Here's what 1M words of input per month costs on each API's published pricing, assuming humanized output is roughly the same length as the input.
- Walter Writes AI: $129. The 1M plan covers it, and if you use detect-and-humanize, the detection check is included in that same charge.
- WriteHuman: $179 to $225. Premium 800K ($129) plus two 100K top-ups ($50), or Premium 1.5M at $225.
- Phrasly: $140. 1M words at $0.14 per 1,000.
- StealthGPT: about $379 on Standard. Input plus output makes 1M words in roughly 2M billable words. The Scale plan covers 600K for $99, and the other 1.4M at $0.20 per 1,000 adds $280. Super would cost more.
- ToHuman: about $181. Pro ($19) plus eighteen 50K packs at $9, unless you negotiate a custom plan.
- Undetectable AI: depends on your web plan. API usage draws from the same credits.
Add a detection pass on every document and the gap widens. On Walter, that pass is included in detect-and-humanize. Elsewhere it's either a second metered call or a second vendor.
10. Production Code: Long Documents, Webhooks and Guardrails
Here's the code I'd actually ship with Walter. It handles the three things that bite most teams: documents over the per-call limit, sync rate limits, and making sure the rewrite didn't touch words it shouldn't.
Chunk long documents by paragraph
Never split mid-paragraph. Pack whole paragraphs into chunks under the 2,000-word cap, and keep every chunk above the 50-word minimum.
def chunk_paragraphs(text: str, max_words: int = 1800, min_words: int = 50) -> list[str]:
paras = [p.strip() for p in text.split("\n\n") if p.strip()]
chunks, current, count = [], [], 0
for p in paras:
n = len(p.split())
if current and count + n > max_words:
chunks.append("\n\n".join(current))
current, count = [], 0
current.append(p)
count += n
if current:
# fold a short tail into the previous chunk so it clears the minimum
if chunks and count < min_words:
chunks[-1] += "\n\n" + "\n\n".join(current)
else:
chunks.append("\n\n".join(current))
return chunks
I leave about 10% of headroom under the cap, since a single very long paragraph can push a chunk over if you pack right to the limit.
Run chunks as async jobs, within your pending-jobs limit
Sync calls are capped at 3 per minute, so batches should go async. The pending-jobs limit depends on your plan (5 on the 300K plan, 10 on 1M), so cap concurrency to match.
import asyncio
import os
import httpx
BASE = "https://developer-portal.walterwrites.ai/api"
HEADERS = {"X-API-Key": os.environ["WALTER_API_KEY"]}
MAX_PENDING = 5 # match your plan's pending-jobs limit
async def humanize_chunk(client: httpx.AsyncClient, sem: asyncio.Semaphore, text: str) -> str:
async with sem:
r = await client.post(f"{BASE}/humanizer/", json={"content": text, "poll": True})
r.raise_for_status()
task_id = r.json()["task_id"]
wait = 2 # Walter's recommended backoff: 2s, doubling, capped at 30s
while True:
await asyncio.sleep(wait)
job = (await client.get(f"{BASE}/jobs/{task_id}/")).json()
if job["status"] == "success":
return job["result"]
if job["status"] == "failed":
raise RuntimeError(f"job {task_id} failed") # credits are refunded
wait = min(wait * 2, 30)
async def humanize_document(text: str) -> str:
sem = asyncio.Semaphore(MAX_PENDING)
async with httpx.AsyncClient(headers=HEADERS, timeout=60) as client:
parts = await asyncio.gather(
*(humanize_chunk(client, sem, c) for c in chunk_paragraphs(text))
)
return "\n\n".join(parts)
asyncio.gather keeps results in the same order as the chunks, so the document reassembles correctly.
Or skip polling with a webhook
If you have a public endpoint, pass callback_url and webhook_secret instead of poll. Verify the secret with a constant-time comparison:
import express from "express";
import crypto from "node:crypto";
const app = express();
app.use(express.json());
const SECRET = Buffer.from(process.env.WALTER_WEBHOOK_SECRET);
app.post("/webhooks/walter", (req, res) => {
const received = Buffer.from(req.get("X-Webhook-Secret") || "");
if (received.length !== SECRET.length || !crypto.timingSafeEqual(received, SECRET)) {
return res.sendStatus(401);
}
const { task_id, status, result } = req.body;
// look up which document and chunk this task_id belongs to, then store the result
console.log(task_id, status);
res.sendStatus(204);
});
app.listen(3000);
Walter retries failed deliveries up to three times, so make the handler idempotent: if you've already stored a result for that task_id, return 204 and move on.
Check that protected terms survived
No humanizer API here guarantees that product names, prices or keywords come back exactly as you sent them. A ten-line check after every call catches the cases where they don't:
def missing_terms(original: str, rewritten: str, protected: list[str]) -> list[str]:
return [t for t in protected if t in original and t not in rewritten]
terms = ["Acme Sync Pro", "$49/month", "SOC 2"]
problems = missing_terms(source_text, humanized_text, terms)
if problems:
# retry the chunk once, or route it to an editor with the missing terms highlighted
...
Handle errors by code, not message
Branch on the code field. Retry 429 and 5xx with backoff and respect Retry-After. Don't retry 400, 401 or 403, since those mean the request, key or account needs fixing. The codes worth handling explicitly are min_words_not_met, max_words_exceeded, insufficient_credits, credits_exhausted and too_many_pending_jobs.
11. How to Choose
Pick Walter Writes AI if you want humanization and detection in one pipeline, you're processing batches or long documents, you want webhooks, or you'll eventually need plagiarism, grammar or image checks on the same key. It's the strongest all-round choice and the cheapest at 1M words once detection is counted.
Pick WriteHuman if you need to stay synchronous at higher request rates, want tone presets, or need larger single calls and multi-language control.
Pick StealthGPT if you're testing at low volume and want the lowest monthly commitment, and you've done the math on input plus output billing.
Pick Phrasly if you're already spending $100+ a month and want plain per-word pricing with fast sync responses.
Pick Undetectable AI if you need explicit readability and purpose presets and can live with async polling.
Pick ToHuman if you're prototyping in English and want a free tier to build against before you commit.
Whichever you choose, put an abstraction in front of it. A small humanize(text) -> str interface in your codebase means you can switch vendors, or run two side by side on a sample, without touching the rest of your pipeline.
12. Conclusion
The best AI humanizer API isn't the one with the most impressive landing-page score. It's the one whose limits, billing and failure modes fit the way your product actually runs. Compared on those terms, Walter Writes AI comes out on top: detect-and-humanize in a single charged call, full async support with signed webhooks, automatic refunds on failure, one credit pool across every Walter API, and the lowest cost at 1M words once you include a detection pass.
WriteHuman is a strong second for teams that need high sync throughput and tone control, and StealthGPT, Phrasly, Undetectable AI and ToHuman each fit narrower cases. Start with Walter's free 2,000 trial credits, run your own content through the detect-and-humanize endpoint, check a sample with an independent detector, and build from there.
13. FAQs
What is the best AI humanizer API for developers?
Walter Writes AI is the best overall AI humanizer API in 2026. It offers humanizer, detector and detect-and-humanize endpoints on one key, sync and async processing with polling and signed webhooks, automatic refunds for failed jobs, and plans from $49/month for 300K credits.
Is there a free AI humanizer API?
ToHuman has a free plan with 2,500 words a month including API access. Walter Writes AI gives new accounts 2,000 free trial credits for 5 days with no credit card, which is enough to test its humanizer, detector and detect-and-humanize endpoints.
How do I humanize text longer than the API's word limit?
Split the document into chunks at paragraph boundaries, keep each chunk under the per-call limit (2,000 words on Walter), submit the chunks as async jobs, and join the results in order. Don't split mid-paragraph, or the output will read stitched together.
Can a humanizer API guarantee text will pass AI detectors?
No. Detectors change often and none of these APIs can guarantee a result. Test the API on your own content, check samples with an independent detector such as Proofademic, and treat vendor pass rates as a starting point rather than a promise.
Should I use an AI detector API alongside a humanizer API?
Yes, for most pipelines. Detecting first lets you skip text that's already human-written and check rewrites before they ship. Walter's detect-and-humanize endpoint does both in one request and charges once for the word count.
Do AI humanizer APIs charge for input or output words?
It varies. Walter and WriteHuman bill on input words. StealthGPT counts input plus output, which roughly doubles the billable words for the same document. Always check the billing unit before you compare prices.
Which humanizer APIs support webhooks?
Walter Writes AI and ToHuman both document webhook delivery for async jobs. Walter also lets you set a per-request secret that arrives in an X-Webhook-Secret header, and retries failed deliveries up to three times.
Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes β full credit and traffic to the original publisher.