A pre-publish step in your CMS
Add one step between “save draft” and “publish”. Drafts come back in the author's voice with every fact checked; anything that fails goes to an editor, not the site.
Rewrite + Detect API
Send a draft and get a job ID back at once. When the job finishes, your webhook receives copy that sounds more like your writer, with every number, name and link checked against the source and a before-and-after detection score attached.
job_01JD4QC7 · rewrite
sendingRequest
Response
Job queued
t+0.1 sjob_01JD4QC7 · est. 35 s · 22 words in
Rewriting in Founder voice
t+34.2 sFact checks · strict
3 / 3Detection, before → after
before / afterWebhook delivered
200 OKPOST example.com/hooks/rw · job.succeeded · signed v1
Example job on sample text
The problem
Readers, editors and platforms have learned the tells: the stock opener, the hype words, the tidy “it's not X, it's Y” close. Publish it at volume and every page starts to sound like every other page, including your competitors'.
Raw AI draft
ai_likelihood 0.93In today's fast-paced digital landscape, onboarding matters more than ever. That's why we're thrilled to unveil our revolutionary checklist feature, designed to streamline your workflow. New accounts that stall after 14 days now get a guided nudge. In the beta, activation rose 18%. Ultimately, it's not just about checklists, it's about empowering your team to thrive.
IntactVoice · voice-matched
ai_likelihood 0.16Most new accounts that churn do it quietly. So we built a nudge: if an account stalls after 14 days, the checklist shows the one step they skipped. In the beta, activation went up 18%. That's the whole feature, and it's live today.
The tells are structural, not just word choice.
Ends by restating the thesis
Has a summary section
Gives the reader no way to act
Share of B2B blog posts showing each pattern. Sitefire / SlopShape v3, arXiv 2609.15369, Sept 2026.
Fidelity
“14 days” stays “14 days”.
Every number, unit, name and link is pulled from the source and checked against the output. In strict mode a changed fact fails the job with a 422: no text ships and nothing is billed.
Source
14 days
What your draft says
A humanizer we tested
14 weeks
Fluent. Also wrong.
IntactVoice · strict
14 days
fidelity.status: pass
A humanizer we tested changed “14 days” to “14 weeks”. Our lab test, Oct 2026.
Traffic, reach and trust
Search engines, feeds and expert readers are all pushing the same way: toward writing that is specific, accurate and sounds like a person. The API moves your pipeline in that direction and shows its work on every job.
Search
Search says it rewards people-first pages.
Google says its systems aim to reward helpful, reliable content made for people, and its spam policies target content produced at scale mainly to rank, however it was made.
Google Search Central: “Creating helpful, reliable, people-first content” and Spam policies (scaled content abuse).
Social feeds
~0%
fewer views for posts members flag with LinkedIn's “seems like AI slop” report, according to LinkedIn.
LinkedIn, via TechCrunch. “Seems like AI slop” report launched 30 Jul 2026.
Expert readers
0.0%
of AI-written articles were caught by readers who use AI heavily, with only 4.0% false positives. Everyone else was at chance.
92.7%
Heavy AI users
56.7%
Everyone else
Russell, Karpinska & Iyyer, ACL 2025.
What every job gives you
What we won't promise
What you can build
Two endpoints, a job model and webhooks cover most publishing workflows. These are the ones we see most.
A pre-publish step in your CMS
Add one step between “save draft” and “publish”. Drafts come back in the author's voice with every fact checked; anything that fails goes to an editor, not the site.
Auto-blog pipelines
Generators make volume. The API makes each post read like your publication, scores it, and stops any post whose numbers moved before it reaches the schedule.
Agency client workflows
One voice profile and one API key per client. Each brand keeps its own voice, and usage splits by key so billing clients back is a single query.
A feature inside your product
Put a “match my voice” button in your editor, CRM or CMS. Using the API inside your own product is fine on any plan; offering it as a stand-alone rewriting service needs reseller terms.
A detection QA gate
Score every page before it ships, with the sentence-level reasons. Anything over your threshold goes back for a rewrite or a human read, automatically.
Newsletter tooling
Turn rough notes into an issue that sounds like the editor who signs it, formatted for email, with every link and number checked before it goes to your list.
Integrations
If it can send a webhook or make an HTTP request, it can call the API. No plugin to install and nothing to migrate.
WordPress
REST API + a webhook on save
via API / webhooks
Webflow
CMS API + site webhooks
via API / webhooks
Contentful
Webhooks + Management API
via API / webhooks
Sanity
GROQ webhooks + mutations
via API / webhooks
Make
HTTP module
via API / webhooks
Zapier
Webhooks by Zapier
via API / webhooks
n8n
HTTP Request node
via API / webhooks
Custom code
REST API from any language
via API / webhooks
Names are trademarks of their owners. These are not native plugins or partnerships: each connects through our REST API and signed webhooks.
Example · WordPress
WordPress fires a webhook
On save, on “pending”, or from a bulk action. Your handler sends the draft with an Idempotency-Key.
We run the job
Rewrite in the author's voice, check every fact, score source and output.
A signed webhook updates the draft
Pass: the draft is updated with the new text and scores. Fail: it's flagged for an editor, unchanged.
The same two steps work with Webflow's CMS API, Contentful or Sanity webhooks, or an HTTP step in Make, Zapier or n8n.
// 1. WordPress calls this when a post moves to "pending".
export async function POST(req: Request) {
const { post_id, content } = await req.json();
const res = await fetch("https://api.intactvoice.com/v1/rewrite", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": `wp-post-${post_id}`, // retries never bill twice
},
body: JSON.stringify({
text: content,
voice_id: "voice_8f2k1x",
platform: "blog",
fidelity: "strict",
webhook_url: `https://example.com/hooks/rewrite?post=${post_id}`,
}),
});
const job = await res.json(); // 202 · { id: "job_…", status: "queued" }
return Response.json({ job: job.id });
}Partners & resellers
Using the API inside your own product is fine on any plan. Reselling it, white-labelling it or offering it as a stand-alone service needs a written reseller agreement: our Acceptable Use Policy doesn't allow unapproved resale. Reseller terms are part of Enterprise.
Fine on any API plan
Needs a reseller agreement
Volume pricing and white-label terms
API pricing
One allowance covers Rewrite and Detect. Rewrite uses one word per word; Detect uses one word per five scanned. Jobs that fail a strict fact check aren't billed.
Prices in USD. Taxes may apply. Renews automatically; cancel anytime in Billing. All payments are final.
Automate one publishing workflow.
Billed $890 yearly · save $178
200k words / month
Includes
After 200k words: $0.55 per 1,000, only if you switch it on, with a spend cap.
For content teams shipping every day.
Billed $1,890 yearly · save $378
600k words / month
Everything in Basic API, plus
After 600k words: $0.55 per 1,000, only if you switch it on, with a spend cap.
For high-volume and product integrations.
Billed $3,890 yearly · save $778
1M words / month
Everything in Pro API, plus
After 1M words: $0.55 per 1,000, only if you switch it on, with a spend cap.
Enterprise
Custom volume and contract terms, and a reseller agreement if you're building a product on top of IntactVoice.
Pay as you go
For the month that runs long. Only if you switch it on, with a monthly spend cap. Off, or at the cap, calls return 402.
$0.55per 1,000 words after your allowance
Compare API plans
Full comparison| Feature | Basic API | Pro APIRecommended | Ultra API |
|---|---|---|---|
| Words / month | 200k | 600k | 1M |
| Price / month, billed yearly | $74.17 | $157.50 | $324.17 |
| Rate limit | 60 req/min | 180 req/min | 600 req/min |
| Voice profiles | 3 | 15 | Unlimited |
| Rewrite strength | Light, standard | + Deep | + Deep |
| Fact check, 422 fail-closed | |||
| Detect with sentence-level reasons | |||
| Async jobs (poll) | |||
| Signed webhooks | |||
| Detect calibrated to a writer | |||
| Usage dashboard and alerts | |||
| Queue priority | Standard | Standard | Highest |
| Support | Priority email | Priority | |
| After your allowance (opt-in, capped) | $0.55 / 1k words | $0.55 / 1k words | $0.55 / 1k words |
Billing questions, plan changes and the full comparison are on the pricing page.
For developers
Send a draft, get a job back at once, and receive the finished rewrite with its fact checks and before-and-after scores.
REST and JSON
Plain HTTPS from any language. JSON in, JSON out, dated model versions like rewrite-2026-10.
Async jobs, signed webhooks
Every rewrite returns 202 and a job. The result arrives on an HMAC-signed webhook, or poll GET /jobs/{id}.
Idempotency keys
Send Idempotency-Key and a retry within 24 hours returns the original job instead of billing twice.
Usage API
Words and requests by day, endpoint or key from GET /usage.
Test keys
Test keys return sample results without running the models or using words, so you can wire up a pipeline before you go live.
Usage dashboard
Keys, request logs and usage in one place. Open the dashboard.
curl -X POST https://api.intactvoice.com/v1/rewrite \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Many businesses struggle to create useful blog posts because the writer receives only a topic. Escalate any case older than 14 days.",
"voice_id": "voice_8f2k1x",
"platform": "blog",
"strength": "standard",
"fidelity": "strict"
}'202Immediately: a job
{
"id": "job_01JD4QC7",
"object": "job",
"type": "rewrite",
"status": "queued",
"estimated_seconds": 35,
"poll_url": "/v1/jobs/job_01JD4QC7"
}LaterThe result, by webhook or GET /jobs/{id}
{
"id": "rw_01JD4Q8ZK3",
"object": "rewrite",
"model": "rewrite-2026-10",
"duration_ms": 34210,
"text": "Most blog posts go wrong before anyone writes a word: the writer gets a topic and nothing else. If a case is older than 14 days, escalate it.",
"fidelity": {
"status": "pass",
"checks": [
{
"type": "number_unit",
"source": "14 days",
"output": "14 days",
"ok": true
}
],
"changed_facts": []
},
"signals": {
"source": {
"ai_likelihood": 0.91
},
"output": {
"ai_likelihood": 0.14
}
},
"usage": {
"words_in": 22,
"words_out": 28,
"words_billed": 22
}
}How long a job takes depends on its length, the rewrite strength and how busy the queue is. Each job reports an estimate.
Reliability & data
Every job is queued, retried if a worker is down and charged once. Your text is used for the job and then deleted.
Request accepted
202 and a job ID. Words are reserved, not charged.
Processing
Rewrite, fact check and scoring. The input is deleted when this finishes.
Result waiting
Encrypted at rest until your webhook receives it or you fetch it, for at most 60 minutes.
Deleted
Request logs keep metadata only: time, endpoint, status, word count and timing.
Encrypted
HTTPS in transit. Database connections verify TLS. API keys are stored hashed and shown once.
No training on your data
We don't train models on your content.
Text deleted after the job
Inputs are deleted when processing finishes. Results are deleted once delivered, or after 60 minutes if nobody collects them.
Jobs survive outages
If inference capacity is briefly unavailable, accepted jobs wait in the queue and retry instead of failing.
We don't offer a contractual uptime guarantee at launch. Editing runs through OpenAI's API with storage off; its abuse monitoring can keep content for up to 30 days.
API plans from $89 a month. Wire up one webhook this week and every draft that leaves your pipeline arrives voice-matched, fact-checked and scored.