> ## Documentation Index
> Fetch the complete documentation index at: https://developer.rollfi.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# I-9 and E-Verify

### Overview

* Rollfi supports employee I-9 onboarding and optional E-Verify for supported companies.
* Employees complete Section 1 through a secure embedded flow.
* Employers complete Section 2 through a separate embedded counter-sign flow.
* E-Verify can only be enabled when I-9 is enabled.

***

### Tracking Status

* Use `getUser` to retrieve the employee's latest onboarding state.
* When I-9 verification has been provisioned for the employee, the `status` object in `getUser` and employee status webhooks may include `i9Verification`.
* Treat `i9Verification` as optional in your response parsing. It is omitted when I-9 verification has not been provisioned for that employee.

***

### Webhooks You Will Receive

* When an employee's I-9 record is created or its status changes, Rollfi sends the standard `employee.employeestatus.update` webhook.
* The employee payload mirrors the standard employee status webhook payload. `status.userStatus` continues to represent the employee's overall lifecycle status, while `status.i9Verification` reflects the employee's progress in the I-9 process when I-9 verification has been provisioned.
* `status.userStatus` does not need to change for an I-9 webhook to be sent. For example, you may receive an `employee.employeestatus.update` because the employee completed Section 1, the submission was rejected and restarted, the employer countersigned Section 2, the form was finalized, or the record became overdue.

### Interpreting I-9 Webhook States

* `Section 1 Complete` means the employee has completed Section 1 and the I-9 is now waiting for the employer or admin to take action by completing Section 2.
* `Section 2 Complete` means the employer or admin completed Section 2 and the I-9 is awaiting final completion in the verification workflow.
* `Complete` means the I-9 workflow has been finalized and no further I-9 action is required.
* `Overdue` means a required I-9 step was not completed in time and follow-up is required before the workflow can be considered complete. The company admin should check on the I9 status through the whitelabel when this status is received.

### Example Payload

In this example, `userStatus` is still `Invite Sent`, but the full `status` object also includes the onboarding progress fields. `status.i9Verification` has moved to `Section 1 Complete`, which means the employee finished Section 1 and the I-9 is waiting on employer action.

```json theme={null}
{
	"trigger": {
		"eventId": "c68d4dc1-638a-4baa-9ccb-26a2520e38a2",
		"eventType": "employee.employeestatus.update",
		"eventTimeStamp": "01/08/2026 13:10:02"
	},
	"payload": [
		{
			"user": [
				{
					"user": "Alex Morgan",
					"userId": "A12F45BC-9D31-4C9E-B28F-7F6E2C91D4A8",
					"userReferenceId": "",
					"companyId": "8E9F2B11-6A44-4D8C-B3A2-91F6D2E8C7A0",
					"status": {
						"userStatus": "Invite Sent",
						"generalInformationComplete": true,
						"jobInformationComplete": true,
						"inviteSent": true,
						"onboardingComplete": false,
						"bankAccountLinked": false,
						"i9Verification": "Section 1 Complete"
					},
					"WorkerType": {
						"WorkerType": "W2"
					},
					"firstName": "Alex",
					"lastName": "Morgan",
					"middleName": "",
					"phoneNumber": "5551234567",
					"kycStatus": "passed",
					"jobTitle": "Quality Analyst",
					"dateOfJoin": "2026-01-07",
					"email": "alex.morgan@example.com",
					"userWages": [
						{
							"userWageId": "E4D92C17-1B55-4C3E-A9D8-2F5B9A1C7E44",
							"standardWorkingHours": 0,
							"WageRate": 85,
							"WageBasis": {
								"WageBasis": "Per Month"
							},
							"paymentMethod": {
								"PaymentMethod": "Direct Deposit"
							}
						}
					],
					"bankAccounts": []
				}
			]
		}
	]
}
```

***
