Back to Help

BioTime API Wrapper

Last updated: 8/28/2026

BioTime API Wrapper

Many customers already have a working integration (JISR, Odoo, a custom payroll script) built against ZKTeco BioTime's own REST API. Rather than rewriting that integration, EasyTime can expose a real, compatible subset of BioTime's own API — same paths, same auth scheme, same response shapes — so the existing integration works against EasyTime unmodified.

Enabling it

  1. Go to Settings → Integrations → BioTime API.
  2. Tick Enable BioTime API wrapper.
  3. Set a BioTime Username — this must be unique across every company on this EasyTime instance, since an incoming request carries only a username/password, no company context.
  4. Set a BioTime Password.
  5. Save. The endpoint reference panel shows the exact base URLs to hand to your integrator.

Authentication

Exactly like a real BioTime deployment — DRF's stock token auth, not the Bearer/JWT scheme EasyTime's own API uses.

POST /api-token-auth/
Content-Type: application/json

{"username": "acme_biotime", "password": "your-password"}

Response: {"token": "<40-character hex string>"} — a fixed token, not reissued each login. Use it on every other call:

Authorization: Token <token>

Supported endpoints

All list endpoints are paginated: {"count", "next", "previous", "msg", "code", "data": [...]} (page/page_size query params, default 10, max 100 per page) — matching BioTime's own real pagination envelope exactly, not the plain results array EasyTime's own API uses elsewhere.

Employees/personnel/api/employees/

MethodPathNotes
GET/personnel/api/employees/List, paginated
GET/personnel/api/employees/{id}/Detail
POST/personnel/api/employees/Create
PUT/personnel/api/employees/{id}/Update
DELETE/personnel/api/employees/{id}/Deactivate
POST/personnel/api/employees/adjust_area/Bulk reassign area(s) — {"employees":[ids],"areas":[ids]}
POST/personnel/api/employees/adjust_department/Bulk reassign department — {"employees":[ids],"department":id}
POST/personnel/api/employees/adjust_position/Bulk reassign position — {"employees":[ids],"position":id}
POST/personnel/api/employees/adjust_resign/Bulk resign — {"employees":[ids],"resign_date","resign_type","reason","disableatt"}
POST/personnel/api/employees/del_bio_template/Delete fingerprint/face templates (local + pushes a real device delete)
POST/personnel/api/employees/resync_to_device/Force a fresh re-push to this employee's devices

Departments / Areas / Positions — full CRUD, identical shape for each: /personnel/api/departments/, /personnel/api/areas/, /personnel/api/positions/ (GET list, GET detail, POST create, PUT update, DELETE).

Resignations/personnel/api/resigns/

MethodPathNotes
GET / POST/personnel/api/resigns/List / create — {"employee":id,"resign_date",...}
GET / PUT / DELETE/personnel/api/resigns/{id}/Detail / update / delete
POST/personnel/api/resigns/reinstatement/Reactivate — {"resigns":[resign-row-ids]}

Terminals (devices)/iclock/api/terminals/

MethodPathNotes
GET / POST/iclock/api/terminals/List / create
GET / PUT / DELETE/iclock/api/terminals/{id}/Detail / update / delete
POST/iclock/api/terminals/clear_command/Clear pending commands — {"terminals":[ids]}
POST/iclock/api/terminals/clear_capture/Clear captured biometric data from these devices
POST/iclock/api/terminals/clear_all/Wipe all device-side data (real CLEAR DATA command)
POST/iclock/api/terminals/upload_all/Force a full re-pull of users/templates/photos
POST/iclock/api/terminals/upload_transaction/Force a re-pull of attendance data
POST/iclock/api/terminals/reboot/Remote reboot

Transactions (attendance)/iclock/api/transactions/

MethodPathNotes
GET/iclock/api/transactions/List — filter with ?start_time=, ?end_time=, ?emp_code=
GET/iclock/api/transactions/{id}/Detail
DELETE/iclock/api/transactions/{id}/Delete a punch
GET/iclock/api/transactions/export/CSV export, same filters as list

What's not covered

BioTime's real API also has ~100 report/payroll/workflow endpoints under /att/api/, /staff/api/, /payroll/api/, /workflow/api/ — these are BioTime's own UI-facing report generators, not what a third-party HR/payroll integration typically pulls. This wrapper covers the core identity and attendance data (personnel + iclock modules) real integrations actually use.

Security

Every endpoint is strictly scoped to the company that owns the wrapper credential used to authenticate — a company's BioTime API token can never read or affect another company's data, regardless of the IDs passed in.