Build with HumanTone

HumanTone API.

Humanize text, run AI detection, and check your account programmatically. Same credits you already use in the app.

Get Your API Key Available on all paid plans. Uses your existing credit balance.

ENDPOINTS

QUICK START

From zero to humanized text in under a minute.

  1. 1

    Go to Settings → API Keys in your dashboard and generate a key.

  2. 2

    Copy the example below and replace ht_your_api_key with your key.

  3. 3

    Run it.

bash
curl -X POST https://api.humantone.io/v1/humanize \
  -H "Authorization: Bearer ht_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Your input text goes here.",
    "humanization_level": "standard"
  }'

Response:

json
{
  "success": true,
  "request_id": "550e8400-e29b-41d4-a716-446655440000",
  "content": "Your output text.",
  "output_format": "html",
  "credits_used": 3
}

AUTH

Authentication.

Base URL

https://api.humantone.io

All requests require a Bearer token in the Authorization header:

Authorization: Bearer ht_your_api_key

Keys use the ht_ prefix followed by 64 hex characters. Generate and manage keys at app.humantone.io/settings/api.

Available on all paid plans (Basic, Standard, Pro). Free trial accounts do not have API access.
Your API calls use the same credit balance as the app. No separate API pricing.

Versioning.

The API is versioned. All current endpoints use /v1/. This version is stable.

If breaking changes are introduced in the future, they will ship under a new version (e.g. /v2/). Existing versions will continue to work.

HUMANIZER

POST /v1/humanize

Rewrites AI text to sound human. Same engine as the app.

Request

bash
curl -X POST https://api.humantone.io/v1/humanize \
  -H "Authorization: Bearer ht_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Your input text goes here...",
    "humanization_level": "standard",
    "output_format": "html",
    "custom_instructions": "Your custom instructions here."
  }'

Parameters

Parameter Type Required Description
contentstringYesThe text to humanize. Minimum 30 words. Maximum depends on your plan.
humanization_levelstringNostandard (default), advanced, or extreme. Advanced and extreme support English only.
output_formatstringNohtml (default), text, or markdown. Controls the format of the returned content field.
custom_instructionsstringNoInstructions for the rewrite: tone, terms to keep, audience, purpose. Max 1,000 characters.

Note: The default output format is html. If you need plain text without markup, set output_format to text explicitly.

Word limits per request

Plan Max words
Basic750
Standard1,000
Pro1,500

Response

json
{
  "success": true,
  "request_id": "550e8400-e29b-41d4-a716-446655440000",
  "content": "Your output text...",
  "output_format": "html",
  "credits_used": 42
}
Field Type Description
request_idstringUnique ID for this request. Use it for logging or support inquiries.
contentstringThe humanized text in the requested format.
output_formatstringThe format of the returned content: html, text, or markdown.
credits_usednumberCredits deducted from your balance for this request.

Response time: The request is synchronous. Longer texts take longer to process. A 1,500 word input at extreme level may take 30+ seconds. Plan your client timeouts accordingly.

Errors

Status Error Cause
400Invalid JSON bodyRequest body is not valid JSON
400content is requiredMissing, empty, or non-string content field
400Text must be at least 30 wordsInput too short
400Text exceeds the maximum of N words...Input exceeds plan word limit
400Not enough creditsCredit balance is zero
400humanization_level must be one of...Invalid level value
400output_format must be one of...Invalid format value
400custom_instructions must be 1000...Instructions too long
400...advanced and extreme...English onlyNon-English text with advanced or extreme level
400...did not pass the safety check...Content flagged by safety filter
404Plan not foundAccount plan error. Contact support.
500Internal server errorProcessing failed. Retry after a few seconds.

Code examples

curl -X POST https://api.humantone.io/v1/humanize \
  -H "Authorization: Bearer ht_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Your input text goes here...",
    "humanization_level": "standard",
    "output_format": "text",
    "custom_instructions": "Your custom instructions here."
  }'

AI DETECTOR

POST /v1/detect

Returns an AI likelihood score for any text. Same detector as the app.

Detection does not consume credits. It is limited to 30 requests per day, shared between the app and API. The limit resets at midnight UTC.

Request

bash
curl -X POST https://api.humantone.io/v1/detect \
  -H "Authorization: Bearer ht_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Your input text goes here..."
  }'

Parameters

Parameter Type Required Description
contentstringYesThe text to analyze.

Response

json
{
  "success": true,
  "ai_score": 87
}
Field Type Description
ai_scorenumberScore from 0 to 100. Higher means more AI patterns detected.

When the daily limit is reached

HTTP 200, success: false:

{
  "success": false,
  "error": "Daily usage limit reached. You have used 30 of 30 allowed detections today.",
  "time_to_next_renew": 3600
}
Field Type Description
time_to_next_renewnumberSeconds until the limit resets (midnight UTC).

When detection fails

HTTP 200, success: false:

{
  "success": false
}

The detection service returned no result. Retry the request.

Errors

Status Error Cause
400Invalid JSON bodyRequest body is not valid JSON
400content is requiredMissing, empty, or non-string content field

Code examples

curl -X POST https://api.humantone.io/v1/detect \
  -H "Authorization: Bearer ht_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Your input text goes here..."
  }'

ACCOUNT

GET /v1/account

Returns your plan, credit balance, and subscription status. Useful for checking remaining credits before sending a humanize request.

Request

bash
curl https://api.humantone.io/v1/account \
  -H "Authorization: Bearer ht_your_api_key"

Response

json
{
  "plan": {
    "id": "pro_monthly",
    "name": "Pro Monthly",
    "max_words": 1500,
    "monthly_credits": 1000,
    "api_access": true
  },
  "credits": {
    "trial": 0,
    "subscription": 820,
    "extra": 150,
    "total": 970
  },
  "subscription": {
    "active": true,
    "expires_at": "2026-05-08T00:00:00.000Z"
  }
}
Field Description
plan.max_wordsMax words per humanize request on your plan
plan.monthly_creditsCredits included per billing cycle
credits.totalAll available credits (trial + subscription + extra)
credits.subscriptionRemaining monthly plan credits
credits.extraRemaining purchased extra credits
subscription.expires_atSubscription expiry date (ISO 8601)

Errors

Status Error Cause
404Plan not foundAccount plan error. Contact support.

Code examples

curl https://api.humantone.io/v1/account \
  -H "Authorization: Bearer ht_your_api_key"

AUTH ERRORS

Authentication errors.

These errors can occur on any endpoint.

Status Error Cause
401Missing or invalid Authorization headerNo header provided, or it does not start with Bearer
401Invalid API key formatKey does not match expected format (ht_ prefix + 64 hex characters)
401Invalid API keyKey format is correct but does not exist
401This API key has been revokedKey was deleted in dashboard
401User not foundAccount associated with this key no longer exists
403...plan does not include API access...Free plan or trial. Paid plan required.
404Not FoundEndpoint does not exist
405Method not allowedWrong HTTP method (e.g. GET instead of POST)

All errors return JSON:

{
  "error": "Human-readable error message"
}

PRICING

Same credits. No extra cost.

API calls use your existing HumanTone credits. No separate API pricing. No per-request fees. 1 credit = 100 words. Same as the app.

What you need Where to get it
A paid plan (Basic, Standard, or Pro)humantone.io/pricing
An API keyapp.humantone.io/settings/api
More creditsBuy Extra Credits in your dashboard. No plan change needed.
Detection is free with your plan. 30 requests per day. No credits consumed.
Rate limits: There are no strict per-second rate limits at this time. If you plan to send large batches, space them out or contact [email protected] to discuss your use case.

Start building.

Get your API key and send your first request in under a minute.