Account & billing · 6 min read

Connecting Zeitflex to other systems: API keys and webhooks

A till system that wants to know the week’s staffing. A payroll bureau that should find out when the month has been closed. Your own report that reacts to every clock-in. For this, there are two tools under Settings → API & webhooks. This page says honestly what each of them does today — and where the interface deliberately stops.

Who sees the page and what it costs

API keys and webhooks are part of the Pro plan. On the Free plan and the Starter plan, the tab shows a note about the subscription instead of the setup. During the trial, Pro applies, so this feature does too. Only owners and managers may use it; employees do not see the tab. What else distinguishes the plans is described in Plans and prices.

Webhooks: Zeitflex calls your system

A webhook is an HTTPS address in your system that Zeitflex calls as soon as something has happened. This is how you set one up:

  1. Open Settings → API & webhooks.
  2. Under New webhook URL (HTTPS only), enter your system’s address. Zeitflex does not accept addresses without HTTPS.
  3. Select at least one event and create the endpoint.
  4. Copy the signing secret (starts with whsec_) immediately. It is shown exactly once and cannot be retrieved afterwards. If it is lost, create the endpoint again.

Later, you can change the address and events, temporarily switch the endpoint off or delete it. Each of these steps is recorded in the business’s log.

The five events

Event When it is triggered What is in data
time_entry.createdClock-in, start or end of a break in the browser (ending a break reports the new work entry that begins after it), clock-in at the wall terminal (including when delivered later after being offline), late entry by managementEntry ID, person ID, start, source; in the browser and for late entries also the type (work or break); for late entries also the end and nachgetragen: true; for later delivery from the terminal also offlineNachgeliefert: true and whether the PIN was checked
payroll_period.lockedA month was closed and lockedPeriod ID, year, month, number of line items, time of locking
absence.approvedManagement approved an absenceRequest ID, person ID, type, from, to, half-day
absence.cancelledAn absence was withdrawn or reversed by managementas above, plus weg (ZURUECKZIEHEN or RUECKNAHME) and the previous status
shift_plan.publishedA shift plan was published for a weekMonday of the week, number of shifts, number of open shifts

Each delivery is a JSON document with id, type, createdAt, organizationId and the data block. What is never in it: names, wages, premiums, GPS coordinates, the reason text of a reversal (for a sick note it may contain health data) and files. Your system receives IDs and works with what it already knows about the person.

How to verify authenticity

Every delivery carries the header entry Stempo-Signature: t=<Unix seconds>,v1=<hex>. The v1 value is an HMAC-SHA256 over the string <t>.<raw JSON text> with your signing secret as the key. Recalculate it on your side and discard anything that does not match. The header name dates from the time when the product was called Stempo, and deliberately stays that way — renaming it would silently break every existing integration. The user agent is accordingly Stempo-Webhooks/1.0.

What happens if your system does not respond

Zeitflex attempts delivery three times: immediately, after 0.5 seconds and after 2 seconds. Each attempt is aborted after 5 seconds. If your system responds with a 4xx class error (except 408 and 429), there is no further attempt — the request is considered permanently rejected. Zeitflex then records the failed attempt in the log, and that is it.

An unreachable endpoint changes nothing about the data: the clock-in, approval or month-end close is saved before the first delivery attempt begins. The response to the person who is clocking in or approving at that moment may, however, be delayed by the duration of the delivery attempts — Zeitflex waits for the three attempts before it responds.

API keys: what works today and what does not

Under New API key, you assign a name (2 to 60 characters) and choose Read, Write or both. The key starts with stpo_, is shown once and never again — Zeitflex only stores a SHA-256 hash and, for recognition, the prefix stpo_ together with the first eight characters after it. A key can be revoked at any time; creation and revocation are recorded in the log.

If you want to bring data into Zeitflex, use the import under Import (see Importing data from Excel or another program). If you want to get data out, use the CSV export from the Starter plan or the DATEV export on the Pro plan (see Setting up the DATEV export).

What the interface deliberately does not do

  • It does not provide location data. Whether coordinates are stored at all when clocking in/out is decided by the switch under Settings → GPS & privacy; without it, no coordinates are stored, whichever route is used to clock in/out. More in Location when clocking in/out.
  • It does not send health data: medical certificates and the reason text of a reversal stay within the business.
  • It does not send pay or remuneration data. Zeitflex only prepares payroll; the payroll itself is run by your payroll bureau or your tax adviser.
  • It does not offer a connection to Google or Outlook calendars via OAuth. For the shift plan in your calendar, there is the per-person subscription under Settings → Calendar.

Still stuck?

Ask Support — or read on under Plans and prices and Location when clocking in/out.

Last checked on . We check every article against the application — if something no longer matches, that is a bug and not a difference of opinion.

Dieser Artikel auf Deutsch

Was this helpful?

Related articles

Connecting Zeitflex to other systems: API keys and webhooks · Zeitflex