Biotime Reference Public

Reference

Data and screen reference for the ERPat Biotime module: the thirteen mirror tables, nine binding states, punch and verification codes, BT error codes, menu and route map, and the seven integration API endpoints.

Guide version: r2 Module version: 1.4.0 Updated: 2026-09-02 Estimated time: 6 min 7 views 0% helpful

Reference

Tables, states, codes and endpoints — the lookup page.

Binding states

Every mirrored BioTime employee is in exactly one of these nine states.

StateMeaningHas an ERPat employee?
boundConfirmed link — set or accepted by a person. Authoritative; no automatic pass overwrites it.Yes
auto_matchedA single unambiguous match on ID number, applied automatically. Reversible and visibly unconfirmed.Yes
suggestedA similar name was found. Recorded as a candidate; nothing applied.No
unboundNot attempted, or deliberately cleared.No
not_foundNo ERPat employee carries this ID number.No
conflictTwo or more ERPat employees share this ID number, so no automatic match is safe.No — never guessed
missing_remotePresent in an earlier sync, now absent from BioTime. The binding is kept so old punches stay attributable.Yes, retained
ignoredDeliberately excluded — test cards, shared badges.No
disabledDisabled or attendance-off on the BioTime side.No

How a match is decided

  1. Manual — an operator's binding wins and is never overwritten.
  2. Existing Kiosk enrollment — where ERPat's Kiosk module already knows this code.
  3. Exact ID number — one candidate becomes auto_matched; two or more become conflict; none continues.
  4. Name similarity — recorded as a suggestion, never applied.
  5. Otherwise not_found.

Punch codes

CodeMeaning
0Check In
1Check Out
2Break Out
3Break In
4Overtime In
5Overtime Out

An unrecognised code is shown as Unknown (n) rather than being mapped to something plausible — a mislabelled punch is worse than an obviously unrecognised one.

Verification methods

Confirmed values: 0 Password · 1 Fingerprint · 2 Card · 3 Fingerprint + Password · 4 Card · 15 Face · 20 Palm. Codes outside this set display with their raw number; the list grows only as values are actually observed.

Import outcomes

What the Imported column on Attendance Transactions can say about a punch.

ShowsMeans
ImportedIt became part of an attendance record; hover for the record number.
AwaitingBound and eligible; usually a shift that is not closed yet.
Only one punchThe shift has no clock-out. Skipped unless the opt-in is on.
Date lockedThe day is closed for attendance edits.
Overlaps an existing recordAnother record already covers those hours.
Record already decidedIts record is approved, rejected or auto-closed; never rewritten.
Record edited by handIts record's times were changed by a person; the correction stands.
Arrived after importNeeds a human: spans two records, wrong owner after a re-binding, or the record reaches beyond this shift.
Employee inactiveThe bound ERPat employee is deleted or deactivated.
Future timestampMore than a day ahead — a device with a wrong clock.
Shift over 24 hoursA broken clock or a missed clock-out.
Access terminalA door reader, not an attendance clock.
Attendance deletedIts record was deleted; not recreated unless you retry.
Repeat tapA duplicate of the tap beside it, folded into the same record — a reader firing twice within seconds.
Double tapA repeat badge minutes later, on the clock in, a break, or the clock out. Folded into the same record by the double-tap auto-fix.

Error codes

Every failure is classified before it is recorded, so a sync run's error code is precise rather than a scraped message.

CodeMeaningTypically
BT-NETCould not reach the server.DNS, firewall, timeout, TLS transport failure.
BT-POLICYRefused by the host policy.Address resolves somewhere ERPat may not reach.
BT-AUTHCredentials rejected.Wrong password, or the account was disabled.
BT-TOKENThe session expired and could not be renewed.Server restarted or revoked the session.
BT-SHAPEResponse was not in the expected shape.A server generation change, or an intercepting proxy.
BT-REMOTEThe server reported an error.A server-side fault or a vendor error code.
BT-RATEThe server is rate-limiting us.Common on large backfills; the next run resumes.
BT-CONFLICTA conflict inside ERPat.Duplicate ID number, competing binding.
BT-LOCKEDConnection locked after repeated credential failures.Wait, then retry with the correct password.
BT-TRUNCATEDRan out of work budget with more to do.Not a failure — the next run resumes from the same place.
BT-IMPORTThe attendance import failed repeatedly.An ERPat-side fault, not the remote server. Nothing further was written.

Menu and pages

Menu itemURLPermission
DashboardbiotimeBiotime
Employees & Bindingsbiotime_employeesEmployees & Bindings
Attendance Transactionsbiotime_transactionsAttendance transactions
Devicesbiotime_devicesDevices
Organizationbiotime_organizationOrganization
Sync Centerbiotime_syncView sync history (+ Run a sync to start one)
Analyticsbiotime_analyticsAnalytics
API Logsbiotime_logsView API logs
Settingsbiotime_settingsBiotime settings

Stored data

TableHolds
biotime_connectionsOne configured server: address, username, encrypted credential and tokens, profile, timezone, status.
biotime_employeesMirrored personnel, including which biometrics are enrolled — as flags, never the biometric data — plus an operator remarks note that no sync ever changes.
biotime_employee_bindingsThe link to an ERPat employee: state, how it was decided, by whom, and the alternatives.
biotime_transactionsMirrored punches, with raw, local and UTC times, plus the link to the ERPat attendance record each was imported into (or the reason it was not).
biotime_devicesTerminals: serial, alias, address, firmware, state, activity and enrollment counts, plus an operator remarks note.
biotime_departmentsMirrored departments, plus an operator remarks note.
biotime_positionsMirrored positions, plus an operator remarks note.
biotime_areasMirrored areas, plus an operator remarks note.
biotime_locationsMirrored locations — a cloud-only resource — plus an operator remarks note.
biotime_sync_cursorsWhere each resource got to, so a sync can resume.
biotime_sync_runsRun history with counts and error codes.
biotime_api_logsEvery outbound call: path, statuses, duration and a redacted excerpt.
biotime_analytics_dailyDaily punch totals, kept deliberately so history survives a transaction purge.

Integration API

All read-only, all requiring the biotime:read scope, all returning ERPat's standard JSON envelope.

EndpointReturnsFilters
GET /api/v1/biotime/statusConnection health, profile, counts, binding summary, last sync.
GET /api/v1/biotime/employeesMirrored personnel with their binding state.page, per_page
GET /api/v1/biotime/bindingsBinding rows on their own.status, page, per_page
GET /api/v1/biotime/transactionsMirrored punches, local and UTC, each with erpat_attendance_id, imported_at_utc and import_note showing what the attendance import made of it.from, to, emp_code, terminal_sn, page, per_page
GET /api/v1/biotime/devicesTerminals.
GET /api/v1/biotime/sync-runsRun history.page, per_page
GET /api/v1/biotime/analytics/summaryDaily rollups over a range.from, to

from and to are local dates (YYYY-MM-DD), matching the way punches are bucketed by day. Photographs and temperature appear in responses only when their display settings are switched on.

The BioTime API contract

For anyone integrating with the same server directly, these are the details that most often go wrong — all verified against a live cloud tenant:

ElementRequired valueIf wrong
Authorization headerJWT <token>never Bearer401, with no useful message
Timezone headere.g. Asia/ManilaTimes come back in the server's default zone; every punch silently shifts
Accessor headerWebSome endpoints refuse the request
Trailing slashRequired on every pathRedirect or 404
Sign-in path/web/oauth/api/v2/user_sign_in/
Success codeZBSY0000 in the bodyA 200 can still carry a failure code
List enveloperows at data.data, count at data.total
Known-broken paths on cloud servers: /api/jwt-api-token-auth/ returns 405, /web/oauth/api/v2/sign_in/ returns 404 (use user_sign_in/), and /web/att/api/v2/employee_schedules/ returns 404 (use schedules/). Biotime never probes these.
Was this guide helpful?

Report a content problem