
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.
- KoppelHet reads the GoodHabitz catalogue and creates a training type in BambooHR per course, under a category with the same name as in GoodHabitz.
- Access to GoodHabitz runs through single sign-on; the sign-in environment follows hire and departure from BambooHR.
- KoppelHet fetches completions and test results in windows of at most seven days.
- Every completion becomes a training record on the right employee in BambooHR, with date, hours and test score.
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 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.
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 BambooHR | Field in GoodHabitz | Notes |
|---|---|---|
id (GoodHabitz-content) | Koppeltabel naar het trainingstype-ID | BambooHR has no external ID on a training type |
title | Training type name | |
category.name | Training category | Created if it does not exist yet |
launch_urls.web.complete | linkUrl | |
duration (bijvoorbeeld PT45M) | hours (0,75) | |
user_id (werk-e-mail) | Medewerker via workEmail | The BambooHR ID is the fixed key |
timestamp van Finished of TestPassed | completed (jjjj-mm-dd) | Converted to the Dutch date |
test_score | notes |
Related
Ashby → BambooHR
Ashby to BambooHR integration: hire, changed start date and employment status in BambooHR
BambooHR → 4PS Construct
BambooHR to 4PS Construct integration: employees from BambooHR in the 4PS company of their location
BambooHR → Active Directory
BambooHR to Active Directory integration: accounts in your own domain from HR
BambooHR → ADP iHCM
BambooHR to ADP iHCM integration: salary, bonuses and commissions to Dutch payroll