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

FieldTypeDescription
samplesstring[]Writing samples from one writer. 20+ recommended for best crystallization. Max 50 per call (Startup tier), 200 (Scale tier).
namestringOptional. Profile label for your own indexing.
JAVASCRIPT
const profile = await prism.voiceProfile.train({
  samples: ["...post 1...", "...post 2...", "..."],
  name: "Founder voice · Q2 sample",
});
PYTHON
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",
)
BASH
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

JSON
{
  "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

FieldTypeDescription
profile_idstringRequired. Profile to generate against.
topicstringRequired. One sentence to one paragraph.
formatstringOne of linkedin / instagram / x / thread / blog / email.
inspirationsstring[]Optional. Structural references; content is ignored for voice.
JSON
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.