Nexa People
All modules

Integrations is where Nexa People meets the rest of your systems. It gathers every outward-facing connection in one place — a register of external integrations, outgoing webhooks you can test on demand, API keys issued to third-party tools, and the settings that govern them — so a system administrator can see at a glance what talks to your HR data and switch any of it off.

Two deep integrations ship built in. Biometric attendance devices — ZKTeco, Suprema, eSSL and Hikvision units among them — connect through a device register with an on-demand sync, or push punch logs straight to a dedicated Client API authenticated by a Company Token rather than a user login. Either way, raw punches become attendance records without anyone re-typing a time sheet.

The second is a full SAP payroll export. Finance teams map each payroll component to a GL account, charge salary expense to cost centres per department, rename every column to match their SAP field names, and then send a balanced journal voucher for a chosen month — either as a downloadable CSV or JSON file, or posted directly to an HTTP endpoint their SAP exposes. Connecting a new SAP costs configuration, not development.

Everything is built for accountability. Exports are previewed before they are sent, refused outright when mapping gaps would post money to the wrong place, checked against earlier runs so a period is not posted twice by accident, and recorded in a history that keeps the exact bytes delivered — who sent what, when, and what SAP said back.

How Integrations works

One register of external connections

The Connections screen lists every integration your organisation maintains: a name, a type — Biometric, Payroll, Slack, Email, Webhook or Other — the endpoint URL, an API key where one applies, and a connected or disconnected status. It is a plain, auditable register that administrators add to and retire from as systems come and go.

Alongside it sit the Webhooks register and API Keys. Each webhook records the HR event it is meant for, the HTTP method — POST, PUT or GET — the endpoint it calls and an active or inactive status. API Keys is not a register but an issuer: a key is generated by Nexa People, shown once, stored only as a hash, and enforced on every request against the scope it was issued with. Each key carries a name, its scope, when it was last used and when it expires.

Webhooks you can test with one click

Every webhook row has a Fire button that sends a real test payload to the configured endpoint there and then — a small JSON message identifying the event and marking itself as a test. The result comes straight back: OK with the response code, or Failed with whatever went wrong, and the webhook's status is updated to reflect the last outcome. The register keeps the event label each webhook is meant for against its row; the Fire button is how you prove, on demand, that the endpoint behind it still answers.

The Integrations Settings screen records your webhook policy — whether outgoing webhooks are allowed at all, whether payloads should be signed, and whether failed deliveries should be retried — along with an allow-list of IP addresses or CIDR ranges kept as its own tab.

Biometric devices: pull or push

The device register holds each biometric machine with its name, IP address, port (4370 by default), device type, the station it serves, an optional device password and an active flag — passwords stay masked until an administrator chooses to reveal them. A Sync button opens a connection to a ZK device, pulls its attendance logs and writes them into attendance, stamping the device's Last Sync Date so you can see exactly when each machine last reported.

Devices that push instead use the Client API. The Token Settings panel shows your organisation's Company Token and the push URL to point devices or middleware at; a device posts its punch logs with the token in a header — no user account involved. Punches are matched to employees by their punch code, grouped into attendance days along each employee's shift day-end boundary, and the reply summarises what was saved, updated or skipped. Regenerating the token invalidates the old one instantly; existing devices are then re-pointed to the new value.

Telling Nexa People about your SAP

Payroll GL Code Mapping captures everything SAP-specific your finance team has to supply, in three tabs. GL Accounts maps each payroll component to an account number in your chart of accounts, with its debit or credit side shown. Cost Centres assigns a cost centre per department — an employee with a cost centre on their own record overrides it. Document Defaults holds the constants stamped on every journal: company code, document type and currency.

SAP Field Names renames columns per dataset. When your SAP calls the employee number PERNR and the cost centre KOSTL, someone types that here instead of a developer editing an extractor; conventional SAP names are shown as hints, and any column left blank simply ships under its Nexa People name — nothing is dropped. Because the columns are declared up front, mapping can be completed before a single period of data exists.

Connection, format and authentication

SAP Connection decides how the payload leaves Nexa People. Download mode needs nothing from your side and works immediately: the export lands as a file you upload to SAP yourself. Endpoint mode POSTs the same payload to whatever HTTP door your SAP exposes, with a choice of CSV or JSON and authentication by basic credentials, a bearer token, a custom API-key header, or none.

Preview, send, and a history that answers questions

The JV Report Integration screen is a deliberate two-step. Pick a dataset — Employee Master, Attendance Summary, Payroll Detail or the Payroll Journal — and a month, then Preview: a dry run showing the exact rows, the employee count, total debit and credit and whether the journal balances, and every reason the export cannot run yet, such as unmapped GL accounts. A run with gaps is refused outright, and if the period was already sent successfully you must confirm before sending again. Preview never touches your SAP.

Export History records every run: date, dataset, period, status with the HTTP response code, row count, debit and credit totals, and who sent it. A failed endpoint delivery can be retried — re-sending the exact stored payload, never a fresh build — and any run's file can be re-downloaded byte for byte.

Features

A single connections register

Every external system is listed with its type, endpoint and connected status. Administrators add, edit and retire connections in one place, so nothing reaches HR data unnoticed.

Outgoing webhooks with instant testing

Register each webhook against the HR event it is meant for, with a POST, PUT or GET method and an endpoint URL. Fire a real test payload from the row itself, see the response code immediately, and the webhook's status reflects the last result.

Scoped API keys

Issue a credential to an external tool with a Read, Read & write or Full scope that is actually enforced on every request, and revoke it in one click — anything using it stops working immediately. Keys are generated here, stored only as a hash, and always expire.

Biometric device management

Register each machine with IP, port, device type, station and password, keep an active flag per device, and trigger a sync that pulls attendance logs from a ZK device and stamps its Last Sync Date.

Token-authenticated device push

Devices or middleware post punch logs to a dedicated Client API using your organisation's Company Token — no user login. Punches map to employees by punch code and are grouped into attendance days along each shift's day-end boundary.

GL mapping that refuses to guess

Payroll components map to GL accounts with debit and credit sides, departments map to cost centres, and document defaults carry company code, type and currency. Until the mapping is complete, the JV export will not run — a blank is safer than a wrong posting.

Your SAP's column names, not ours

Rename any exported column per dataset to match your SAP, with conventional field names such as PERNR and KOSTL shown as hints. Blank rows ship under their Nexa People names, so nothing silently disappears.

Preview before anything leaves

Every export starts as a dry run: the exact rows, totals, a balance check and a list of gaps blocking the send. Duplicate periods need explicit confirmation, so month-end pressure cannot post the same journal twice unnoticed.

An export history with retry

Each run records its period, row count, debit and credit totals, sender and SAP's response. Failed endpoint deliveries retry with the identical stored payload, and every file can be re-downloaded exactly as it was sent.

Used by: System administrators.

Works with the rest of Nexa People

The biometric side writes straight into Attendance: punches pulled from a device or pushed through the Client API are matched to employees by the punch code on their record and upserted as attendance days, split along the day-end boundary of each employee's shift. Devices attach to the stations defined in the Organization module, and the same device panel is surfaced inside Attendance and the Organisation settings so administrators manage machines where they already work.

The SAP side reads from the modules finance cares about. The Employee Master dataset comes from Employee Management, Attendance Summary from Attendance, and Payroll Detail and the Payroll Journal from Payroll; cost-centre mapping is keyed to the departments maintained in Organization, with an employee's own cost centre taking precedence. Access follows the shared permission model — the GL mapping and JV export screens are enforced against view and update permissions from your role templates, and every run is recorded against the sending user's account.

Frequently asked questions

How do biometric devices get attendance into Nexa People?

Two ways. You can register a device by IP and port and trigger a sync that pulls its attendance logs directly from a ZK machine, or the device — or middleware in front of it — can push punch logs to the Client API using your organisation's Company Token in a request header. In both cases punches are matched to employees by punch code, grouped into attendance days along each shift's boundary, and the device's Last Sync Date is stamped.

What happens if we regenerate the Company Token?

The old token stops working immediately and a new one is issued. Any device or middleware still pointing at the previous token must be re-pointed to the new value before its pushes are accepted again — the screen warns you before regenerating for exactly this reason.

Do we need a direct connection to SAP to use the export?

No. In download mode the export is generated as a CSV or JSON file you upload to SAP yourself, and it works with no connection details at all. When you are ready, switch the destination to an HTTP endpoint — an OData service, CPI iFlow or middleware — with basic, bearer-token or custom-header authentication, and the same payload is posted directly.

What stops a wrong or unbalanced journal reaching SAP?

Several deliberate guards. Every export begins as a preview that sends nothing: it shows the exact rows, employee count, debit and credit totals and whether the journal balances. If GL accounts are unmapped or other gaps exist, the run is refused outright rather than sent half-right. And if the same dataset and period were already delivered successfully, the system asks you to confirm before sending again.

A delivery to SAP failed — can we re-send it?

Yes. Export History keeps the exact payload of every run, and a failed endpoint delivery has a Retry action that re-sends those stored bytes — never a freshly rebuilt file, so what SAP receives on retry is identical to what was attempted. For download-mode runs, the file is simply re-downloaded from history.

How do we know a webhook actually works?

Fire it. Each webhook row has a Fire button that sends a test payload to the configured endpoint using the webhook's own method and shows the response code on the spot. The row's status updates to reflect the last result, so a broken or moved endpoint shows up in the register the moment you test it — fire the test again whenever you want fresh proof.

Who manages the Integrations module?

System administrators. The registers of connections, webhooks and API keys are administrative screens, and the SAP configuration and export are additionally enforced against the form-level view and update permissions in your role templates — so seeing the mapping and actually sending a journal can be granted separately. Every export run records who triggered it.

See Integrations in your own setup

We'll walk you through the modules you care about and email you login credentials to try it yourself.