Employee self-onboarding
Enable employees to self-onboard into a company
Employee self-onboarding allows employers to delegate part of the onboarding process to employees, saving time and improving data security.
Whether you decide to implement a custom Employee Self-Management experience or use our Flows, itβs important to:
- Retrieve the employeeβs onboarding status to track the completion status of required onboarding steps, and
- Make the API calls to update these statuses as each is completed.
Gusto will not send emails to your end userβs employees. All email or in-app invitations to self-onboard must be incorporated into your Embedded Payroll build.
Prerequisites
The following information is required to invite an employee to self-onboard:
- First name and last name
- Start date
- Work address
- Compensation details (including FLSA status, payment amount, and pay frequency)
How self-onboarding works
- Employer enters basic employee information.
- Employer sends the employee an invitation to self-onboard.
- Employee opens the self-onboarding flow and provides their personal information.
- Employee submits the form, triggering a notification for the employer.
- Employer reviews the submitted data and finalizes onboarding. This step includes answering employer-specific state tax questions.
1. Create an employee and set them to self-onboarding
Create an employee and set self_onboarding: true with the POST /v1/companies/{company_id}/employees endpoint.
Sample request
curl --request POST \
--url https://api.gusto-demo.com/v1/companies/<company-uuid>/employees \
--header 'X-Gusto-API-Version: 2025-06-15' \
--header 'accept: application/json' \
--header 'authorization: Bearer <token>' \
--header 'content-type: application/json' \
--data '
{
"self_onboarding": true,
"first_name": "John",
"last_name": "Doe",
"email": "[email protected]",
}
'
Sample response
{
"uuid": "75ca5773-afa4-49b8-8fad-912cc6503ed8",
"first_name": "John",
"middle_initial": null,
"last_name": "Doe",
"email": [email protected],
"company_uuid": "931d085b-cb0a-4608-822a-722444349ead",
"manager_uuid": null,
"version": "9fd9f63e0d6487537569075da85a0c7f",
"current_employment_status": null,
"onboarding_status": "self_onboarding_pending_invite",
"preferred_first_name": null,
"department_uuid": null,
"employee_code": "c46701",
"payment_method": "Check",
"department": null,
"terminated": false,
"two_percent_shareholder": null,
"onboarded": false,
"historical": false,
"has_ssn": false,
"onboarding_documents_config": {
"uuid": null,
"i9_document": false
},
"jobs": [],
"eligible_paid_time_off": [],
"terminations": [],
"garnishments": [],
"date_of_birth": null,
"ssn": "",
"phone": null,
"work_email": "[email protected]"
}
2. Create self-onboarding flow
Create a flow for a given employee to self-onboard using the POST companies/{company_uuid}/flows endpoint.
You need to set the following:
flow_typetoemployee_self_managemententity_uuidto the employee's UUIDentity_typetoEmployee
You will receive a link and need to share it with your end-userβs employee.
Sample request
curl --request POST \
--url https://api.gusto-demo.com/v1/companies/<company-uuid>/flows \
--header 'X-Gusto-API-Version: 2025-06-15' \
--header 'accept: application/json' \
--header 'authorization: Bearer <token>' \
--header 'content-type: application/json' \
--data '
{
"flow_type": "employee_self_management",
"entity_type": "Employee",
"entity_uuid": "9bc2737d-e0dc-445e-8632-46deada3884e"
}
'
Sample response
{
"url": "https://flows.gusto-demo.com/flows/fN4yJDNiJLtMqfdjTzr6ANLzySpA-ImGrA6CqZ1q8cM"
}
3. Track onboarding progress
Monitor the employee's onboarding status with the GET /v1/employees/{employee_id}/onboarding_status endpoint.
This includes the following automatic status transitions:
self_onboarding_invited_startedβ employee has opened the onboarding linkself_onboarding_invited_overdueβ employee has not started within the expected timeself_onboarding_completed_by_employeeβ employee has finished entering information
All onboarding statuses
For the full list of onboarding statuses, see the reference page for GET /v1/employees/{employee_id}/onboarding_status.
Sample request
curl --request GET \
--url https://api.gusto-demo.com/v1/employees/<employee-uuid>/onboarding_status \
--header 'X-Gusto-API-Version: 2025-06-15' \
--header 'accept: application/json' \
--header 'authorization: Bearer <token>'
Sample response
{
"uuid": "<employee-uuid>",
"onboarding_status": "self_onboarding_invited",
"onboarding_steps": [
{
"title": "Personal details",
"id": "personal_details",
"required": true,
"completed": false,
"requirements": []
},
{
"title": "Enter compensation details",
"id": "compensation_details",
"required": true,
"completed": false,
"requirements": []
},
{
"title": "Add work address",
"id": "add_work_address",
"required": true,
"completed": false,
"requirements": []
},
{
"title": "Add home address",
"id": "add_home_address",
"required": true,
"completed": false,
"requirements": []
},
{
"title": "Enter federal tax withholdings",
"id": "federal_tax_setup",
"required": true,
"completed": false,
"requirements": []
},
{
"title": "Enter state tax information",
"id": "state_tax_setup",
"required": true,
"completed": false,
"requirements": [
"add_work_address",
"add_home_address"
]
},
{
"title": "Direct deposit setup",
"id": "direct_deposit_setup",
"required": false,
"completed": false,
"requirements": []
},
{
"title": "Employee form signing",
"id": "employee_form_signing",
"required": true,
"completed": false,
"requirements": [
"federal_tax_setup",
"state_tax_setup"
]
},
{
"title": "File new hire report",
"id": "file_new_hire_report",
"required": true,
"completed": false,
"requirements": [
"add_work_address"
]
},
{
"title": "Admin review",
"id": "admin_review",
"required": true,
"completed": false,
"requirements": [
"personal_details",
"compensation_details",
"add_home_address",
"add_work_address",
"federal_tax_setup",
"state_tax_setup"
]
}
]
}
4. Update onboarding status
As each onboarding step is completed by the employee, update the βcompletedβ: true using the PUT employees/{employee_id}/onboarding_status endpoint.
When the employee finishes all onboarding steps, the status becomes self_onboarding_awaiting_admin_review and notifies the employer.
5. Review and finalize the onboarding status
The employer must review the employeeβs information and provide required information. When this is done, update the employeeβs onboarding status to onboarding_completed using the PUT employees/{employee_id}/onboarding_status endpoint.
Sample request
curl --request PUT \
--url https://api.gusto-demo.com/v1/employees/75ca5773-afa4-49b8-8fad-912cc6503ed8/onboarding_status \
--header 'X-Gusto-API-Version: 2025-06-15' \
--header 'accept: application/json' \
--header 'authorization: Bearer <token>' \
--header 'content-type: application/json' \
--data '
{
"onboarding_status": "onboarding_completed"
}
'
Sample response
{
"uuid": "75ca5773-afa4-49b8-8fad-912cc6503ed8",
"onboarding_status": "onboarding_completed",
"onboarding_steps": [
{
"title": "Personal Details",
"id": "personal_details",
"required": true,
"completed": true,
"requirements": []
},
{
"title": "Compensation Details",
"id": "compensation_details",
"required": true,
"completed": true,
"requirements": []
},
{
"title": "Add Home Address",
"id": "add_home_address",
"required": true,
"completed": true,
"requirements": []
},
{
"title": "Federal Tax Setup",
"id": "federal_tax_setup",
"required": true,
"completed": true,
"requirements": []
},
{
"title": "Direct Deposit Setup",
"id": "direct_deposit_setup",
"required": false,
"completed": true,
"requirements": []
},
{
"title": "Employee Form Signing",
"id": "employee_form_signing",
"required": true,
"completed": true,
"requirements": []
},
{
"title": "Admin Review",
"id": "admin_review",
"required": true,
"completed": true,
"requirements": []
}
]
}
Updated 1 day ago