Personas API
Library personas (source: "library") are read-only. Custom personas
(source: "custom") are owned by your customer.
GET /personas
curl -s "$API_URL/personas" \ -H "Authorization: Bearer $SYNTHUSERS_API_KEY"{ "items": [ { "id": "pers_smb", "name": "Small-business owner", "role_description": "Runs a 5-person consulting firm.", "technical_sophistication": "low", "patience_level": "medium", "source": "library" } ]}POST /personas
curl -s -X POST "$API_URL/personas" \ -H "Authorization: Bearer $SYNTHUSERS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Mid-market HR director", "role_description": "Heads HR ops at a 200-person company.", "technical_sophistication": "low", "patience_level": "medium", "goals": ["Reduce onboarding time"], "pain_points": ["Spreadsheet sprawl"], "current_tools": ["BambooHR", "Notion"] }'The system synthesizes a synthesized_prompt from structured fields and pins
it at create time.
GET /personas/:id
Returns the full persona record including synthesized_prompt.
PATCH /personas/:id
Custom personas only. Regenerates synthesized_prompt. Existing runs are
unaffected — they snapshot the prompt at submission time.
DELETE /personas/:id
Custom personas only. Library personas return 403 forbidden.
Schema reference
| Field | Type | Notes |
|---|---|---|
name | string | Display name. |
role_description | string | One sentence; who they are. |
technical_sophistication | "low"|"medium"|"high" | How comfortable with tech they are. |
patience_level | "low"|"medium"|"high" | Tolerance for friction. |
goals | string[] | What they’re trying to accomplish. |
pain_points | string[] | Where they currently struggle. |
current_tools | string[] | What they use today. |
source | "library"|"custom" | Read-only; set by server. |