FaGoodHabitz logo

Training and certificates

Factorial to GoodHabitz integration: GoodHabitz trainings in the Factorial training module, completed training on the employee

With an integration between Factorial and GoodHabitz, every GoodHabitz training in use is an external training in Factorial, and a completed GoodHabitz training then appears with date and time spent on the right employee in Factorial. Who may use GoodHabitz follows Factorial through your sign-in environment.

What the integration does

Organisations that use Factorial for HR and training, and GoodHabitz as online offering, keep two training overviews. Factorial holds classroom and internal trainings, while what employees complete at GoodHabitz is only visible in GoodHabitz reports.

  1. When someone first completes a particular GoodHabitz training, KoppelHet creates that training in Factorial, with a class and a self-paced session.
  2. KoppelHet fetches completed trainings and tests, period by period, and looks up the employee by work email in Factorial.
  3. The employee is added to the session without notification and their attendance is set to completed.
  4. KoppelHet sets the actual completion date from GoodHabitz on the participation.
  5. Access to GoodHabitz runs through single sign-on and follows hire and departure in Factorial.
Factorial → KoppelHet → GoodHabitzSOURCEFactorialFactorialTARGETGoodHabitzKoppelHetmapping · logging · monitoringFactorial → KoppelHet → GoodHabitzSOURCEFactorialFactorialTARGETGoodHabitzKoppelHetmapping · logging · monitoring
Out: GoodHabitz training as external training with class and session · Participation of the employee, without notifying the employee · Access to GoodHabitz through the sign-in environment
Back: Completed trainings with completion date · Time spent per training in hours

What to watch for with Factorial and GoodHabitz

  • For a new training Factorial asks for a name, description, year, attachments and whether the training is external. KoppelHet creates GoodHabitz trainings as external, with GoodHabitz as provider and the content ID as code, so HR sees them in Factorial separately from internal trainings.
  • In Factorial an employee is not linked to a training directly but to a session, and a session is only visible in the app if it sits under a class. KoppelHet creates one class with one self-paced session per GoodHabitz training, and adds completions there.
  • When adding someone to a session Factorial can notify the employee. KoppelHet switches that off, because the employee has already done the training and would otherwise get an invitation for something behind them.
  • When KoppelHet sets an attendance to completed, Factorial counts the session duration as time spent. GoodHabitz gives the duration as ISO text such as PT45M; KoppelHet converts it to 0.75 hours on creation, so the training hours in Factorial are right.
  • A completed attendance does not yet say when the training was finished. KoppelHet therefore sets the timestamp of the GoodHabitz completion separately as completion date on the participation, even when the period is only fetched days later.
  • Factorial can record a validity in years per training and calculates an expiry date per employee from it. For GoodHabitz trainings that are mandatory every year, such as information security, KoppelHet sets that validity, so HR sees in Factorial who has to retake the training.
  • GoodHabitz returns completions per period of at most seven days and ten requests per minute per key. KoppelHet keeps track of how far it has fetched and only creates a training in Factorial for GoodHabitz content someone actually completed, not for the whole catalogue.

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

Does the integration create accounts in GoodHabitz?

No, the GoodHabitz API cannot do that. Access runs through single sign-on, and who may sign in there follows Factorial.

Does the whole GoodHabitz catalogue go to Factorial?

No, only trainings someone has completed. Putting the whole catalogue in Factorial as an offering can follow later as an extension.

Do we need the Factorial training module for this?

Yes. Trainings, sessions and participations belong to that module; without it there is no place in Factorial for completed training.

Technical details for IT

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

  • GoodHabitz API v2 with an API key from GoodHabitz support: GET /v2/contents, /v2/deleted-contents, /v2/milestones (Finished, TestPassed, TestFailed) and /v2/progress (test_score). Time window 0 to 7 days; 10 requests per minute per key and 20 per IP address. No endpoint to create users; access through SSO with SAML 2.0.
  • Factorial API (version 2026-10-01) with OAuth 2.0: POST /resources/trainings/trainings (name, description, external, external_provider, code, year, attachments, total_duration, valid_for), training_classes, POST /resources/trainings/sessions (training_id, training_class_id, schedule selfpaced, duration in hours), session_access_memberships/bulk_create (employee_ids, notify false), session_attendances/bulk_update (status completed) and PUT /resources/trainings/training_memberships/{id} (training_completed_at).

Which fields are transferred

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

Field in FactorialField in GoodHabitzNotes
content idcode van de trainingFixed key to find the training again
title en descriptionname en description
GoodHabitzexternal = true, external_provider
duration (ISO-8601, bijvoorbeeld PT45M)duration van de sessie in uren (0.75)
user_id (werkadres)employee_idLooked up by email in Factorial
Finished of TestPassedsession attendance status completed
timestamptraining_completed_at
deleted-contentsStatus van de training in Factorial bijwerken

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.