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.
No credits are consumed — the model cost is on MCPJam. It is still metered two ways, by request COUNT: a per-minute burst brake (429, retry in seconds) and your plan’s daily generation quota (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.
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.
Response
Draft personas and goals.
DRAFTS. Nothing here is persisted — feed what you want to keep to POST /projects/{projectId}/personas or POST /projects/{projectId}/goals.
The shape depends on the request: POST /personas/generate returns {persona, journeys} without personaCount and {personas: [{persona, journeys}]} with it; POST /goals/generate returns {journeys}. The payload KEY is still journeys: it is the drafting service's own shape, not a resource noun, and it moves at general availability with the rest of the deprecated surface.

