Form page · /f/<id>
New starter account request
New starter account · 2-column grid · own header and theme · Its own page: share the link or open it on a tablet
IT & Security package
A themed IT form requests a new starter account; the manager approves, then Graph creates the Entra user, assigns the licence and adds the department group.
Connects to Microsoft 365Microsoft Entra ID
About this package
Microsoft 365 / Entra account provisioning replaces the new starter ticket and the copy-paste in the Entra admin centre. IT fills in a branded form: name, job title, employee id, personal email, start date, office, the approving manager and the department, picked from the Departments table, which fills in the Microsoft 365 licence SKU, the Entra group, the usage location and the mail domain.
The workflow builds the user principal name, checks with Microsoft Graph that it is free (adding a number when it is not) and gives the manager an approval task with Approve and create / Reject buttons.
On approval, Graph creates the user (POST /users), assigns the department's licence (POST /users/{id}/assignLicense), adds the user to the department group (POST /groups/{id}/members/$ref) and issues a Temporary Access Pass for day one. The starter gets a welcome email at their personal address with their sign-in name, and the manager gets the pass to hand over.
Starts from a form page: IT opens the New starter account request form (/f/<id>); submitting it starts the workflow.
Someone fills in a form to start it: the workflow start form (Run dialog in the app, or your own portal posting to the API) or a standalone form page (/f/<id>) whose Form submitted trigger starts the workflow. People complete User Task forms along the way.
The flow
IT requests the account
The themed form collects the starter's details; the Departments lookup fills the licence SKU, group, usage location and domain.
Build and check the UPN
first.last@domain is built and checked with GET /users?$filter=userPrincipalName eq ...; a number is added if it is taken.
Manager approves
The approving manager (a Person field on the form) gets Approve and create / Reject buttons.
Create in Entra ID
POST /users, POST /users/{id}/assignLicense, POST /groups/{id}/members/$ref and a Temporary Access Pass.
Welcome
The starter gets their UPN at their personal email; the manager gets the pass for day one.
Forms
People start it from a form page (/f/<id>) with its own header, theme and buttons; submitting it starts the workflow. User Tasks show their fields and outcome buttons to the assignee.
Form page · /f/<id>
New starter account · 2-column grid · own header and theme · Its own page: share the link or open it on a tablet
User Task
Approve account for {{form.given_name}} {{form.surname}} ({{dept_name}}, starts {{form.start_date}}) · 2-column grid · own header and theme
From your code
Every workflow can be started over REST, MCP or the CLI, whatever its trigger, with the sample input below. Runs start straight away on the published version; replace <workflow id> with the id the install created.
REST
curl -X POST "$USERTASKS_URL/api/v1/workflows/start" \
-H "Authorization: Bearer $USERTASKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"workflow_id":"<workflow id>","variables":{"given_name":"Ana","surname":"Lopez","job_title":"Financial Analyst","employee_id":"E10492","personal_email":"ana.lopez.home@example.net","start_date":"2026-11-09","office_location":"Auckland","department":"FIN","licence_name":"Microsoft 365 E3","group_name":"SG-Finance","licence_sku_id":"05e9a617-0261-4cee-bb44-138d3ef5d965","group_id":"b320e1c4-7a4f-4d0e-9c1e-2f5a7d1e9a01","usage_location":"NZ","mail_domain":"contoso.example.com","manager":"$owner","manager_email":"finance.manager@example.com","notes":"Needs access to the month-end shared mailbox (separate request)."}}'CLI
usertasks workflows inputs <workflow id> # the start form: keys, types, required
usertasks workflows run <workflow id> --input given_name=Ana --input surname=Lopez --input job_title="Financial Analyst" --input employee_id=E10492 … --waitWhat's included
| Type | Name | Details |
|---|---|---|
| Email template | Account request not approved | Sent to the manager email on the request when the account is not approved. |
| Email template | New starter sign-in details | Sent to the approving manager: the UPN and the Temporary Access Pass to hand over on day one. |
| Email template | Welcome: your Microsoft 365 account | Sent to the new starter's personal email with their sign-in name once the account exists. |
| Data table | Departments | Each department's Microsoft 365 licence (SKU id), its Entra group and defaults. The new starter form looks the department up here and fills the licence and group in. |
| Integration | Microsoft Graph | Microsoft Graph v1.0 for Microsoft Entra ID and Microsoft 365. Use an app registration with application permissions User.ReadWrite.All, GroupMember.ReadWrite.All, LicenseAssignment.ReadWrite.All (and UserAuthenticationMethod.ReadWrite.All for Temporary Access Passes); the token is a client-credentials bearer token. |
| API reference | Add group member | POST /groups/{{group_id}}/members/$ref — Add the user to the department's security / Microsoft 365 group (POST /groups/{id}/members/$ref with an @odata.id of the directory object). Graph answers 204 No Content. |
| API reference | Assign licence | POST /users/{{user_id}}/assignLicense — Assign the department's Microsoft 365 licence (POST /users/{id}/assignLicense with addLicenses[].skuId). Returns the user. |
| API reference | Create Temporary Access Pass | POST /users/{{user_id}}/authentication/temporaryAccessPassMethods — Create a Temporary Access Pass for the first sign-in (POST /users/{id}/authentication/temporaryAccessPassMethods). Needs the TAP authentication method policy enabled. |
| API reference | Create user | POST /users — Create the Entra ID account (POST /users) with a forced password change at first sign-in. Returns the new object id and userPrincipalName. |
| API reference | Find user by UPN | GET /users — Check whether the user principal name is already taken (GET /users?$filter=userPrincipalName eq '...'&$select=id,displayName,userPrincipalName). |
| forms | New starter account request | IT's form for a new Microsoft 365 / Entra ID account: starter details, department (licence and group fill in), start date and the approving manager. |
| Workflow | Entra account provisioning | 24 steps — IT submits the new starter form; the UPN is built and checked in Entra ID, the manager approves, then Microsoft Graph creates the user, assigns the department licence, adds the department group and issues a Temporary Access Pass. The starter gets a welcome email with their UPN. |
Departments · 5 sample rows
CodeDepartmentLicenceLicence SKU idGroup object idGroupUsage locationMail domainCost centre
Requirements
Credentials never travel in a package. The install wizard asks for what your environment must provide, or installs it incomplete until you finish setup.
Integration “Microsoft Graph”Required
Install
Works on UserTasks cloud and on any self-hosted instance. Installing creates the assets above; nothing runs until you complete setup and start it.
curl -fLO https://usertasks.com/gallery/entra-account-provisioning-1.0.0.utpkg
usertasks packages inspect entra-account-provisioning-1.0.0.utpkg # offline: checksum, hashes, signature
usertasks packages install entra-account-provisioning-1.0.0.utpkg --dry-run
usertasks packages install entra-account-provisioning-1.0.0.utpkg # prompts for each requirement
usertasks packages install entra-account-provisioning-1.0.0.utpkg --keep-incomplete --yes # in CI; finish with:
usertasks packages complete entra-account-provisioning -f values.yamlVerify the download
shasum -a 256 entra-account-provisioning-1.0.0.utpkg should print the file SHA-256. How gallery packages are signed.
Versions
Installing a newer version upgrades in place: local credentials and requirement values are kept, and changes you made are flagged first. How packages work
More packages
IT & Security Official
People request application access from a form; risk-based approvals route it, the grant is provisioned automatically and time-boxed access is revoked on expiry.
Needs:REST APIAssigneesEmail
IT & Security Official
An RFC form scores change risk, routes to pre-approval, CAB or emergency CAB, then tracks implementation and the post-implementation review in your ITSM.
Needs:REST APIAssigneesEmail
IT & Security Official
Staff borrow laptops, phones and headsets from a loan pool: manager approval, availability tracking, a return check with reminders and a full loan log.
Nothing to configure: works as soon as it is installed