API Reference
Offboarding

Offboarding

The offboarding endpoints let you create offboarding records and track their status from the outside - useful for HRIS integrations that kick off an offboarding the moment someone is marked as departing.

Base path: /api/v1/offboardings


List offboardings

GET /api/v1/offboardings

Required scope: offboardings:read

Query parameters

ParamTypeDescription
pageintegerPage number (default: 1)
limitintegerResults per page (default: 20, max: 100)
statusstringFilter by status - see the list below
departmentstringFilter by exact department match

Response 200 OK

{
  "data": [
    {
      "id": "3f9c8b1a-...",
      "employee_name": "Jordan Lee",
      "employee_email": "jordan@acme.com",
      "employee_role": "Senior Engineer",
      "employee_department": "Engineering",
      "exit_date": "2024-06-15",
      "status": "notice_period",
      "separation_type": "resignation",
      "created_at": "2024-05-28T10:00:00Z"
    }
  ],
  "meta": {
    "page": 1,
    "limit": 20,
    "total": 12,
    "total_pages": 1,
    "has_next": false
  }
}

Get an offboarding

GET /api/v1/offboardings/:id

Required scope: offboardings:read

Returns the same fields as the list endpoint, plus updated_at. Returns 404 if the ID isn't a valid UUID or doesn't belong to your organisation.


Create an offboarding

POST /api/v1/offboardings

Required scope: offboardings:write

Request body

{
  "employee_name": "Jordan Lee",
  "employee_email": "jordan@acme.com",
  "employee_role": "Senior Engineer",
  "employee_department": "Engineering",
  "exit_date": "2024-06-15",
  "separation_type": "resignation"
}
FieldRequiredTypeDescription
employee_namestringFull name (max 200 characters)
exit_datedate (YYYY-MM-DD)Last working day
employee_email-stringWork email (max 254 characters)
employee_role-stringJob title (max 100 characters)
employee_department-stringDepartment (max 100 characters)
separation_type-enumSee separation types below (default: resignation)

Separation types

resignation · termination · layoff · retirement · contract_end · other

New offboardings are always created with status: "pending" - there's no way to set the initial status via this call.

Response 201 Created - the created offboarding object (same shape as the list endpoint, without updated_at).

Creating an offboarding this way also notifies your organisation's admin and HR users in-app, the same as if it had been created from the dashboard.


Update offboarding status

PATCH /api/v1/offboardings/:id

Required scope: offboardings:write

The only thing this endpoint updates is status - there's no way to change employee details or other fields after creation.

Request body

{ "status": "it_revocation" }

Valid values: pending, in_progress, notice_period, it_revocation, asset_recovery, completed, cancelled. Any other value returns 400.

Response 200 OK

{
  "id": "3f9c8b1a-...",
  "employee_name": "Jordan Lee",
  "status": "it_revocation",
  "updated_at": "2024-06-02T14:30:00Z"
}

Note that the response only includes id, employee_name, status, and updated_at - not the full offboarding record. Fetch GET /offboardings/:id afterward if you need the rest.

There's currently no way to delete an offboarding or advance it through stages via the public API beyond setting status directly - stage gating and workflow automation (checklists, asset recovery, access revocation) happen inside the PurpletGo app itself.