Preview docs. Hallucination Guard is the only live endpoint today.
The rest of the API surface ships through the rest of 2026. Join the waitlist to be first in line and shape what we build first.
API reference
Voice Profile Engine API
Profile crystallization that turns a writer's samples into a portable voice profile, then generates new content in that voice forever.
Powers the hosted Content Studio module. Profiles trained via the API are interchangeable with profiles exported from Content Studio.
POST /v1/voice-profile/train
Crystallizes a voice profile from samples. Returns a portable JSON profile keyed by profile_id. Trainings of >100 samples run async; see Webhooks for the completion event.
Request body
| Field | Type | Description |
|---|---|---|
| samples | string[] | Writing samples from one writer. 20+ recommended for best crystallization. Max 50 per call (Startup tier), 200 (Scale tier). |
| name | string | Optional. Profile label for your own indexing. |
const profile = await prism.voiceProfile.train({
samples: ["...post 1...", "...post 2...", "..."],
name: "Founder voice · Q2 sample",
});profile = prism.voice_profile.train(
samples=[class="tk-str">"...post 1...", class="tk-str">"...post 2...", class="tk-str">"..."],
name=class="tk-str">"Founder voice · Q2 sample",
)curl https://api.prism.dev/v1/voice-profile/train \
-H "Authorization: Bearer $PRISM_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "samples": ["..."], "name": "Founder voice · Q2 sample" }'Response
{
"tk-key">"profile_id": "vp_8c3abc...",
"tk-key">"summary": "Direct, opinionated, lean. Short sentences. Stacks single-line paragraphs.",
"tk-key">"sample_count": 22,
"tk-key">"trained_at": "2026-04-29T14:01:22Z"
}POST /v1/voice-profile/generate
Generates content in a previously-trained voice. Optionally takes structural inspiration items; these inform format/structure only, never voice.
Request body
| Field | Type | Description |
|---|---|---|
| profile_id | string | Required. Profile to generate against. |
| topic | string | Required. One sentence to one paragraph. |
| format | string | One of linkedin / instagram / x / thread / blog / email. |
| inspirations | string[] | Optional. Structural references; content is ignored for voice. |
POST /v1/voice-profile/generate
{
"tk-key">"profile_id": "vp_8c3abc...",
"tk-key">"topic": "What surprised me about Q2 retention",
"tk-key">"format": "linkedin"
}
→ 200 OK
{
"tk-key">"variants": [
{ "tk-key">"content": "...", "tk-key">"char_count": 1124 },
{ "tk-key">"content": "...", "tk-key">"char_count": 987 },
{ "tk-key">"content": "...", "tk-key">"char_count": 1308 }
]
}GET /v1/voice-profile/:id/export
Returns the portable JSON profile. Compatible with voice/import in Content Studio.
DELETE /v1/voice-profile/:id
Removes the profile. Generations against a deleted profile return 404 resource_not_found.