Humanizations
Humanizations are the core resource of the ToHuman API. Each humanization takes AI-generated text and transforms it into natural, human-sounding writing that bypasses AI detectors.
The humanization model
The humanization model contains all the information about a humanization job, including the input content, output result, status, and processing metadata.
Properties
id
string
Unique identifier for the humanization.
status
string
One of pending, processing, completed, or failed.
intensity
string
Humanization intensity. One of minimal, subtle, medium (default), or heavy.
output_content
string or null
The humanized text. null until the job completes.
processing_time
float or null
Time taken to process in seconds.
error_message
string or null
Error details if the job failed.
created_at
timestamp
When the humanization was created.
completed_at
timestamp or null
When the humanization completed.
scores
object (only when available)
Quality metrics for the humanized text, measured at generation time. Omitted on humanizations processed before scoring existed. See Quality scores.
Quality scores
For every request, the model generates several candidate rewrites, scores each against an AI detector, and returns the strongest one. The scores object tells you how that winning text measures up:
detectability
float, 0–1
How likely the output is to be flagged as AI-written, as scored by a state-of-the-art detector. Lower is better — 0.05 reads as human, values above 0.5 may be flagged. Averaged across paragraphs.
change_ratio
float, 0–1
How much of your text was reworked, as a normalized edit distance from the input. 0.40 means roughly 40% of the characters changed. Higher intensities produce higher ratios.
quality_fallbacks
integer
Number of paragraphs where no candidate met our quality bar, so the best available one was used instead. Usually 0. If it's higher, re-running those sections — or raising the intensity — typically resolves it.
Create a humanization (sync) POST /v1/humanizations/sync
Create a humanization and receive the result immediately. Best for short content (under 2,000 words) when you need real-time results.
Required attributes
content
string
The AI-generated text to humanize. Must be under 2,000 words — use the async endpoint for longer content.
Optional attributes
title
string
A title for the document (for your reference).
intensity
string
Humanization intensity. Defaults to medium. Options: minimal, subtle, medium, heavy.
curl -X POST https://tohuman.io/api/v1/humanizations/sync \ -H "Authorization: Bearer $TOHUMAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "content": "The utilization of artificial intelligence...", "intensity": "medium" }'
{
"id": 42,
"document_id": 15,
"status": "completed",
"output_content": "Using AI in everyday work...",
"processing_time": 5.42,
"scores": {
"detectability": 0.06,
"change_ratio": 0.41,
"quality_fallbacks": 0
}
}
Create a humanization (async) POST /v1/humanizations
Create a humanization job that processes in the background. Use this for longer documents or when you don't need immediate results. Optionally provide a webhook_url to be notified when processing completes.
Additional attributes
webhook_url
string (optional)
URL to receive a POST request when the humanization completes or fails.
curl -X POST https://tohuman.io/api/v1/humanizations \ -H "Authorization: Bearer $TOHUMAN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "content": "Your long-form AI-generated content...", "intensity": "heavy", "webhook_url": "https://yourapp.com/webhooks/tohuman" }'
{
"id": 43,
"document_id": 16,
"status": "pending",
"message": "Humanization enqueued"
}
Retrieve a humanization GET /v1/humanizations/:id
Retrieve the current state of a humanization by its ID. Use this to poll for the result of an async humanization job.
curl https://tohuman.io/api/v1/humanizations/43 \ -H "Authorization: Bearer $TOHUMAN_API_KEY"
{
"id": 43,
"document_id": 16,
"status": "completed",
"intensity": "heavy",
"output_content": "The fully humanized content...",
"processing_time": 7.87,
"error_message": null,
"created_at": "2026-03-21T12:00:00Z",
"completed_at": "2026-03-21T12:00:08Z",
"scores": {
"detectability": 0.04,
"change_ratio": 0.47,
"quality_fallbacks": 0
}
}