New! June 10: Enhanced Model updated for GPTZero 4.6b and Originality 🎉
API Reference v1.0

AI Humanizer API Documentation

Humanize AI-generated text, detect AI authorship, and track usage through a simple REST API. Simple authentication, predictable pricing, 40+ languages.

Base URLhttps://api.writehuman.ai
View Pricing
Starting at$0.17/ 1K words

Quickstart

Get up and running in under a minute.

1

Get your API key

Sign up or log in at writehuman.ai, purchase an API subscription, and create your key from the dashboard.

2

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."}'
3

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

Monthly words125,000
Max words per request2,000
Output variations1
Human-likeness scores
Rate limit40 req/min

Premium

Monthly words400,000
Max words per request4,000
Output variations3
Human-likeness scores
Rate limit120 req/min

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.

POST/v1/humanize

https://api.writehuman.ai/v1/humanize

Rewrite AI-generated text to sound naturally human. Deducts input words from your balance. Usage is tracked by input text word count. Words are deducted from your monthly subscription allowance first, then from any purchased top-up credits. The public API accepts text, tone, and language only — model, num_outputs, and sequence_id are not available.

Request Body — application/json

textrequired
string

The text to humanize.

>= 30 characters, <= 100,000 characters

toneoptional
string

Optional writing tone. Omit for default style.

Allowed: professional, academic, blog, casual, creative, scientific, technical

languageoptional
string | null

Target language (e.g. English, Spanish, Chinese (Mandarin)). Auto-detected if omitted.

200Text humanized successfully

Response Body — application/json

id
string

Unique identifier for this humanization request.

created
integer

Unix timestamp (milliseconds) when the request was received.

results
string[]

Humanized text variations, sorted by score (best first).

scores
(number | null)[] | null

Human-likeness score for each result (0–1, higher = more human).

Premium plans only. `null` on Standard plans.

input_words
integer

Number of words billed for this request.

words_remaining
object

Your remaining word balance after this request.

Fields: included (integer), topup (integer), total (integer)

Error Responses

401

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>" }
402

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
  }
}
422

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" }
429

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." }
503

Service at capacity.

{ "error": "Service is at capacity. Please retry shortly." }
500

Processing failure.

{ "error": "Processing failed" }

GET/v1/usage

https://api.writehuman.ai/v1/usage

Retrieve your current word usage, plan tier, and API version. Read-only — it never deducts words. Remaining balance = included_words − words_used_this_cycle + topup_balance.
200Usage returned

Response Body — application/json

included_words
integer

Words included in your plan each billing cycle.

words_used_this_cycle
integer

Words used so far in the current billing cycle.

topup_balance
integer

Remaining top-up words. Top-up packs never expire.

tier
string

Your plan: api_standard or api_premium.

version
string

Current API version.

{
  "included_words": 400000,
  "words_used_this_cycle": 18311,
  "topup_balance": 125000,
  "tier": "api_premium",
  "version": "v1.0"
}

Error Responses

401

Missing or invalid API key.

Invalid API key

{ "error": "Invalid API key" }

Missing Authorization header

{ "error": "Missing or invalid Authorization header" }
402

No active subscription.

{ "error": "No active subscription" }
429

Too many failed authentication attempts.

{ "error": "Too many failed authentication attempts" }

POST/v1/detect

https://api.writehuman.ai/v1/detect

Score text for AI authorship using WriteHuman's detection model. Billed per input word (the original text), the same way as /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

textrequired
string

The text to score for AI authorship.

>= 10 characters, <= 100,000 characters

languageoptional
string | null

Language of the text. Auto-detected if omitted; non-English text is translated to English before scoring.

include_sentencesoptional
boolean

Return a per-sentence AI-probability breakdown.

Default: false

200Text scored successfully

Response Body — application/json

scanId
string

Unique identifier for this detection scan.

version
string

Detector model version.

ai_probability
number

Probability the text is AI-generated (0–1, where 1 = AI).

Opposite orientation from the /v1/humanize scores field, where higher = more human.

predicted_class
string

Overall label: ai, human, or mixed.

class_probabilities
object

Probability for each class.

Fields: ai, human, mixed

request_meta
object

Length of the scored text.

doc_length: { chars, tokens }

language
string

Detected (or supplied) language of the input.

sentences
array

Per-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

401

Missing or invalid API key.

Invalid API key

{ "error": "Invalid API key" }

Missing Authorization header

{ "error": "Missing or invalid Authorization header" }
402

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
  }
}
422

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." }
429

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" }
503

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.

EnglishEnglish (British)Chinese (Mandarin)Chinese (Taiwanese)FrenchSpanishVietnamesePortugueseJapaneseUkrainianSwedishGermanRussianItalianArabicHindiBengaliKoreanTurkishDutchPolishThaiIndonesianMalayPersianHebrewGreekCzechDanishFinnishNorwegianRomanianHungarianSlovakBulgarianCroatianSerbianSlovenianLithuanianLatvianEstonianUrduSwahiliTagalogAfrikaans

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.