Skip to content

Personas API

Library personas (source: "library") are read-only. Custom personas (source: "custom") are owned by your customer.

GET /personas

Terminal window
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

Terminal window
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

FieldTypeNotes
namestringDisplay name.
role_descriptionstringOne sentence; who they are.
technical_sophistication"low"|"medium"|"high"How comfortable with tech they are.
patience_level"low"|"medium"|"high"Tolerance for friction.
goalsstring[]What they’re trying to accomplish.
pain_pointsstring[]Where they currently struggle.
current_toolsstring[]What they use today.
source"library"|"custom"Read-only; set by server.