API Reference
Checklists

Checklists

Checklist tasks (checklist_items) are the individual to-dos attached to an offboarding record - "revoke GitHub access," "collect laptop," and so on. There's no standalone /checklists resource; tasks are created as a side effect of starting an offboarding and managed through the employee/offboarding endpoints below.

These are the same session-authenticated endpoints the PurpletGo web app uses (/api/employees, /api/checklist-templates) - not the API-key-based /api/v1 surface. If you're integrating from a server, you'll authenticate the same way the dashboard does.


How tasks get created

POST /api/employees

When you create an offboarding, its checklist is populated automatically - you don't POST individual tasks. PurpletGo picks the task list in this order:

  1. checklistTemplateId in the request body, if you pass one explicitly
  2. A role-based template configured under Settings → Role Templates, matched against the employee's role and separation type
  3. A shorter default list for contractors/vendors, or a general default list for regular employees

Each generated task has a task and an assignedTo (IT Admin, HR, Manager, Employee, or Finance, depending on the default set used).

See the Offboarding API for the full create-offboarding request body.


Reading a checklist

Checklist items aren't fetched from their own endpoint - they come back embedded on the offboarding record.

GET /api/employees

Each row in the response includes a checklist_items array:

{
  "id": "e3b0c442-...",
  "employee_name": "Jordan Lee",
  "checklist_items": [
    {
      "id": "f47ac10b-...",
      "task": "Revoke GitHub access",
      "completed": false,
      "assigned_to": "IT Admin",
      "due_date": null,
      "sla_hours": 48,
      "sla_deadline": "2024-06-03T10:00:00.000Z",
      "sla_breached": false
    }
  ]
}

Field names are the raw checklist_items column names (snake_case) - there's no camelCase transformation on this endpoint.


Update a task

PATCH /api/employees/checklist/:itemId

Updates one checklist item. This is also how you mark a task complete - there's no separate "complete" endpoint.

Request body (all fields optional - send only what you're changing)

FieldTypeDescription
completedbooleanMarking true stamps completed_at and clears any SLA breach; marking false clears completed_at
taskstringTask description
assigned_tostringWho owns the task
due_datedateISO date string
sla_hoursinteger or nullHours from creation until the task is due. Requires HR/manager/admin permissions. Pass null to clear it

Response 200 OK

{
  "success": true,
  "slaHours": 48,
  "slaDeadline": "2024-06-03T10:00:00.000Z",
  "slaBreached": false
}

There's no endpoint to delete an individual checklist item.


Apply a checklist template

POST /api/checklist-templates/:id/apply/:offboardingId

Copies every item from an existing checklist template onto an already-created offboarding, on top of whatever tasks it already has.

Response 200 OK

{ "success": true, "itemsAdded": 8 }

Templates themselves (GET/POST/PATCH/PUT/DELETE /api/checklist-templates) are managed separately - see Settings → Checklist Templates in the app for the full template CRUD surface.


SLA breach report

GET /api/employees/sla-breaches

Returns every incomplete task with an SLA configured, across all in-progress offboardings, sorted by deadline. Requires HR, manager, or admin permissions. Unlike the embedded checklist above, this endpoint camelCases its fields:

[
  {
    "id": "f47ac10b-...",
    "task": "Revoke GitHub access",
    "assignedTo": "IT Admin",
    "slaHours": 48,
    "slaDeadline": "2024-06-03T10:00:00.000Z",
    "slaBreached": true,
    "completed": false,
    "dueDate": null,
    "createdAt": "2024-06-01T10:00:00.000Z",
    "offboardingId": "e3b0c442-...",
    "employeeName": "Jordan Lee",
    "employeeDepartment": "Engineering",
    "exitDate": "2024-06-15",
    "hoursOverdue": 6.2,
    "hoursRemaining": 0,
    "status": "breached"
  }
]

status is computed per-row: breached once the deadline has passed, at_risk when less than 25% of the SLA window remains, otherwise on_track.