# Voice Match API: score text against a writing voice, free · ScriptGrain

> POST /v1/voice-match or the check_voice_match MCP tool scores any text of 20+ words against a voice profile, 0 to 1, with the per-feature numbers behind the score. Free on every plan.

Canonical: https://scriptgrain.com/api/voice-match

# Voice Match API: score any text against a voice profile

*By Jack Stovell [X](https://x.com/StovBuilds) · [Instagram](https://www.instagram.com/stovbuilds) · [LinkedIn](https://www.linkedin.com/in/jackstovell/) · published 2026-10-29*

The Voice Match API takes any text of 20 or more words and returns a 0 to 1 score against a measured voice profile, free on every plan, with the numbers behind it. Developers, content teams and assistant users call it to check a draft before it ships. You get a verdict and the evidence.

## At a glance

**What it does:** Scores any text against a voice profile from 0 to 1 and shows the measured features behind the number.

· 
Endpoint · `POST /v1/voice-match`
MCP tool · `check_voice_match`
Cost · Free on every plan
Limits · Text of 20+ words; 200 scores an hour per account

## How the score is made

Some features are counted. Others are judged. The score blends both, and it shows its working.

Counting happens in code: sentence lengths, contraction and punctuation rates, signature-phrase use and more. No model opinion involved, so the same text gives the same numbers every time. A judge model then covers the qualitative subset, the things a counter can't see. A weighted comparator turns all of it into the single 0 to 1 score.

The profile it scores against has 45 measured attributes across eight layers. It comes from a two-pass stylometric extraction of the writer's own human-written samples. ScriptGrain measures writing and is never trained on it. The full method is published in the [voice measurement framework](https://scriptgrain.com/reference/voice-measurement-framework), so you can check how each feature is defined.

One limit: the request needs a profile whose status is complete.

## Reading the deltas

A score tells you something is off. The deltas tell you what. Each entry in `deltas` lists a feature with the draft number, the profile number and a 0 to 1 similarity. The `notes` are rendered from those same deltas, so they never say more than the numbers do.

Take the live example. A 61-word paragraph scored 0.64 against ScriptGrain's own profile. That's partial. Typical bands run like this:

1. On-voice text scores 0.85 to 0.95.
2. 0.5 to 0.8 is partial.
3. Under 0.45 is clearly off voice.

Now read the deltas. Sentence length matched (15.3 vs 16.9 words), so leave it alone. Contractions diverged (0 vs 21.2 per 1,000 words). Sentence-length variance diverged too (110 vs 38). So the fix is plain: add contractions, and rein in the swing between very long and very short sentences. Two edits, not a rewrite.

Check `score_context` as well. It lists measured caveats, such as a short sample, that may make the score under-read.

## When to use it

Use it wherever a draft needs a verdict before it moves on.

- **A gate before publishing.** Set a threshold, and anything under it goes back for edits. The deltas say where to start.
- **A freelancer's draft.** Score it against the client's profile. You get numbers instead of a vague feeling that it reads wrong.
- **An AI draft.** Generated text often drifts from a writer's habits. Scoring catches the drift, and [content generation](https://scriptgrain.com/api/content-generation) is the other half if you want the drafting inside the same pipeline.
- **A CI-style check.** Run it on every piece in a content pipeline, the way you'd run tests on code.

Need a side-by-side of two texts rather than a score against a profile? That's voice compare. Prefer a browser to an endpoint? The brand voice consistency checker does the job without code.

## Request and response

Called live on 29 October 2026: a 61-word paragraph scored against ScriptGrain's own brand profile (deltas cut to two). It scored 0.64, partial, and the deltas say why.

## In Claude, ChatGPT or Cursor

Over MCP this is the tool `check_voice_match`. Connect `https://mcp.scriptgrain.com/mcp` once (a custom connector in claude.ai, developer mode in ChatGPT on the web, the MCP settings in Cursor, or `claude mcp add` in Claude Code), then ask in plain words:

> Check this draft against my ScriptGrain voice and tell me the three features furthest from my profile, with the numbers.

A guest with no account can run the same check through the keyless `/try` endpoint, 5 checks an hour per network.

## Get a key

API and MCP access is on every plan, Free included. Create a free account (no card), then mint a key at Settings, then API: it starts `sg_live_`, is shown once, and goes in an `Authorization: Bearer` header. Every request, field and error code is in the [OpenAPI spec](https://scriptgrain.com/openapi.yaml).

## Questions

### What does the Voice Match API return?

A 0 to 1 score for the text you send, plus deltas listing each feature with the draft-vs-profile numbers and a 0 to 1 similarity. You also get notes rendered from those deltas, and score_context, which flags measured caveats that may make the score under-read.

### Does it cost anything to call?

Voice match is free on every plan, Free included. It's limited to 200 scores an hour per account. The REST API and the MCP server at https://mcp.scriptgrain.com/mcp are on every plan, and the rate limit is 60 requests a minute per key.

### How do I authenticate?

Mint an sg_live_ key at Settings, then API, and send it as Authorization: Bearer. Other API calls draw on the same credits as the app, so there's no separate API quota. Payments never happen through the API, whichever call you make.

### What score counts as on voice?

On-voice text typically scores 0.85 to 0.95. A score of 0.5 to 0.8 is partial, and under 0.45 is clearly off voice. Don't read the number alone, though. The deltas show which features dragged it down, so you know what to fix.

## Related

- [AI writing API and MCP server](https://scriptgrain.com/ai-writing-api-and-mcp-server)
- [Works with Claude](https://scriptgrain.com/works-with/claude)
- [Works with ChatGPT](https://scriptgrain.com/works-with/chatgpt)
- [Works with Cursor and MCP clients](https://scriptgrain.com/works-with/cursor)
- [MCP tool reference](https://scriptgrain.com/reference/mcp-tool-reference)
- [Pricing](https://scriptgrain.com/pricing)
