Connect Lucca to Microsoft Entra ID

Connect Lucca to Microsoft Entra ID

Connect Lucca to Microsoft Entra ID

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

Key takeaways

  • Lucca stays your source of truth; Joinly applies every joiner, mover and leaver to Entra ID automatically.

  • Joinly reads the Lucca directory (users, department and legal entity) and maps those structures to the right Entra ID groups and licences — something you’d otherwise have to script yourself, because Lucca has no native Entra provisioning connector.

  • Joinly reads contract start and end dates, so future-dated hires are provisioned on their actual start date and leavers are disabled on their contract end date.

  • Because Lucca is modular, Joinly reads the shared directory alongside the module data you need, so access is driven by the right field rather than a single flat export.

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

Lucca

Joiner

Mover

Leaver

Microsoft Entra ID (formerly Azure AD)

Quick facts

Source system

Lucca (shared directory across Figgo, Timmi, Pagga)

Target system

Microsoft Entra ID (formerly Azure AD)

Connection method

Lucca API (/api/v3/users, /api/v3/departments) → Entra ID

Supported events

Joiner, mover, leaver (incl. rehire and internal transfer)

Synced attributes

Name, email / UPN, department, job title, manager, legal entity, employee number, contract start and end date

Authentication

Lucca API key or OAuth 2.0, per-tenant {tenant}.ilucca.net instance

Real-time or batch

Frequent sync, multiple times per day

Compliance

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

How does Joinly sync Lucca to Microsoft Entra ID?

Joinly reads each HR change in Lucca through its API and applies it to the matching Entra ID account automatically. The Lucca directory holds the authoritative record for who someone is and where they sit in the organisation, so it is the starting point for each identity action.

  1. Joiner. HR completes the hire in Lucca. Joinly reads the new user, its department, legal entity and manager, and determines the role from those attributes. It then creates the account in Entra ID, assigns the right licences and maps the person into the correct groups — timed to the contract start date rather than the moment HR saved the record.

  2. Mover. When someone changes department, manager or legal entity in Lucca, 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 contract end date recorded in Lucca, Joinly disables the Entra ID account automatically. There are no orphaned accounts left active after someone has left, and you can add a soft-delete grace window before the account is retired for good.

Example: A French consultancy hires a consultant in Lucca with a start date next Monday, in its Paris legal entity and the Advisory department. Joinly reads the contract start date, waits until the start date, creates the Entra ID account, assigns a Microsoft 365 E3 licence and adds the consultant to the Advisory group. When that consultant later transfers to the Data department, Joinly swaps the group membership the same day and leaves the UPN untouched, so sign-in never breaks.

What manual user management costs

Without automation, every account starts as a Lucca notification or a line in a spreadsheet that IT works through by hand. Because Lucca has no native Entra provisioning connector, the alternative is a custom SCIM client you build and maintain yourself with Entra’s API-driven inbound provisioning — which can move attributes but leaves the role-to-group and timing logic to you. Either way, the part that actually decides access still falls to people.

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

  • Permissions that don’t keep up (privilege creep). When movers change department or legal entity, 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 — especially easy to miss when the contract end date lives in Lucca but the account lives in Entra.

Joinly vs. Entra API-driven inbound provisioning

Lucca has no dedicated Entra gallery connector, so the native path is a custom SCIM client built on Entra’s API-driven inbound provisioning. It’s a fine baseline, but it stops short of the part that actually decides access. Here’s how the two compare for a Lucca-driven setup.


Joinly

Entra API-driven inbound provisioning

Source

Reads the Lucca API directly

Custom SCIM client you build against the Lucca API

Role-to-group mapping

Built in, rule-based on department and legal entity

Not included; you script attribute-to-group logic yourself

Future-dated hires

Times account creation to the contract start date

Needs custom date handling in your client

Modular suite fields

Reads the shared directory plus the module data you need

Whatever your client is coded to fetch and map

Licence assignment

Driven by role / attributes

Manual or group-based only

On-premise AD

Yes, own agent plus the native Microsoft agent

Provisioning agent required, limited mapping

Audit trail

Per-action logging tied to the HR source

Limited; depends on what you build

Watch-outs when connecting Lucca to Microsoft Entra ID

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

  • Modular suite, one shared directory. Lucca splits into modules — Figgo for leave, Timmi for time, Pagga for payroll — that share a single directory but keep their own data. A naive read can miss the field that should drive access. Joinly reads the shared directory alongside the module data you need, so the right attribute decides the account, not a flat export.

  • Mapping the department tree and legal entities. Lucca’s department is a hierarchical tree (with parentId and level) and legal entity is a separate axis; neither maps one-to-one to Entra ID groups. Joinly builds explicit mapping rules from that structure to the correct groups and licences, so role drives access rather than manual assignment.

  • Contract start and end dates. Lucca stores contract start and end dates (dtContractStart / dtContractEnd) that can be set in the future. Joinly times account creation to the start date and disablement to the end date, so access is ready on the right day and removed on time.

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

  • API generation change (v3 to v5). Lucca’s v3 API is legacy and v5 is the strategic target; some v3 routes stop responding in September 2026. Joinly maintains the connection against the supported API shape, so your provisioning doesn’t break on a deprecated route.

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 Lucca 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 French consultancy with around 900 employees across three offices, running Lucca — Figgo for leave and Timmi for time — as its HR core while identity provisioning never quite keeps up. There is no native Lucca-to-Entra connector, so a couple of scheduled scripts read the Lucca API and push accounts into Entra ID, but internal transfers between departments and a steady flow of consultants on fixed-term contracts keep breaking them — new joiners are created the moment HR saves the record rather than on their start date, and department moves need a manual group change.

Connect Lucca to Microsoft Entra ID with Joinly and that work disappears. Joinly reads each HR change in the Lucca directory at the source and acts on it automatically: new hires have their account, Microsoft 365 licence and group access ready on their contract start date, transfers between departments swap the right groups the same day, and leavers are disabled on their contract end date with a 30-day soft-delete grace window.

“We used to babysit two scripts that broke every time someone changed department. Now an account is simply ready on the start date, a transfer just swaps the groups, and we can show the auditor exactly which Lucca change created every bit of access.” — Head of IT, consultancy firm

The outcome this setup is designed for: onboarding drops from days to zero touch, transfer errors 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 Lucca 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 Lucca to Microsoft Entra ID

Connect Lucca to Microsoft Entra ID

Installation guide

Follow these steps to connect Lucca 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 Lucca integration in the Joinly marketplace

Open the Joinly marketplace and search for the Lucca 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 Lucca integration.

5. Follow the installation wizard

You may be redirected to integrations.joinly.app. Create an account there and enter your Lucca connection details: your instance URL ({tenant}.ilucca.net) and your API key or OAuth credentials. We only ask for the information needed to establish a successful connection with Lucca. All data is encrypted and stored securely.


Joinly installation wizard for entering Lucca connection details


Enter your Lucca instance URL and API key or OAuth credentials in the wizard.

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 Lucca fields.

Frequently asked questions

  • How do I map the manager? Reference the manager via the managerId on the Lucca user and Joinly resolves the link to the right manager automatically.

  • How do I map the department tree? Map the Lucca department (and its parent hierarchy) and legal entity to your Entra groups; Joinly exposes the tree so you can target the right level.

  • 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 Lucca attributes using Liquid templates


Map Lucca 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 Lucca 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 Lucca flows straight through to Entra ID. Finally, add a threshold workflow with the Entra soft delete action that runs a set period after the contract end date (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 Lucca to Active Directory, or contact support at support@koppelhet.nl to request setup of the Joinly AD Agent.

Frequently asked questions

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

Does Lucca have a native Entra ID connector?
No. Lucca has no dedicated Entra gallery connector, so the native alternative is a custom SCIM client built on Entra’s API-driven inbound provisioning. Joinly reads the Lucca API for you and adds the role-to-group mapping and joiner/mover/leaver logic that a custom client would leave to you.

How are future-dated hires handled?
Joinly reads the contract start date on the Lucca record and times account creation to it, so access is ready on the start date rather than the moment HR saved the record.

Which attributes sync from Lucca to Entra ID?
Name, email / UPN, department, job title, manager, legal entity, employee number, and contract start and end date. Additional Lucca fields can be mapped via Liquid templates.

How does Joinly handle Lucca’s modular suite?
Lucca’s apps (Figgo, Timmi, Pagga) share one directory. Joinly reads that shared directory alongside the module data you need, so access is driven by the right field rather than a single flat export.

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 Lucca to Active Directory guide.

Request installation support