Naturalization for AI-generated content

Turn AI drafts into text that reads human — or a stronger detection-aware paraphrase. Web try-it, REST API, and MCP (Cursor / Claude) share one contract. Honest about the trade-off — not a detector bypass guarantee.

Two Modes

Natural: rewrites to read like a person wrote it.
Undetectable: stronger detection-aware paraphrase when voice can change — not a bypass guarantee.

Fact-Safe

Numbers, names, entities, and claims are preserved by hard gates. Meaning verified via NLI entailment.

REST API

One endpoint. POST /v1/naturalize with text + preset. Get the rewrite + metadata in seconds. Full OpenAPI at /docs.

MCP

Use ThinkingNative inside Cursor or Claude Desktop — naturalize, presets, same API key. Local stdio or hosted https://api.thinkingnative.com/mcp (Bearer). See MCP setup.

Honest Labels

We tell you exactly what each mode does — and what it costs. No "makes it undetectable AND natural" false promises.

Get started in <5 minutes

# Python SDK — keep the token in the environment, not in source # pip install -e ./thinkingnative-client import os from thinkingnative_client import ThinkingNative tn = ThinkingNative(api_key=os.environ["THINKINGNATIVE_API_KEY"]) out = tn.naturalize( "Moreover, our team leveraged cutting-edge technology.", preset="naturalness", # or "undetectable" ) print(out.text)
# Long undetectable calls (Cloudflare-safe) out = tn.naturalize_wait(text, preset="undetectable") # or: POST /v1/naturalize/async → poll GET /v1/naturalize/jobs/{jobId}
# curl curl -sS https://api.thinkingnative.com/v1/naturalize \ -H "Authorization: Bearer $THINKINGNATIVE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"text":"Moreover, our team leveraged cutting-edge technology.","preset":"naturalness"}'
// Node (or any server) — not public browser JS const res = await fetch("https://api.thinkingnative.com/v1/naturalize", { method: "POST", headers: { "Authorization": `Bearer ${process.env.THINKINGNATIVE_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ text: "Moreover, our team leveraged cutting-edge technology.", preset: "naturalness", // or "undetectable" }), }); const data = await res.json(); console.log(data.text);
# MCP — stdio or hosted https://api.thinkingnative.com/mcp # Hosted: Authorization Bearer tn_… (same as REST) # Stdio: pip install -e ".[mcp]" → python -m thinkingnative.mcp_server # Tools: naturalize · list_presets · version # Docs: https://thinkingnative.com/mcp-docs

API tokens

Create a tn_… token on Account. Call with Authorization: Bearer tn_…. Tokens debit your word balance. Copy the secret once — we store only a hash.

Where you call fromWhere the token lives
Your server, n8n, CI, a Worker you run Environment variable or secrets manager on that host
Cursor / Claude MCP on your machine Local MCP config (do not commit the key to a public repo)
Mobile app or public website JavaScript Not in the client. Your backend holds tn_… and the app talks to you

A leaked token spends your words until you revoke it. That is the same as an OpenAI or Stripe secret — we hash, name, and revoke; we cannot make a secret in a binary private.

If you have no backend and need us to hold the key at the edge, that is a quoted add-on (not self-serve). It keeps the secret out of the binary; a stolen proxy URL can still spend your balance. Contact us if you need it.

OpenAPI (endpoints and schemas): /docs.

How it works

1

Send your AI draft

POST your text with a preset (natural or undetectable). Include preserve terms if needed.

2

ThinkingNative processes it

The engine rewrites for your chosen goal — natural voice or detection-aware paraphrase — while preserving facts and meaning.

3

Get the rewrite

Receive the naturalized text + metadata (engine, stats, warnings). Use it directly in your pipeline.

Ready to build?

Create an API token on your Account, then call /v1/naturalize with Authorization: Bearer ….

Create a token on Account → See pricing →