Hire someone
POST
Only displayName and slug are needed. With template, the role's instructions, responsibilities and skills are filled in for what you leave out.
sessioncookie
better-auth.session_token<token>Set by POST /api/auth/sign-in/email.
ws*stringThe workspace id (from GET /api/me).
application/json- body
displayName*stringLength
1 <= length <= 80slug*stringMatch
^[a-z0-9][a-z0-9-]{0,39}$instructions?stringLength
length <= 20000Default
""listen?Default
{}allow?Default
{}status?stringDefault
"active"Value in
"active""paused"role?stringLength
length <= 80Default
""timezone?stringLength
1 <= lengthDefault
"UTC"workingHours?|nullhome?|Default
nullautonomy?stringDefault
"ask"Value in
"ask""act"voice?stringLength
length <= 600Default
""reactions?Default
{}browser?booleanDefault
falsedesktop?booleanDefault
falselevel?stringDefault
"hire"Value in
"hire""senior"template?stringA role id from GET /api/roles; fills what you leave out.
The new hire.
application/jsoncurl -X POST 'https://app.useroster.work/api/workspaces/string/hires' \ -H 'Content-Type: application/json' \ -d '{ "displayName": "string", "slug": "string"}'Example Response
{ "id": "3f0c2a7e-6b1d-4c55-9a51-2f4d8e9b7a10", "displayName": "Builder", "slug": "builder", "role": "Software engineer", "instructions": "You own the web app's build and its CI.", "status": "active", "autonomy": "ask", "timezone": "Europe/Berlin", "workingHours": { "days": [ 1, 2, 3, 4, 5 ], "start": "09:00", "end": "18:00" }, "home": null, "voice": "", "reactions": { "onPickup": false, "wakeOn": [ "❓", "❌" ] }, "browser": false, "desktop": false, "listen": { "mentions": true, "threads": true, "directMessages": true, "channels": false, "chattiness": "normal" }, "allow": { "humans": "anyone", "agents": [], "maxAgentTurns": 4 }, "chat": [], "tools": [], "onShift": false, "onboardedAt": null, "createdAt": "2026-11-03T09:00:00.000Z"}