Multi-persona runs
A run can carry 1 to N personas. Each persona executes in its own SessionDO + Container in parallel. When the last session completes, we synthesize a cross-persona aggregate report.
When to fan out
- You’re choosing between two onboarding flows and want both audience reads.
- You’re shipping a B2B feature where buyer and end-user disagree.
- You want a “do these confusion points cluster?” answer that one persona can’t give.
Submitting a fan-out
curl -s -X POST "$API_URL/runs" \ -H "Authorization: Bearer $SYNTHUSERS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "target_url": "https://staging.example.com/", "persona_ids": ["pers_smb_owner", "pers_anxious", "pers_power_user"], "task": "Sign up and create your first project.", "duration_budget": "short" }'The hard cap is 10 personas per run.
const res = await fetch(`${API_URL}/runs`, { method: "POST", headers: { "Authorization": `Bearer ${process.env.SYNTHUSERS_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ target_url: "https://staging.example.com/", persona_ids: ["pers_smb_owner", "pers_anxious", "pers_power_user"], task: "Sign up and create your first project.", }),});const { run_id } = await res.json();What you get back
runs/<run_id>/├── sessions/<sid_1>/│ ├── report.json│ ├── report.md│ ├── report.html│ └── screenshots/├── sessions/<sid_2>/...├── sessions/<sid_3>/...└── aggregate-report.json aggregate-report.md aggregate-report.htmlThe aggregate report includes:
- Cross-persona confusion clusters — when 2+ personas hit the same wall.
- Per-persona quotes attributed to each voice.
- Would-sign-up roll-up — how many personas got far enough to convert.
Fetching the aggregate
curl -s "$API_URL/runs/$RUN_ID/aggregate-report.json" \ -H "Authorization: Bearer $SYNTHUSERS_API_KEY"The aggregate is also available as .md and .html. Each persona’s own
report stays at runs/:id/sessions/:sid/report.*. Check the run’s
aggregate_status field — the aggregate is ready when it reads ready.
Cost
You’re billed per completed session, not per run. A 3-persona run bills three sessions. Cancelled / errored sessions don’t bill.