HumanizeIt API
Make any text undetectable. Programmatically.
Quick Start
Get your API key
Create a key in the dashboard. It's shown only once — save it securely.
Make a request
Send text to analyze or humanize via a simple POST request.
Get results back
Receive human-sounding text or an AI detection score as JSON.
curl -X POST https://humanizeit.app/api/v1/analyze \
-H "Authorization: Bearer sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"text": "The mitochondria is the powerhouse of the cell."}'{
"score": 72,
"confidenceBand": "likely-ai",
"patterns": [...],
"stats": { "avgSentenceLength": 8, "vocabularyRichness": 0.85, ... },
"wordCount": 8
}Authentication
All API requests require a Bearer token in the Authorization header. Keys are generated in your dashboard and shown only once at creation.
Authorization: Bearer sk_live_aBcDeFgHiJkLmNoPqRsT...
Security: Never expose API keys in client-side code, public repositories, or browser requests. Always use keys server-side.
Endpoints
/api/v1/analyzeAnalyze text for AI-generated patterns and return a detection score.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| text | string | Yes | The text to analyze (10–10,000 chars) |
Request
curl -X POST https://humanizeit.app/api/v1/analyze \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"text": "Your text to analyze..."}'JavaScript
const res = await fetch("https://humanizeit.app/api/v1/analyze", {
method: "POST",
headers: {
"Authorization": "Bearer sk_live_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ text: "Your text to analyze..." }),
});
const data = await res.json();Response
{
"score": 72,
"confidenceBand": "likely-ai",
"patterns": [
{ "name": "uniformSentenceLength", "score": 0.8, "weight": 1.5 },
{ "name": "repetitiveTransitions", "score": 0.6, "weight": 1.2 }
],
"stats": {
"avgSentenceLength": 18.5,
"vocabularyRichness": 0.72,
"sentenceCount": 12
},
"wordCount": 222
}Response Schema
| Field | Type | Description |
|---|---|---|
| score | number | AI detection score 0–100 (higher = more likely AI) |
| confidenceBand | string | human / mixed / likely-ai / ai-generated |
| patterns | array | Detected AI patterns with scores and weights |
| stats | object | Text statistics (sentence length, vocabulary, etc.) |
| wordCount | number | Word count of the input text |
/api/v1/humanizeRewrite text to sound more natural and human-written.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| text | string | Yes | The text to humanize (10–10,000 chars) |
| tone | string | No | Tone of the output (default: standard) |
| intensity | string | No | How aggressively to rewrite (default: medium) |
| passes | number | No | Number of humanization passes, 1–3 (default: 1). Higher passes auto-escalate intensity to reduce AI score below 45%. |
Tone Options
| Value | Description |
|---|---|
| standard | Natural, balanced rewriting |
| formal | Professional, polished tone |
| casual | Conversational, relaxed style |
| academic | Scholarly, structured language |
| storytelling | Narrative, engaging voice |
| professional | Business-appropriate communication |
Intensity Options
| Value | Description |
|---|---|
| light | Minimal changes — preserves most of the original structure |
| medium | Balanced rewriting — natural-sounding with moderate changes |
| heavy | Aggressive rewriting — maximizes undetectability |
Request
curl -X POST https://humanizeit.app/api/v1/humanize \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"text": "Your text...", "tone": "casual", "intensity": "medium", "passes": 2}'Response
{
"humanizedText": "So here's the thing about mitochondria, they're basically the engine room of every cell...",
"originalScore": 78,
"humanizedScore": 18,
"scoreDelta": 60,
"confidenceBand": "low",
"tokensUsed": 312,
"passes_run": 2,
"score_history": [78, 51, 18]
}/api/v1/usageCheck your current API usage and quota.
curl https://humanizeit.app/api/v1/usage \ -H "Authorization: Bearer sk_live_..."
Response
{
"plan": "PRO",
"wordsUsed": 12450,
"wordsLimit": 50000,
"apiRequestsUsed": 247,
"apiRequestsLimit": 1000,
"monthlyResetAt": "2026-04-01T00:00:00.000Z"
}Rate Limits
API requests are rate-limited per billing cycle. Every response includes rate limit headers.
| Plan | Requests/month | Keys allowed | Max text length |
|---|---|---|---|
| FREE | 0 (no API access) | 0 | 5,000 chars |
| PRO | 1,000 | 3 | 10,000 chars |
| TEAM | 10,000 | 10 | 10,000 chars |
Rate Limit Headers
| Header | Description |
|---|---|
| X-RateLimit-Limit | Total requests allowed this period |
| X-RateLimit-Remaining | Requests remaining |
| X-RateLimit-Reset | Unix timestamp of next reset |
| Retry-After | Seconds until you can retry (on 429 only) |
429 Response
{
"error": {
"code": "QUOTA_EXCEEDED",
"message": "Monthly API request quota exceeded."
}
}Error Codes
| Code | HTTP | Description | Solution |
|---|---|---|---|
| UNAUTHORIZED | 401 | Invalid or missing API key | Check your Authorization header |
| TEXT_TOO_SHORT | 400 | Text under 10 characters | Provide longer text |
| TEXT_TOO_LONG | 400 | Text over 10,000 characters | Shorten your text |
| QUOTA_EXCEEDED | 429 | Monthly quota reached | Wait for reset or upgrade plan |
| INVALID_JSON | 400 | Request body is not valid JSON | Check your JSON formatting |
| INTERNAL_ERROR | 500 | Server-side error | Retry or contact support |
Playground
Test the API directly from your browser. Enter your API key and try a request.
Not stored — only used in-memory for this request
curl -X POST /api/v1/analyze \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Your text here..."}'Changelog
Initial release. Two endpoints: analyze and humanize. Rate limiting, hash-based API key authentication, and interactive playground.