Rewrite text
The same information can sound formal or casual, blunt or diplomatic, technical or plain, and often you need it to sound different than the version sitting in front of you. The text rewriter api takes what you already wrote and produces a new version with a different voice, same underlying message.
Run it online
Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.
Why rewriting is its own task
Rewriting isn't shortening, expanding or translating; it's changing how something is said without changing what it says, and that's a distinct skill people pay editors and copywriters for. text.rewrite is built for teams that have a working draft and need a second version, whether that's because the tone was off, the phrasing was too close to a source, or a template requires a fresh angle on the same content. It's the endpoint you reach for when the facts are settled and only the delivery needs work.
What happens after you submit
POST /text/rewrite queues your text and immediately hands back a task_id, since the endpoint runs asynchronously rather than holding your connection open. The engine parses the sentence structure and word choices of your input, then generates an alternate version that carries the same claims and facts through different phrasing, sentence order and word selection, treating your original as a source of meaning to preserve rather than a template to lightly edit.
A skill older than modern editing
Rhetoric teachers were already drilling students on paraphrase and imitation exercises in classical antiquity, training writers to say a fixed idea in several different ways as a way of building range. This endpoint is a modern, automated version of that same exercise, run on demand instead of in a classroom.
Where the rewritten text lands
You'll be notified through a signed webhook the moment the rewrite finishes, or you can fetch it from a signed link valid for 24 hours if that fits your integration better. Either delivery method returns plain text, ready to publish or feed into the next step of your pipeline.
Using it inside a pipeline
Because each request is tracked by its own task_id, text.rewrite scales cleanly across batch jobs: regenerate a set of email variants for A/B testing, or rewrite a single article the moment an editor flags it as too close in tone to a competitor's. It combines well with paraphrase or simplify endpoints when a piece of content needs several distinct versions produced from one source, letting a single draft branch into a handful of finished variants without extra manual labor.
What you can do with it
A/B testing email copy
Generate a differently worded variant of a marketing email to test against the original without writing it from scratch.
Tone shift for a new audience
Rewrite a technical product description into a version aimed at a less specialized audience while keeping every fact intact.
Freshening syndicated content
Produce an alternate phrasing of a press release or bulletin before redistributing it across multiple regional pages.
Editorial second draft
Give writers a rewritten alternative to compare against their own draft when a tone note comes back from an editor.
FAQ
How is the text rewriter api different from paraphrasing?
Rewriting focuses on tone, structure and phrasing changes at a broader level, while paraphrasing centers on restating the same sentences in different words; both preserve meaning.
Is there a free trial?
There's no free tier — free tiers get abused and slow everyone down. Access runs on a prepaid ForHosting KIT balance: top up from $10.00 (it never expires) and each request is charged at its published price, so a call with no balance returns HTTP 402. No subscription, no tokens, no invented credits, and a failed task is never charged.
What's the price?
$0.003 per request plus $0.0135 per 1,000 words processed, billed only when a task completes successfully.
Do failed requests cost anything?
No. Failed tasks retry automatically up to three times and are never charged; a persistent failure returns a clear error instead.
How do I get the rewritten text?
Via a signed webhook when the task completes, or a signed link that stays valid for 24 hours.
Can I rewrite the same text multiple ways?
Yes, submit multiple POST /text/rewrite calls against the same source text to generate distinct variants for testing.
Will the rewritten version change the facts?
No, the rewrite preserves the original claims and information; only the wording, structure and tone change.
Is submitted text used to train models?
No, text is kept only for the retention period needed to deliver your result, then deleted, and never used for training.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/text/rewrite \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/text/rewrite", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/rewrite",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/rewrite", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/rewrite", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "…"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.rewrite",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_tokens | 20000 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
422 | task_failed | The task failed after 3 retries. You are never charged for it. |