These docs are for v2023-09-01. Click to read the latest docs for v2024-04-01.

Rehire a W2 Employee

Gusto provides the capability to rehire a previously dismissed employee to facilitate quick and easy re-onboarding for payroll using the Rehire Flow or API. The Rehire Flow includes the ability to review an employee’s onboarding.

1. Create a Rehire

To create a rehire use the POST employees/{employee_uuid}/rehire endpoint.

The following path params are required:

  • employee_uuid - the uuid of the employee for which you’d like to rehire

The following body params are required:

  • effective_date - the date of the employee's rehire
  • work_location_uuid - the uuid of the location where the employee is employed. This can be acquired by fetching the company locations.
  • file_new_hire_report - elect to file a new hire report for a given employee's work state
curl --request POST  
     --url <https://api.gusto-demo.com/v1/employees/{employee_uuid}/rehire>  
     --header 'accept: application/json'  
     --header 'authorization: Bearer {{access_token}}' \  
     --header 'content-type: application/json'  \
     --data '  
{  
     "effective_date": "2023-01-01",  
     "work_location_uuid": “b125fe86-981e-47a2-b7a2-58ca8de1dcb9”,  
     "file_new_hire_report": true,  
}'
const fetch = require('node-fetch');

const url = 'https://api.gusto-demo.com/v1/employees/{{employee_uuid}}/rehire';
const options = {
  method: 'POST',
  headers: {
    accept: 'application/json',
    'content-type': 'application/json',
    authorization: 'Bearer COMPANY_API_TOKEN'
  },
  body: JSON.stringify({
    effective_date: '2023-01-01', 
    work_location_uuid: 'b125fe86-981e-47a2-b7a2-58ca8de1dcb9', 
    file_new_hire_report: true
  })
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error('error:' + err));

📘

An employee must be terminated before attempting to rehire. If a mistake is made when submitting a rehire request, we only allow rehires with a future effective date to be updated and canceled. This means once an employee’s rehire date is reached or past, editing or canceling a rehire is not possible.

2. Update a Rehire

To update a rehire use the PUT employees/{employee_uuid}/rehire endpoint.

The following path params are required:

  • employee_uuid - the uuid of the employee for which you’d like to rehire

The following body params are required:

  • version - the rehire's current version identifier. This can be acquired by fetching the rehire.
  • effective_date - the date of the employee's rehire
  • work_location_uuid - the uuid of the location where the employee is employed. This can be acquired by fetching the company locations.
  • file_new_hire_report - elect to file a new hire report for a given employee's work state
curl --request PUT  
     --url <https://api.gusto-demo.com/v1/employees/{employee_uuid}/rehire>  
     --header 'accept: application/json'  
     --header 'authorization: Bearer {{access_token}}' \  
     --header 'content-type: application/json'  \
     --data '  
{  
     "version": "79fe4bf503bed0f1767dcd69ba819192",
  	 "effective_date": "2023-01-01",  
     "work_location_uuid": “b125fe86-981e-47a2-b7a2-58ca8de1dcb9”,  
     "file_new_hire_report": true,  
}'
const fetch = require('node-fetch');

const url = 'https://api.gusto-demo.com/v1/employees/{{employee_uuid}}/rehire';
const options = {
	method: 'PUT',
	headers: {
		accept: 'application/json',
		'content-type': 'application/json',
		authorization: 'Bearer COMPANY_API_TOKEN'
	},
	body: JSON.stringify({
		version: '79fe4bf503bed0f1767dcd69ba819192',
		effective_date: '2023-01-01',
		work_location_uuid: 'b125fe86-981e-47a2-b7a2-58ca8de1dcb9',
		file_new_hire_report: true
	})
};

fetch(url, options)
	.then(res => res.json())
	.then(json => console.log(json))
	.catch(err => console.error('error:' + err));

3. Get an Employee's Employment History

To see an employee’s employment history to get details on the termination and rehire dates, use the GET employees/{employee_uuid}/employment_history endpoint.

The following path params are required:

  • employee_uuid - the uuid of the employee for which you’d like to rehire
curl --request GET  
     --url '<https://api.gusto-demo.com/v1/employees/employee_id/employment_history>'  
     --header 'accept: application/json'  
     --header 'authorization: Bearer {{access_token}}' \
const fetch = require('node-fetch');

const url = '<https://api.gusto-demo.com/v1/employees/employee_id/employment_history'>;  
const options = {  
  method: 'GET',  
  headers: {accept: 'application/json', authorization: 'Bearer COMPANY_API_TOKEN'}  
};

fetch(url, options)  
  .then(res => res.json())  
  .then(json => console.log(json))  
  .catch(err => console.error('error:' + err));

4. Cancel a Rehire

To cancel a rehire use the DELETE employees/{employee_uuid}/rehire endpoint.

The following path params are required:

  • employee_uuid - the uuid of the employee
curl --request DELETE  
     --url <https://api.gusto-demo.com/v1/employees/{employee_uuid}/rehire>  
     --header 'accept: application/json'  
     --header 'authorization: Bearer {{access_token}}' \  
     --header 'content-type: application/json'  \
const fetch = require('node-fetch');

const url = 'https://api.gusto-demo.com/v1/employees/{{employee_uuid}}/rehire';
const options = {
	method: 'DELETE',
	headers: {
		accept: 'application/json',
		'content-type': 'application/json',
		authorization: 'Bearer COMPANY_API_TOKEN'
	}
};

fetch(url, options)
	.then(res => res.json())
	.then(json => console.log(json))
	.catch(err => console.error('error:' + err));

📘

A rehire can only be canceled if it has a future effective_date.

Rehire Flow

To get started, we generate an employee rehire flow via API call to our Flows endpoint.

curl --request POST  
     --url <https://api.gusto-demo.com/v1/companies/{{company_uuid}}/flows>  
     --header 'Authorization: Bearer {{access_token}}’'  
     --header 'Content-Type: application/json'  
     --data '  
{  
     "flow_type": "rehire",  
     "entity_type": "Employee",  
     "entity_uuid": "{{employee_uuid}}"  
}'
const fetch = require('node-fetch');

const url = '<https://api.gusto-demo.com/v1/companies/{{company_uuid}}/flows'>;  
const options = {  
  method: 'POST',  
  headers: {  
    accept: 'application/json',  
    'content-type': 'application/json',  
    authorization: 'Bearer COMPANY_API_TOKEN'  
  },  
  body: JSON.stringify({  
    flow_type: "rehire",  
    entity_type: "Employee",  
    entity_uuid: "{{employee_uuid}}"  
  })  
};

fetch(url, options)  
  .then(res => res.json())  
  .then(json => console.log(json))  
  .catch(err => console.error('error:' + err));

1. Enter employee rehire details

Enter the rehire start date, work address, and whether you want Gusto to file a new hire report on your behalf (this is the same option as offered when an employee is first onboarded, and the user should consult state requirements as to whether this is needed).

If the company is taxable as S-corp, the 2% shareholder field to select whether the employee is a 2% shareholder will be shown.

2. Review employee rehire summary

From the summary page, you can edit or cancel a rehire if the rehire effective date is in the future.

3. (Optional) Review employee info

In the partner’s config flow, if the Enable employee onboarding in rehire flow option is checked, the option to Review employee onboarding will appear on the summary page which leads to the employee onboarding flow. By default, the rehire start date and work location will be shown as well as any other previously entered information. If a SSN is present, we don’t allow the employee to edit this for filing purposes after the employee is already onboarded.