Draft personas with a model
Returns DRAFTS and persists nothing. That separation is deliberate: generation is the step most likely to produce something nobody wanted, and a route that both invented and saved would make “let me see what you’d suggest” indistinguishable from “fill my project with these”.
It is also why there is no idempotency key — a call with no effect has nothing to de-duplicate, and offering one would imply the drafts are stable across retries when they are not.
SPENDS. This runs models on your organization’s account and is metered two ways: a per-minute burst brake (429, retry in seconds) and your plan’s daily budget (429, resets at UTC midnight). Both normally carry Retry-After — honor it when it is there, and back off on your own when it is not.
Authorizations
MCPJam API key (sk_…). Create one at Settings → API keys. Guest sessions cannot use the API, and API keys cannot manage other API keys.
Path Parameters
ID of the hosted project that contains the server.
Body
Grounding source and slate size.
Exactly ONE grounding source: serverAttachmentId or environmentId. Sending both is a 400 — a request that is already confused about what it wants should not have a winner picked for it.
Journeys to draft per persona.
Ask for a SLATE of N personas. Omitting it is not the same as 1: it selects the legacy single-persona response shape, so a default would switch the response under a caller that only knows the other one.
1 <= x <= 12Free-text audience brief, forwarded verbatim into the prompt.
2000Personas you already have, so the model drafts different ones. A prompt hint, not a data feed — only the first few dozen are used.
Response
Draft personas and journeys.
DRAFTS. Nothing here is persisted — feed what you want to keep to POST /projects/{projectId}/personas or POST /projects/{projectId}/journeys.
The shape depends on the request: POST /personas/generate returns {persona, journeys} without personaCount and {personas: [{persona, journeys}]} with it; POST /journeys/generate returns {journeys}.

