ReferenceHTTP APIAuth
Create the first owner and default workspace, or recover an owner
POST
Allowed only while no live owner exists (an owner whose account or membership is disabled is not live). On an installation that already has users it adds or restores the owner in the existing workspace, ignores workspace_name and workspace_slug, revokes every web session in the workspace and writes a recover_owner receipt. Each BOOTSTRAP_TOKEN works once per installation; a token presented while a live owner exists is spent. A wrong or spent token answers 401 before the owner state is looked at.
Auth: public; no credential. Idempotency-Key: ignored.
application/json- body
bootstrap_token*stringLength
32 <= length <= 256email*stringMatch
^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$Format
emailLength
length <= 254password*stringLength
12 <= lengthdisplay_name*stringLength
1 <= length <= 64workspace_name*stringLength
1 <= length <= 120workspace_slug*stringMatch
^[a-z0-9][a-z0-9-]*$Length
1 <= length <= 64The owner, the workspace and the membership are created, or the owner is restored in the existing workspace.
application/json- response
user_id*stringMatch
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Format
uuidworkspace*role*stringcurl -X POST 'https://example.com/v1/auth/bootstrap' \ -H 'Content-Type: application/json' \ -d '{ "bootstrap_token": "<the BOOTSTRAP_TOKEN printed at install>", "email": "owner@example.com", "password": "correct horse battery staple", "display_name": "Ada Owner", "workspace_name": "Acme", "workspace_slug": "acme"}'Example Response
{ "user_id": "3e7f1a90-5c2d-4b8e-8f61-2a9d0c4b7e35", "workspace": { "id": "9d2c4e61-8a3b-4f70-b1e5-6c0a7d3f2b98", "slug": "acme", "name": "Acme", "settings": { "dispatch_model": null, "kill_switch": false, "daily_cost_limit_usd": null, "idle_pause_minutes": 30, "audit_retention_days": 90, "slack_guest_enabled": false, "achievement_judge": { "connection_id": null, "threshold": 0.9, "on_evidence": true, "every_n_turns": null, "on_idle": false, "transcript": "recent", "daily_budget_usd": 1, "max_per_session": 20 } }, "created_at": "2026-10-01T09:00:00Z" }, "role": "owner"}