Visma Peple logoFreshservice logo

HR to ITSM

Visma Peple Freshservice integration: requesters per contract and requests on joining and leaving

With an integration between Visma Peple and Freshservice, every employee with a running contract in Peple becomes a requester in Freshservice, with department, job and manager, and KoppelHet submits an onboarding request for a new contract and an offboarding request for an end date. KoppelHet fetches the data through the Visma.net HRM & Payroll Reporting API, which works with exports instead of individual messages.

What the integration does

Organisations that use Peple for HR and payroll and Freshservice for IT often hear about a new contract through a workflow email. With a replacement or temporary contract the service desk therefore does not know until when an account is needed.

  1. KoppelHet starts exports of employees, contracts, org units and users in Peple, with the timestamp of the previous run.
  2. Once the export is ready, KoppelHet fetches the files and compares the fields with what Freshservice already has.
  3. A new contract produces an onboarding request with start date, job and org unit.
  4. Once the business email is in Peple, KoppelHet creates or updates the requester, with department and manager.
  5. An end date produces an offboarding request with the reason; after the last day the requester is deactivated.
Visma Peple → KoppelHet → FreshserviceSOURCEVisma PepleTARGETFreshserviceKoppelHetmapping · logging · monitoringVisma Peple → KoppelHet → FreshserviceSOURCEVisma PepleTARGETFreshserviceKoppelHetmapping · logging · monitoring
Out: Requester with name, business email and job · Org unit as department · Manager from the contract · Onboarding request with contract start date · Offboarding request with end date and reason

What to watch for with Visma Peple and Freshservice

  • The Reporting API delivers exports instead of individual messages. KoppelHet starts an export, passes a callback address and fetches the files once Peple reports they are ready; only then does anything go to Freshservice.
  • A company-level change in Peple makes the next incremental export deliver every employee of that company again. KoppelHet compares each field with the previous state, so Freshservice only receives real changes and the plan's API limit is not used up.
  • Peple allows two full exports per endpoint per tenant per 24 hours. KoppelHet only does the full export for the initial load and for a recovery, and then works with the timestamp of the previous run.
  • The contract holds the manager as a Peple user id, not as an employee number. KoppelHet looks up the matching employee number through the users export and uses it to fill in the requester's manager in Freshservice.
  • An employee can have several contracts and subcontracts in Peple, for example a replacement next to a permanent appointment. Freshservice gets one requester; an extra contract only produces a request if something changes for IT.
  • When a contract is deleted in Peple, it appears in the export as an empty record with only the ids. KoppelHet does not deactivate the requester on that, but adds a note to the open onboarding request, because the contract was often entered by mistake.
  • Peple supplies a reason with an end date. That goes into the separation type of the offboarding form, so Freshservice picks a different kit when a replacement ends than for a dismissal.

This integration is also part of joiner, mover, leaver.

How we build and run it

  • The integration runs on the KoppelHet platform, hosted in a data centre in the EU.
  • Every sync and every error is visible in the functional log; on an error your administrator is notified.
  • A change that cannot go through is not half-applied but queued for another attempt.
  • KoppelHet is ISO 27001 certified. Data travels encrypted and stays on the platform no longer than needed.
  • After go-live we manage the integration and adjust it when your process changes.
  • The integration fits next to your existing integration layer. Only the fields in the design are transferred; the platform keeps no register of its own.

Implementation, architecture and compliance

Implementation and price

This is not an app you switch on. We build the integration for your organisation on our platform, with building blocks we reuse on every project. So it is custom work that does not start from scratch.

A consultant prepares the intake and analyses both systems. We then record the mapping and exceptions field by field, test in the test or acceptance environment and go live at a moment you choose. Costs are a one-off amount for the setup and a monthly amount for platform, monitoring and support.

Price indication · Basic

Leave your work email and you see the price indication right away.

We only use your address to follow up on your question about this integration.

Frequently asked questions

Why not immediately on every change in Peple?

The Reporting API works with exports. A few runs per day give IT enough time for a new contract.

Which permissions does the integration need in Peple?

Only the scopes for employees, contracts, org units and users. Fields with their own scope, such as salary, then stay out of the export.

What happens on Saturday evening?

Peple has maintenance then and returns a 503 with a wait time. KoppelHet waits that time and runs the round afterwards.

Technical details for IT

For those who want to know how it works under the hood: APIs, fields and sources used.

  • Peple through the Visma.net HRM & Payroll Reporting API with Visma Connect (scopes through oauth.developers.visma.com, per tenant). Exports with POST /v1/command/nl/hrm/{employees, contracts, organization/units, users}, fetched with GET /v1/query/nl/hrm/.../{jobId}; incremental with changeTimestampAfter and the returned changeTimestampBefore; optional callbackAddress. Two full exports per endpoint per tenant per 24 hours; 503 with Retry-After during maintenance.
  • Freshservice through the API v2: requesters (primary_email or a phone number required; department_ids, reporting_manager_id, custom_fields; deactivate), POST /api/v2/onboarding_requests and /api/v2/offboarding_requests with form fields such as cf_date_of_joining and cf_separation_type.

Which fields are transferred

The key fields. The full mapping is agreed per customer.

Field in Visma PepleField in FreshserviceNotes
employeeidEigen aanvragersveld (custom_fields)Key
firstname / nickname, prefixbirthname, birthnamefirst_name, last_name
businessemailaddressprimary_email
functionname (contract)job_title
orgunitname (contract)department_ids
manageruserid via users-exportreporting_manager_id
startdate (contract)Onboardingveld cf_date_of_joining
enddate en endreasonname (contract)Offboardingverzoek (cf_separation_type)

Related

Which systems do you want to connect?

Tell us which systems you use and what should happen automatically. Together we define the smallest working solution, with a clear design and a quote before building.