Connect Loket to Microsoft Entra ID

Connect Loket to Microsoft Entra ID

Connect Loket to Microsoft Entra ID

When someone joins, moves or leaves in Loket, you want that change reflected in Microsoft Entra ID without anyone touching it by hand. To connect Loket to Microsoft Entra ID, Joinly reads each HR change at the source — through the Loket.nl REST API over OAuth 2.0 — and applies it automatically to the right account. Loket stays your source of truth for the salaris- en HR-administratie; Joinly is the engine that keeps every action accurate and traceable.

Key takeaways

  • Loket stays your source of truth; Joinly applies every joiner, mover and leaver to Entra ID automatically over the OAuth 2.0 REST API.

  • Joinly maps Loket’s own structure — werkgever, administratie and dienstverband — to the right Entra ID groups and licences, something a raw API connector can’t do on its own.

  • Loket is a payroll-first system with no native UPN or email attribute, so Joinly generates the UPN, display name and mail from your own rules.

  • One persoon can hold multiple dienstverbanden across employers; Joinly picks the right active employment so a second contract adds access rather than breaking sign-in.

  • Every action is logged for a complete audit trail, aligned with NIS2 and ISO 27001.

Loket

Joiner

Mover

Leaver

Microsoft Entra ID (formerly Azure AD)

Quick facts

Source system

Loket.nl (salaris- en HR-administratie)

Target system

Microsoft Entra ID (formerly Azure AD)

Connection method

Loket.nl REST API (OAuth 2.0) → Entra ID

Supported events

Joiner, mover, leaver (incl. rehire, multiple dienstverbanden)

Synced attributes

Name, email / UPN, department, job title, manager, werkgever, administratie, start and end date

Authentication

OAuth 2.0 authorization code flow, Bearer token from the /token endpoint

Real-time or batch

Frequent sync, multiple times per day

Compliance

ISO 27001, NIS2-ready, GDPR (EU data centre)

How does Joinly sync Loket to Microsoft Entra ID?

Joinly reads each HR change in Loket through the REST API and applies it to the matching Entra ID account automatically. Loket holds the authoritative werknemer and dienstverband record, so it is the starting point for each identity action.

  1. Joiner. The salarisadministrateur enters the new werknemer and dienstverband in Loket. Joinly reads the new employee and employment records through the API, determines the role from attributes like department, function and werkgever, then creates the account in Entra ID, assigns the right licences and maps the person into the correct groups — timed to the start date of the dienstverband.

  2. Mover. When someone changes function, department or werkgever in Loket, Joinly updates their group membership, permissions and licences to match. Access that no longer fits the new position is revoked, so permissions stay aligned with the actual job.

  3. Leaver. On the end date of the dienstverband recorded in Loket, Joinly disables the Entra ID account automatically. There are no orphaned accounts left active after someone has left, and because a persoon can hold more than one dienstverband, access is only removed when the last active employment ends.

Example: A dental practice group runs Loket for payroll across several werkgevers under one administratiekantoor. It hires a dental hygienist with a start date next Monday. Joinly reads the new dienstverband through the API, waits until the start date, creates the Entra ID account, assigns a Microsoft 365 Business licence and adds the hygienist to the Clinic-North group. When that hygienist later picks up a second, part-time dienstverband at another practice in the group, Joinly keeps a single stable UPN and adds the extra group without breaking sign-in.

What manual user management costs

Without automation, every account starts as an email from the salarisadministratie or a line in a spreadsheet that IT works through by hand. Loket exposes a clean REST API, but a raw connector only moves fields across — it has no concept of role-to-group mapping, no UPN rules, and no logic for a person with more than one dienstverband, so the part that actually decides access still falls to people.

  • Onboarding delays. New joiners wait for accounts, licences and group access while a request sits in a queue, losing productive days in their first week.

  • Permissions that don’t keep up (privilege creep). When movers change function or werkgever, old access often stays attached, so people accumulate rights they no longer need.

  • Forgotten offboarding. Accounts that aren’t disabled on time are both a security and audit risk, and unused licences keep costing money — and with multiple dienstverbanden it is easy to disable an account while another contract is still active.

Joinly vs. a raw Loket API connector

Loket’s REST API is a clean, well-documented source, but reading it is only half the job. A generic iPaaS or HRIS connector moves attributes; it stops short of the part that actually decides access. Here’s how the two compare for a Loket-driven setup.


Joinly

Generic Loket API / iPaaS connector

Source

Reads the Loket REST API directly over OAuth 2.0

Reads the Loket REST API

Role-to-group mapping

Built in, rule-based on werkgever / administratie / function

Manual field mapping; no role-to-group out of the box

UPN / email generation

Generated from your rules (Loket has no native UPN)

Passes through whatever field you point at, if any

Multiple dienstverbanden

Resolves the right active employment for the UPN

Wrong or terminated dienstverband can sync

Licence assignment

Driven by role / attributes

Manual or group-based only

On-premise AD

Yes, own agent plus the native Microsoft agent

Not covered; build it yourself

Audit trail

Per-action logging tied to the HR source

Limited

Watch-outs when connecting Loket to Microsoft Entra ID

A few Loket-specific details decide whether this connection stays reliable at scale.

  • Accountant-administered provider structure. In Loket, one administratiekantoor (provider) often spans many client werkgevers, each with its own administratie. The API call has to be scoped to the right providerId and employer, or you sync the wrong company’s people. Joinly pins the connection to your werkgever(s) and administraties, so only the intended population flows to Entra ID.

  • No native UPN or email attribute. Loket is a payroll-first system: it stores name, function and dienstverband, not a userPrincipalName or corporate email. Joinly builds the UPN, display name and mail from your own transformation rules, so every account is consistent and predictable from day one.

  • Multiple dienstverbanden per person. A single persoon can hold more than one dienstverband, sometimes across different werkgevers. A naive rule can sync a terminated or secondary employment to Entra ID and break sign-in. Joinly applies explicit rules to pick the right active dienstverband as the driver of the UPN, while still reflecting the extra access.

  • Mapping Loket structure to Entra groups. Werkgever, administratie, department and function don’t translate one-to-one to Entra ID groups. Joinly builds explicit mapping rules from those structures to the correct groups and licences, so role drives access rather than manual assignment.

  • UPN format with duplicate names. When two employees share a name, a naive UPN rule produces collisions. Joinly applies custom transformation rules — a suffix, werkgever code or controlled tiebreaker — so every UPN is unique and predictable.

Joinly handles each of these by default with custom mapping and transformation.

Always audit-ready

Every account action Joinly performs is logged: who was affected, when it happened, which access changed and which Loket change triggered it. For NIS2 that matters directly: access can be traced back to an authorised HR source rather than an ad-hoc request. Joinly is ISO 27001 certified, runs in an EU data centre in Amsterdam, applies least-privilege by default, and is built to meet NIS2 and ISO 27001.

Example case

Picture a dental and medical practice group with around 350 staff spread across a dozen clinics, all payrolled in Loket under one administratiekantoor. Each clinic is a separate werkgever with its own administratie, and hygienists, assistants and front-desk staff move between locations or pick up a second contract at a sister practice all the time. Every new starter arrives as an email from the salarisadministratie, and IT creates the Entra ID account, licence and group access by hand — so a new assistant often waits until day two or three to log in, and a second dienstverband regularly ends up as a duplicate account.

Connect Loket to Microsoft Entra ID with Joinly and that work disappears. Joinly reads each HR change in Loket at the source and acts on it automatically: new hires have their account, Microsoft 365 licence and clinic group access ready on the start date of the dienstverband, moves between clinics swap the right groups the same day, a second contract just adds access to a single stable UPN, and leavers are disabled on their end date with a 30-day soft-delete grace window.

“People moving between clinics and picking up second contracts used to be what broke every sync. Now an account is simply ready on the start date, a second dienstverband just adds access, and we can show the auditor exactly which Loket change created every bit of access.” — Head of IT, dental and medical practice group

The outcome this setup is designed for: onboarding drops from days to zero touch, duplicate accounts from second contracts stop entirely, and the team can walk into its next NIS2 assessment with a complete, source-backed audit trail.

More than a connector

A standalone Loket to Entra ID connection is a good start, but identity rarely stops at one target. Joinly manages the complete chain from joiner to leaver across all your systems, with logging and governance built in. You review the exceptions; Joinly maintains the chain.

Schedule a demo

Installation manual

Installation manual

Connect Loket to Microsoft Entra ID

Connect Loket to Microsoft Entra ID

Installation guide

Follow these steps to connect Loket to Microsoft Entra ID with Joinly. The entire cloud setup happens in the platform, with no scripts or local software required.

1. Create your account

Go to platform.joinly.app and create your account.

Note: charges may apply for using the platform after the trial period ends.


Joinly account creation screen at platform.joinly.app


Sign up at platform.joinly.app to get started.

2. Connect your Microsoft account

Open platform.joinly.app/settings/provisioning/idp-setup and connect your Microsoft tenant. Select the scopes you need. For provisioning you don’t need any additional scopes.


Joinly identity provider setup screen for connecting a Microsoft Entra tenant


Connect your Microsoft tenant and pick your scopes.

3. Import your existing accounts from Entra ID

Import all existing accounts from Entra ID at platform.joinly.app/settings/provisioning/entra-import. This gives Joinly a baseline of every account that already exists, so it can match people to their current account instead of creating duplicates.

4. Find the Loket integration in the Joinly marketplace

Open the Joinly marketplace and search for the Loket integration.

Don’t see your system listed? Get in touch at support@koppelhet.nl and we’ll help you out.


Joinly marketplace showing available HR integrations


Search the marketplace for the Loket integration.

5. Follow the installation wizard

You may be redirected to integrations.joinly.app. Create an account there and authorise Joinly against the Loket.nl API. Loket uses OAuth 2.0, so you sign in with your Loket account and consent to the connection — Joinly receives an access token from the /token endpoint and refreshes it automatically, with no password stored. Then pick the werkgever(s) and administratie(s) whose people you want to provision. We only ask for the information needed to establish a successful connection with Loket. All data is encrypted and stored securely.


Joinly installation wizard for entering Loket connection details


Authorise Joinly against the Loket API with OAuth and pick your werkgever and administratie.

6. Configure your field mapping

Set up all your field mappings here. Templates support Liquid, so you can build your display name, UPN and other attributes dynamically from Loket fields — which matters because Loket has no native UPN or email.

Frequently asked questions

  • How do I map the manager? Reference the manager on the dienstverband in the mapping and Joinly resolves the link to the right manager automatically.

  • How do I handle multiple dienstverbanden? Pick the primary active employment as the driver for the UPN; Joinly exposes the active dienstverbanden so you can choose the leading one.

  • How do I prevent duplicate usernames? Use the generateUniqueUsername helper, which falls back to the next pattern when the first one is already taken:
    {{ generateUniqueUsername: “{firstName}.{prefix}.{lastName}”, “{initials}.{prefix}.{lastName}” }}


Joinly field mapping screen for Loket attributes using Liquid templates


Map Loket fields to Entra ID attributes with Liquid templates.

7. Configure the scheduled import

At platform.joinly.app/settings/import-configs, configure how often the import from Loket should run.

8. Configure your workflows

Workflows are where Joinly turns each HR change into the right action in Entra ID. Create an onboarding (joiner) and offboarding (leaver) workflow with trigger-based execution, then an Identity updated workflow with a Create/update employee in Entra action so every change in Loket flows straight through to Entra ID. Finally, add a threshold workflow with the Entra soft delete action that runs a set period after the end date of the dienstverband (for example 30 days) to retire accounts safely.


Joinly workflow editor creating an employee onboarding workflow


Create a trigger-based onboarding workflow.


Adding the create or update employee in Entra action to a workflow


Add the create/update action, then set your matching strategy and field mapping.


Adding the Entra soft delete action to remove accounts on employee leave


Add the Entra soft delete action to retire accounts safely.

## AD on-premise support

Need to provision to an on-premise Active Directory as well? See our dedicated guide on connecting Loket to Active Directory, or contact support at support@koppelhet.nl to request setup of the Joinly AD Agent.

Frequently asked questions

Does the Loket to Microsoft Entra ID connection work in real time?
It runs as a frequent sync that updates multiple times per day, so changes in Loket reach Entra ID quickly without waiting for a nightly batch.

How does Joinly authenticate with Loket?
Through Loket’s OAuth 2.0 flow. You authorise Joinly once with your Loket account; Joinly then uses a Bearer access token from the /token endpoint and refreshes it automatically, so no password is stored.

How does Joinly handle a person with more than one dienstverband?
Joinly reads all active dienstverbanden for a person and applies your rules to pick the primary employment as the driver for the UPN, so a second contract adds access without creating a duplicate account or breaking sign-in.

Loket has no email or UPN — how does Joinly create one?
Loket is a payroll-first system, so Joinly generates the UPN, display name and mail from your own Liquid transformation rules, with a uniqueness fallback for duplicate names.

Which attributes sync from Loket to Entra ID?
Name, email / UPN (generated), department, job title, manager, werkgever, administratie, and the start and end date of the dienstverband. Extra Loket fields can be mapped via Liquid templates.

Does Joinly also support AD on-premise or hybrid provisioning?
Yes. Joinly has its own AD on-premise agent and also supports the native Microsoft Entra provisioning agent, so you can provision users to your on-premise AD environment as well. See the Loket to Active Directory guide.

Request installation support