Offboarding an Employee
Overview
Offboarding an employee through Remote API ensures all necessary compliance, payroll, and legal processes are managed correctly when an employment ends. This includes contract termination, country-specific checks, document processing, and updates to payroll and benefits.
This guide walks you through how to initiate and track offboarding using Remote's API and stay updates via webhook notifications.
Use the offboarding flow when:
- An employee resigns or is terminated
- You need to initiate employee exits programmatically
- You want to monitor offboarding status and receive real-time updates
- You need visibility into offboarding timelines and payroll cutoffs
How it works
The offboarding process involves multiple stages that can be managed through API calls:
- Submit an offboarding request using
POST /offboardings
. - Remote reviews the request and may reach out if additional inout is required.
- Offboarding status progresses through stages such as
submitted
,review_started
,submitted_to_payroll
, and finallycompleted
. - Subscribe to offboarding related webhooks to be notified when the status of the request changes.
Let's take a look at each stage in detail.
Create an offboarding
Use the Create offboarding endpoint to submit an offboarding request for a specific employee. In the request body, you need to provide an employment_id
along with the offboarding type
and termination_details
. The details of which are:
type
: refers to the type of termination being requested. Right now, onlytermination
is supported as the offboarding type.termination_details
: The termination date object contains multiple fields detailing the offboarding of the employee. These fields are:proposed_termination_date
: The intended date for termination. In most cases, the employee must be notified before termination. Remote will assess legal and contractual notice periods before confirming this date.termination_reason
: A structured reason code for termination. Choosing an accurate code helps mitigate the risk of unlawful dismissal. Possible values are:cancellation_before_start_date
compliance_issue
conversion_to_contractor
dissatisfaction_with_remote_service
end_of_fixed_term_contract_compliance_issue
end_of_fixed_term_contract_incapacity_to_perform_inherent_duties
end_of_fixed_term_contract_local_regulations_max_term_reached
end_of_fixed_term_contract_misconduct
end_of_fixed_term_contract_operational_reasons
end_of_fixed_term_contract_performance
end_of_fixed_term_contract_redunduncy
end_of_fixed_term_contract_values
end_of_fixed_term_contract_other
gross_misconduct
incapacity_to_perform_inherent_duties
job_abandonment
mutual_agreement
performance
values
workforce_reduction
other
reason_description
: Additional explanation of the reason for termination.termination_reason_files
: Supporting documents related to the termination reason. Each object file includes aname
andcontent
of the file.agrees_to_pto_amount
: A boolean that decides whether the employee agrees with the reported PTO balance.agrees_to_pto_amount_notes
: Additional notes about the PTO agreement, especially if there is a dispute or more clarification is needed.timesheet_file
: Optional file object that includes a record of the employee's PTO balance to ensure accurate payouts. Uploading this file is recommended if there's a risk of any discrepancy.personal_email
: The employee's confirmed personal email address for post-termination communication. If not provided, Remote will pull it up from the employment record. This cannot be a company-issued email address.risk_assessment_reasons
: List of risk-related concerns during offboarding. This helps Remote assess legal exposure. Possible values are:caring_responsibilities
disabled_or_health_condition
family_leave
sick_leave
requested_medical_or_family_leave
member_of_union_or_works_council
pregnant_or_breastfeeding
reported_concerns_with_workplace
none_of_these
will_challenge_termination
: A boolean that decides whether the employee is likely to challenge the termination or not.will_challenge_termination_description
: If a challenge is likely, provide details about the anticipated dispute or concerns.confidential
: A boolean that marks the request as confidential. If set totrue
, only the API token owner or integration can view the request. In case offalse
, all company admins will have visibility to the request.customer_informed_employee
: A boolean confirming whether the employee has been informed about their termination.ℹ️ We advise not to inform the employee of their termination until Remote reviews your request for legal risks.
employee_awareness
: Details about how the termination news was communication which includes thedate
andnotes
of the termination communication. This object is only required if thecustomer_informed_employee
is set totrue
.acknowledgement_termination_procedure
: A boolean that confirms that your organization followed internal termination procedures before submitting the offboarding request.additional_comments
: Optional additional context or notes about the offboarding request.
{
"type": "termination",
"employment_id": "5e55386e-4f4f-4def-92f4-bdc19a5ce77d",
"termination_details": {
"confidential": "true",
"proposed_termination_date": "2025-05-01",
"termination_reason": "end_of_fixed_term_contract_local_regulations_max_term_reached",
"risk_assessment_reasons": [
"reported_concerns_with_workplace"
],
"will_challenge_termination": "false",
"reason_description": "Contract term is reached. Not renewing the contract.",
"additional_comments": "",
"employee_awareness": {
"date": "2025-04-15",
"note": "Employee was reminded of their end of contract date."
},
"personal_email": "[email protected]",
"termination_reason_files": [
{
"name": "Copy of contract",
"content": "<binary>"
}
],
"timesheet_file": {
"name": "Employee timesheet",
"content": "<binary>"
},
"will_challenge_termination_description": "null"
}
}
On submission, you will get the following in its response:
{
"data": {
...
"id": "ba310525-9282-40c9-8977-14d844bf891a",
"status": "submitted",
...
}
}
Get offboarding request
You can use the Show offboarding endpoint to retrieve a specific offboarding request. This endpoint is specially useful when you want to check the status
of the request at any time. All you need to do is provide the offboarding request's ID that you received in response when you created the request.
List all offboarding requests
To retrieve a list of all submitted offboarding requests, you can use the List offboarding endpoint. The results can be filtered by employment_id
, type
of offboarding, and by their confidentiality. By default, the results won't show requests that have been marked confidential, so to include those in the list, you need to set the include_confidential
flag to true.
Webhooks
The status
of an offboarding request changes from submitted
to in_review
, done
, canceled
as the request moves from different phases. To get notified of this change, you can register for certain events using the following webhooks.
offboarding.submitted
This webhook is triggered when a new offboarding request is submitted.
offboarding.review_started
Register to this webhook if you want to get notified on when Remote starts reviewing the offboarding request.
offboarding.submitted_to_payroll
This event shows when Remote has verified the request and the offboarding has been handed off to payroll for further processing.
offboarding.completed
This webhook is triggered when the requested offboarding process is complete.
offboarding.deleted
This event is triggered when the offboarding request has been deleted.
Updated about 23 hours ago