BambooHR logoGoodHabitz logo

Training and certificates

BambooHR to GoodHabitz integration: GoodHabitz courses as training types, completed training in the BambooHR file

With an integration between BambooHR and GoodHabitz, every GoodHabitz course is a training type in BambooHR, and a completed or passed GoodHabitz course appears by itself as a training record in the employee's file in BambooHR. Who may sign in to GoodHabitz follows BambooHR through your sign-in environment, so a leaver loses access on the last working day.

What the integration does

Organisations that use BambooHR as their HR file and GoodHabitz as their training offering only see training in BambooHR that someone entered by hand. What employees do in GoodHabitz stays there, so for a mandatory course or a performance review HR looks it up in two systems.

  1. KoppelHet reads the GoodHabitz catalogue and creates a training type in BambooHR per course, under a category with the same name as in GoodHabitz.
  2. Access to GoodHabitz runs through single sign-on; the sign-in environment follows hire and departure from BambooHR.
  3. KoppelHet fetches completions and test results in windows of at most seven days.
  4. Every completion becomes a training record on the right employee in BambooHR, with date, hours and test score.
BambooHR → KoppelHet → GoodHabitzSOURCEBambooHRTARGETGoodHabitzKoppelHetmapping · logging · monitoringBambooHR → KoppelHet → GoodHabitzSOURCEBambooHRTARGETGoodHabitzKoppelHetmapping · logging · monitoring
Out: GoodHabitz courses as training types in BambooHR, with category and link · Course duration in hours · Access to GoodHabitz through the sign-in environment
Back: Completed courses as training records · Passed tests with score in the note

What to watch for with BambooHR and GoodHabitz

  • BambooHR only accepts a training record with the ID of an existing training type. KoppelHet therefore first creates a training type per GoodHabitz course and stores which type belongs to which GoodHabitz course, because a type in BambooHR has no external ID.
  • The GoodHabitz catalogue contains courses, but also single lessons, assessments and activities. Only courses become a training type in BambooHR, so the list of trainings stays clear for HR.
  • GoodHabitz gives the completion time in UTC, while BambooHR only stores a date. Someone who completes at half past midnight Dutch time is still on the previous day in UTC; KoppelHet converts to Dutch time first, so the date in the file is right.
  • In BambooHR, HR can make a training type mandatory with a deadline after hire, or renew it after a number of months. HR manages those settings; on a catalogue update KoppelHet only updates name, category and link and leaves them alone.
  • If GoodHabitz removes a course from its offering, BambooHR can only delete that training type once all its training records are gone. KoppelHet therefore deletes nothing and tells HR which types are no longer in GoodHabitz, so completed training stays in the files.
  • GoodHabitz gives the duration as ISO text, such as PT45M; BambooHR has a numeric hours field. KoppelHet converts PT45M to 0.75 hours, so HR can add up in BambooHR how much time someone spends on training.
  • Through the API, BambooHR only shows and writes training the key owner has permission for. KoppelHet works with its own BambooHR user that may manage training settings and training, but cannot see compensation.

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 your sign-in environment decides from BambooHR who can get in.

Do started or failed courses also go to BambooHR?

No. Only completed courses and passed tests become a training record. Progress stays in GoodHabitz.

Can HR see in BambooHR who is missing a mandatory course?

Yes, if HR makes the training type mandatory in BambooHR. Because completions come in from GoodHabitz, that overview is right without manual work.

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 (type Course, Lesson, Assessment or Activity; title, duration, category, launch_urls), /v2/deleted-contents and /v2/milestones (Started, Finished, TestPassed, TestFailed with user_id, content_id and timestamp, grouped per organization_id). Time window 0 to 7 days; 10 requests per minute per key and 20 per IP address. No endpoint for users; sign-in through SAML 2.0.
  • BambooHR through the Training API: GET and POST /api/v1/training/type (only name required; renewable with frequency, required with dueFromHireDate, category, linkUrl), training categories (409 on a duplicate name) and POST /api/v1/training/record/employee/{employeeId} with completed (yyyy-mm-dd) and type required, plus hours, credits, instructor, notes and cost. OAuth scopes training and training.write.

Which fields are transferred

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

Field in BambooHRField in GoodHabitzNotes
id (GoodHabitz-content)Koppeltabel naar het trainingstype-IDBambooHR has no external ID on a training type
titleTraining type name
category.nameTraining categoryCreated if it does not exist yet
launch_urls.web.completelinkUrl
duration (bijvoorbeeld PT45M)hours (0,75)
user_id (werk-e-mail)Medewerker via workEmailThe BambooHR ID is the fixed key
timestamp van Finished of TestPassedcompleted (jjjj-mm-dd)Converted to the Dutch date
test_scorenotes

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.