Quickstart

This guide will get you up and running with the ToHuman API in under 5 minutes. You'll learn how to get your API key and make your first humanization request.

Get your API key

Before making your first API call, you need an API token. Sign in to your ToHuman dashboard and create a new API token. Your token will start with token_ and should be kept secret.

Environment variable
export TOHUMAN_API_KEY="token_your_api_key_here"

Authentication

Every ToHuman API endpoint requires that token as a bearer credential in the Authorization header — there is no other auth scheme, and no query-parameter fallback. Requests without it return 401 Unauthorized.

Authorization header
Authorization: Bearer token_your_api_key

You can create, rotate, and revoke tokens at any time from the API tokens page. Reset a token immediately if you suspect it has been compromised — revoking it invalidates every request made with it.

Never expose your API token in client-side code, public repositories, or browser requests. Always make API calls from your server.

Make your first request

The simplest way to use ToHuman is the synchronous endpoint. Send your AI-generated text and get the humanized result back immediately.

POST /api/v1/humanizations/sync
curl -X POST https://tohuman.io/api/v1/humanizations/sync \
  -H "Authorization: Bearer $TOHUMAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Your AI-generated content here...",
    "intensity": "medium"
  }'
Response
{
  "id": 42,
  "document_id": 15,
  "status": "completed",
  "output_content": "Your humanized content here...",
  "processing_time": 5.42,
  "estimated_seconds": 5,
  "scores": {
    "detectability": 0.06,
    "change_ratio": 0.41,
    "quality_fallbacks": 0
  }
}

Here's the same request in Python:

Python
import requests

response = requests.post(
    "https://tohuman.io/api/v1/humanizations/sync",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "content": "Your AI-generated content here...",
        "intensity": "medium"
    }
)

print(response.json())

Sync vs async

ToHuman offers two modes for humanizing text:

Sync Async
Endpoint /humanizations/sync /humanizations
Max length 2,000 words Unlimited
Response Immediate result Returns job ID, poll or use webhook
Webhook Not supported Optional webhook_url
Best for Short content, real-time UIs Long documents, batch processing

Install in your editor / agent

The same API also runs as a hosted MCP server at https://tohuman.io/mcp — one humanize tool over streamable HTTP, nothing to run locally. Your token travels in the same Authorization header. Replace YOUR_KEY below with your token, or sign in: the token card on your dashboard carries all three with your key already filled in.

Claude Code
claude mcp add --transport http tohuman https://tohuman.io/mcp --header "Authorization: Bearer YOUR_KEY"
Cursor — install link
# cursor://anysphere.cursor-deeplink/mcp/install?name=tohuman&config=<base64 of this JSON>
{
  "url": "https://tohuman.io/mcp",
  "headers": {
    "Authorization": "Bearer YOUR_KEY"
  }
}
VS Code — install link
# vscode:mcp/install?<URL-encoded JSON>
{
  "name": "tohuman",
  "type": "http",
  "url": "https://tohuman.io/mcp",
  "headers": {
    "Authorization": "Bearer YOUR_KEY"
  }
}

The Cursor JSON is also the mcpServers.tohuman entry in Cursor's mcp.json. Windsurf, Claude Desktop and Codex take the same URL and header in their own config format; clients that only launch local stdio servers bridge through the open-source mcp-remote adapter. In ChatGPT it is a developer-mode connector — see the ChatGPT, Claude and Cursor integrations hub; per-client config files are in the MCP setup tutorial. Same key, same account: calls made through MCP show up next to your API calls.

Next steps

Now that you've made your first request, explore the full API: