Brand Mimic API: build a voice profile from a public website
By Jack Stovell X · Instagram · LinkedIn · published 2026-10-29
Brand Mimic builds a voice profile from a brand's public website in a single call. Teams call it when they have the site but no folder of approved writing. Send a URL, get back an ordinary voice profile that generation, voice match and the monitor can all read.
At a glance
What it does: Reads up to 8 pages of a public website and builds a brand voice profile from them, with your consent.
| Endpoint | `POST /v1/mimic` |
| MCP tool | `mimic_brand` |
| Cost | 1 brand-mimic credit, given back if the profile cannot be saved |
| Plans | Writer 1 a month, Operator 3, Studio 10, Agency 50. Free has none |
| Limits | 3 requests an hour per user, shared with in-app Mimic; at least 2 usable pages |
How the profile is built
One request to POST /v1/mimic does the whole job. You pass the site at url, and a bare domain such as stripe.com/blog is accepted. Then three things happen.
- Discovery. The API finds and scrapes up to 8 content pages. Each needs at least 80 words of body text, and each is trimmed to 3,500 words.
- Analysis. Every page is analysed on its own.
- Synthesis. The page-level readings are merged into one profile, with source_kind brand_mimic.
You need at least 2 usable pages, or the call fails. It takes one to two minutes, so don't hold a request thread open for it.
Confidence is capped between 0.3 and 0.85. That's deliberate. Website marketing copy reads brand voice less strongly than long prose, and a number that claimed more would be lying to you. The profile is still 45 measured attributes across eight layers; the cap just tells you how far to lean on it. For the underlying method, see brand voice measurement.
Consent and where the line is
Plainly: use this for a brand you own or may write for. That's the line.
The caller must have the end user's explicit agreement to the inspired-by terms, and must pass consent: true in the request. Using a mimicked voice is the user's responsibility, not ours and not yours as the integrator. So if your product wraps this API, build the agreement step into your own flow. Don't hard-code the flag to true and hope.
ScriptGrain does not support impersonating a named living person. A company's published site is a brand's own voice, put out in public for exactly this kind of reading. A person's name pointed at a stranger's blog is something else, and the API isn't there for it.
To be fair, a public page isn't a licence. Being able to fetch a site doesn't mean you may write as its owner. Permission is the test, and the consent flag exists to make you state it.
When to use it
Mimic earns its place when the approved writing doesn't exist. Two cases come up most.
An agency onboarding a new client. The client hasn't handed over a content folder yet, but the website is live and it's the voice they already publish. Run Mimic on day one, and you have a working profile before the kickoff call is over. The agency workflow covers how that sits alongside profiles built from approved samples.
A brand with no style guide. Plenty of them. The site is the closest thing to a record of how they sound, so measure that.
Then close the loop. Once the profile exists, point the voice monitor at the site and check its pages against the profile. Copy that has drifted gets flagged. Fair enough, it's a profile built from the same site, so expect broad agreement; the value is catching the outliers.
Mimic costs one brand-mimic credit, taken before the profile is saved and given back if it can't be saved. It's capped at 3 requests an hour per user, shared with in-app Mimic. Free has no brand-mimic credits, Writer has 1, Operator 3, Studio 10 and Agency 50.
Request and response
Pass the site and `consent: true`, which records that the person agreed to the inspired-by terms.
curl -X POST https://auth.scriptgrain.com/functions/v1/api-v1/v1/mimic \
-H "Authorization: Bearer sg_live_..." \
-H "Content-Type: application/json" \
-d '{"url": "monzo.com/blog", "consent": true}'
{
"profile_id": "3f2b9c1e-6a4d-4e8f-9b1a-2c3d4e5f6a7b",
"name": "Plain Money Talk",
"status": "complete",
"confidence_score": 0.78,
"pages_used": [
"https://monzo.com/blog",
"https://monzo.com/blog/how-we-built-pots"
],
"source_label": "Inspired by monzo.com",
"note": "Mimicked profiles cap at 0.85 confidence and are derived from public writing; the scraped text is not stored."
}
In Claude, ChatGPT or Cursor
Over MCP this is the tool `mimic_brand`. 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:
Build a ScriptGrain voice from our company blog at example.com/blog. I confirm we own the site and accept the inspired-by terms.
The tool asks for consent before it runs and takes one to two minutes.
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.
Questions
Is Brand Mimic available on the Free plan?
The REST API and the MCP server at https://mcp.scriptgrain.com/mcp are on every plan, Free included. Free has no brand-mimic credits, though, so POST /v1/mimic won't run there. Writer gives you 1 brand-mimic credit, Operator 3, Studio 10 and Agency 50. API calls draw on the same credits as the app.
What happens if the site has too few pages?
You need at least 2 usable pages, and a usable page has at least 80 words of body text. If discovery can't find that, the profile isn't built. The credit is taken before the profile is saved and given back if it cannot be saved, so a failed run doesn't cost you.
Why is confidence capped at 0.85?
Website marketing copy reads brand voice less strongly than long prose. Confidence is capped between 0.3 and 0.85 so the score reflects that. A thin site lands nearer the floor, a rich one nearer the ceiling. Either way, the profile behaves like any other. You can inspect it with the brand voice analyser.
What are the rate limits for calling it?
Each key gets 60 requests a minute. Mimic itself is tighter: 3 requests an hour per user, shared with in-app Mimic. Authentication is an sg_live_ key minted at Settings, then API, sent as Authorization: Bearer. Payments never happen through the API, and there's no separate API quota.