API reference

The same engine the site runs on, over REST. Submit a passage, poll for the result, pay by the word. Detection is free and does not touch your balance.

Authentication

Every request carries a bearer key. Create one on the API tab of your account. The key is shown once at creation and stored only as a hash, so it cannot be recovered afterwards, by you or by us. You can hold five active keys, which is what makes rotation possible without downtime.

Authorization: Bearer hm_live_...

Why the API is asynchronous

A rewrite takes roughly 30 to 240 seconds depending on length, because the engine makes six passes over the text rather than one. That does not fit a synchronous HTTP contract: Cloudflare closes origin connections at about 100 seconds, Zapier actions must return inside 30, and Make defaults to 40. So submission returns a job id immediately and the result is collected by polling. Poll every 5 seconds; jobs are retained long enough that a slow consumer does not lose a result.

Submit a job

POST /api/v1/humanize

Send at least 20 words and at most 3,000 in one request. mode is deep (six passes, the default) or fast (three passes, billed at half rate). Submitting does not spend credits.

curl -X POST https://humanizemy.ai/api/v1/humanize \
  -H "Authorization: Bearer hm_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Paste at least twenty words of the text you want rewritten.",
    "mode": "deep"
  }'

202 Accepted

{
  "id": "9f2c1e04-...",
  "status": "queued",
  "mode": "deep",
  "words_in": 812,
  "words_to_bill": 1000,
  "min_billable_words": 500,
  "poll_url": "/api/v1/jobs/9f2c1e04-..."
}

Collect the result

GET /api/v1/jobs/{id}

status is processing, completed or failed. Credits are spent on the first poll that sees a success, and that debit is idempotent, so polling twice after completion never charges twice. A failed job, or one rejected by the output gates, costs nothing.

curl https://humanizemy.ai/api/v1/jobs/9f2c1e04-... \
  -H "Authorization: Bearer hm_live_YOUR_KEY"
{
  "id": "9f2c1e04-...",
  "status": "completed",
  "mode": "deep",
  "output": "The rewritten passage.",
  "words_in": 812,
  "words_out": 1043,
  "words_billed": 1000,
  "min_billable_words": 500,
  "words_remaining": 198000,
  "quality": "verified"
}

quality reports verified when every chunk cleared the engine’s internal checks on meaning, number preservation and length, and best_effort when at least one did not. Both return a rewrite; the field tells you which ones deserve a second look.

Detect AI text

POST /api/v1/detect

Free, and it never draws down your balance. The model abstains under 60 words rather than guess on a sample too small to judge, so short passages return a 400 instead of a confident number.

curl -X POST https://humanizemy.ai/api/v1/detect \
  -H "Authorization: Bearer hm_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "text": "Sixty words or more, please." }'
{
  "probability": 0.07,
  "verdict": "Human",
  "verdict_code": "HUMAN-LIKELY",
  "words": 214,
  "billed": false
}

Billing

One credit is one word. There is no credit-to-word conversion to decode, because a hidden multiplier is just a price you cannot compare.

  • Requests bill in blocks of 500 words, rounded up. A 200-word request bills 500; an 812-word request bills 1,000. Each request carries a fixed amount of GPU time before the first word is processed, so a 250-word request genuinely costs several times more per word than a 3,000-word one. The floor prices that honestly instead of hiding it in the headline rate.
  • You are billed on the words you send. A rewrite usually comes back longer than the passage that went in, and that expansion is ours to absorb: the number quoted as words_to_bill when you submit is the number you are charged, whatever length the result turns out to be.
  • Fast mode bills at half rate. Three passes instead of six.
  • You pay for successes. Failures, timeouts and gate rejections are free.
  • The allowance resets, it does not roll over. Unused words at the end of a billing period are gone, which is why the price per word is what it is. Pick the tier you actually use.

Plans

One catalogue, billed monthly. The allowance resets at each billing date, so it is use-it-or-lose-it. If a month runs long, move up a tier: the larger allowance applies straight away and the difference is settled on your next invoice.

PlanWords / monthPricePer 1,000Buy
200k words200,000$59/mo$0.295
400k words400,000$99/mo$0.248
600k words600,000$135/mo$0.225
800k words800,000$165/mo$0.206
1,000k words1,000,000$189/mo$0.189

Above a million words a month the rate is set by contract and reaches $0.138 per 1,000. For that, or anything the table does not cover, write to hello@humanizemy.ai.

Errors

Errors return a JSON body with error.type and error.message. Job-level failures arrive as a 200 with status: "failed", because the request succeeded even though the job did not.

StatustypeWhen
400invalid_requestMalformed body, under 20 words, or over the 3,000-word per-request ceiling.
401authentication_errorMissing, unknown or revoked key.
402insufficient_creditsBalance does not cover the billable words. The body carries words_required and words_remaining.
503service_unavailableThe engine is not accepting jobs. Retry with backoff.

What we do not do

  • We do not store your text after a job completes.
  • We do not train on text sent through the API.
  • We do not promise a latency SLA. The engine runs on scale-to-zero GPUs, so the first request after a quiet period is slower than the rest, and saying otherwise would be a number we could not keep.
  • We do not permit reselling the API as a competing humanizer service. Building it into your own product is exactly what it is for; write to us and we will sort out terms.

Questions, higher volume, or something the reference does not cover: hello@humanizemy.ai.