Skip to content

Tenant API v1 — Employees

Base path: /api/tenant/v1

Middleware: auth:tenant-api, tenant.user, not.suspended, verified, module:employees, plus can:employees.*.

Stats

GET /employees/stats

Same filters as list (minus pagination/sort). Payload:

total, active, inactive, terminated.

Next employee number

GET /employees/meta/next-number

Permission: employees.create.

Returns the next suggested EMP-#### for the current workspace (considers soft-deleted rows). The create form prefills this value; callers may still override it on POST /employees.

Payload: { "employee_number": "EMP-0001" }.

Employees CRUD

MethodPathPermission
GET/employeesemployees.view
GET/employees/statsemployees.view
GET/employees/meta/next-numberemployees.create
POST/employeesemployees.create
GET/employees/{employee}employees.view
PUT/employees/{employee}employees.update
DELETE/employees/{employee}employees.delete
POST/employees/{employee}/restoreemployees.restore
DELETE/employees/{employee}/forceemployees.force.delete

GET /employees

Query: search, status (active|inactive|terminated), employment_type (full_time|part_time|contract), trashed, sort, direction, page, per_page.

POST /employees

Body: employee_number (required, unique per tenant), first_name, last_name (required), optional email, phone, job_title, department, department_ids (when Departments module installed), hire_date, termination_date (after or equal hire), employment_type, status, user_id, notes.

Defaults: employment_type=full_time, status=active.

Resources may include departments[] when loaded. Legacy string department remains for backward compatibility.

PUT /employees/{employee}

Partial update of the same fields.

DELETE / restore / force

Soft delete, restore, and permanent delete (must already be trashed). Route binding includes trashed rows.

Official documentation for the EloSync SaaS Platform.