Quickstart
Get up and running in under a minute.
Get your API key
Sign up or log in at writehuman.ai, purchase an API subscription, and create your key from the dashboard.
Make your first request
curl -X POST https://api.writehuman.ai/v1/humanize \
-H "Authorization: Bearer wh_live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"text": "Artificial intelligence has revolutionized the way we approach content creation and digital communication."}'See the response
Standard plans return a single result. Premium plans return 3 variations with human-likeness scores.
{
"id": "hum_a1b2c3d4e5f6",
"created": 1778533901580,
"results": [
"AI has changed how we create content and communicate online."
],
"scores": null,
"input_words": 14,
"words_remaining": {
"included": 124986,
"topup": 0,
"total": 124986
}
}Authentication
All API requests require a Bearer token in the Authorization header. You can create and manage API keys from your dashboard.
Authorization: Bearer wh_live_your_api_key_here
Keys use the prefix wh_live_ followed by a unique token. Keep your keys secret — treat them like passwords. You can create up to 5 keys and revoke any key at any time.
Plans & Limits
Choose a plan that fits your usage. All plans include monthly word allowances that reset each billing cycle.
| Standard | Premium | |
|---|---|---|
| Monthly words | 125,000 | 400,000 |
| Max words per request | 2,000 | 4,000 |
| Output variations | 1 | 3 |
| Human-likeness scores | ||
| Rate limit | 40 req/min | 120 req/min |
Standard
Premium
Premium plans automatically return 3 output variations per request with human-likeness scores. Standard plans return a single result without scores. Usage is tracked by input text word count. Words are deducted from your subscription first, then any top-up credits. Top-up packs (125,000 words each) never expire.
Endpoint Reference
Three REST endpoints, one base URL, and one Bearer key. All requests authenticate the same way.
/v1/humanizehttps://api.writehuman.ai/v1/humanize
text, tone, and language only — model, num_outputs, and sequence_id are not available.Request Body — application/json
textrequiredThe text to humanize.
>= 30 characters, <= 100,000 characters
toneoptionalOptional writing tone. Omit for default style.
Allowed: professional, academic, blog, casual, creative, scientific, technical
languageoptionalTarget language (e.g. English, Spanish, Chinese (Mandarin)). Auto-detected if omitted.
Response Body — application/json
idUnique identifier for this humanization request.
createdUnix timestamp (milliseconds) when the request was received.
resultsHumanized text variations, sorted by score (best first).
scoresHuman-likeness score for each result (0–1, higher = more human).
Premium plans only. `null` on Standard plans.
input_wordsNumber of words billed for this request.
words_remainingYour remaining word balance after this request.
Fields: included (integer), topup (integer), total (integer)
Error Responses
Missing or invalid API key.
Invalid API key
{ "error": "Invalid API key" }Missing Authorization header
{ "error": "Missing or invalid Authorization header. Use: Bearer <api_key>" }No active subscription or insufficient word balance.
No active subscription
{ "error": "No active subscription" }Insufficient balance
{
"error": "Insufficient word balance",
"words_remaining": {
"included": 12,
"topup": 0,
"total": 12
}
}Invalid input, forbidden parameters, over word limit, or content blocked by moderation.
Invalid request body
{ "error": "Invalid request: ..." }Forbidden parameter
{ "error": "The model parameter is not available" }Word limit exceeded
{ "error": "Input exceeds per-request limit of 2000 words for your plan. Received ~2500 words." }Content moderation
{ "error": "Content blocked: sexual" }Rate limit, queue capacity, or too many failed auth attempts.
Rate limit
{ "error": "Rate limit exceeded for your plan (api_standard -> 40/min). api_standard: 40/min | api_premium: 120/min" }Too many failed auth attempts
{ "error": "Too many failed authentication attempts" }Request queue full
{ "error": "Too many queued requests. Please retry shortly." }Queue wait timeout
{ "error": "Request waited too long for capacity. Please retry." }Service at capacity.
{ "error": "Service is at capacity. Please retry shortly." }Processing failure.
{ "error": "Processing failed" }/v1/usagehttps://api.writehuman.ai/v1/usage
included_words − words_used_this_cycle + topup_balance.Response Body — application/json
included_wordsWords included in your plan each billing cycle.
words_used_this_cycleWords used so far in the current billing cycle.
topup_balanceRemaining top-up words. Top-up packs never expire.
tierYour plan: api_standard or api_premium.
versionCurrent API version.
{
"included_words": 400000,
"words_used_this_cycle": 18311,
"topup_balance": 125000,
"tier": "api_premium",
"version": "v1.0"
}Error Responses
Missing or invalid API key.
Invalid API key
{ "error": "Invalid API key" }Missing Authorization header
{ "error": "Missing or invalid Authorization header" }No active subscription.
{ "error": "No active subscription" }Too many failed authentication attempts.
{ "error": "Too many failed authentication attempts" }/v1/detecthttps://api.writehuman.ai/v1/detect
/v1/humanize. Non-English input is automatically translated to English before scoring. Set include_sentences to true for a per-sentence breakdown. Note: ai_probability runs 0–1 where 1 = AI — the opposite orientation of the humanize scores field.Request Body — application/json
textrequiredThe text to score for AI authorship.
>= 10 characters, <= 100,000 characters
languageoptionalLanguage of the text. Auto-detected if omitted; non-English text is translated to English before scoring.
include_sentencesoptionalReturn a per-sentence AI-probability breakdown.
Default: false
Response Body — application/json
scanIdUnique identifier for this detection scan.
versionDetector model version.
ai_probabilityProbability the text is AI-generated (0–1, where 1 = AI).
Opposite orientation from the /v1/humanize scores field, where higher = more human.
predicted_classOverall label: ai, human, or mixed.
class_probabilitiesProbability for each class.
Fields: ai, human, mixed
request_metaLength of the scored text.
doc_length: { chars, tokens }
languageDetected (or supplied) language of the input.
sentencesPer-sentence breakdown, each { text, ai_prob }.
Present only when include_sentences is true.
{
"scanId": "20260609OMIOISUZ",
"version": "txtdetect-2026-05-14",
"ai_probability": 0.94,
"predicted_class": "ai",
"class_probabilities": { "ai": 0.94, "human": 0.04, "mixed": 0.02 },
"request_meta": { "doc_length": { "chars": 642, "tokens": 98 } },
"language": "English",
"sentences": [
{ "text": "Artificial intelligence has rapidly transformed modern business.", "ai_prob": 0.97 },
{ "text": "Many teams now depend on it every single day.", "ai_prob": 0.61 }
]
}Error Responses
Missing or invalid API key.
Invalid API key
{ "error": "Invalid API key" }Missing Authorization header
{ "error": "Missing or invalid Authorization header" }No active subscription or insufficient word balance.
No active subscription
{ "error": "No active subscription" }Insufficient balance
{
"error": "Insufficient word balance",
"words_remaining": {
"included": 8,
"topup": 0,
"total": 8
}
}Invalid input or over the per-request word limit.
Invalid request body
{ "error": "Invalid request: ..." }Word limit exceeded
{ "error": "Input exceeds per-request limit of 2000 words for your plan. Received ~2500 words." }Rate limit or too many failed auth attempts.
Rate limit
{ "error": "Rate limit exceeded for your plan (api_standard -> 40/min). api_standard: 40/min | api_premium: 120/min" }Too many failed auth attempts
{ "error": "Too many failed authentication attempts" }Detection service temporarily unavailable. The request is not charged.
{ "error": "Detection service unavailable. Please retry." }Code Examples
Full working examples in popular languages. Replace the API key with your own to get started.
curl -X POST https://api.writehuman.ai/v1/humanize \
-H "Authorization: Bearer wh_live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"text": "Artificial intelligence has revolutionized the way we approach content creation and digital communication."}'Response
The response format depends on your plan.
{
"id": "hum_a1b2c3d4e5f6",
"created": 1778533901580,
"results": [
"AI has changed how we create content and communicate online."
],
"scores": null,
"input_words": 14,
"words_remaining": {
"included": 124986,
"topup": 0,
"total": 124986
}
}Supported Languages
WriteHuman supports 40+ languages. Pass the language name as the language parameter, or omit it for automatic detection.
Common Use Cases
Content Marketing
Generate blog posts, product descriptions, and ad copy with AI that reads indistinguishable from human writing.
SEO Agencies
Produce high-volume content that passes AI detection checks before publication.
SaaS Products
AI writing features where the final output needs to be indistinguishable from human writing.
Enterprise Teams
Process internal communications, reports, and documentation generated by large language models.
Support
By using the WriteHuman API you agree to our Terms of Service.