Leestijd
13 min

Workable en Carerix koppeling, wat een assessmenttool moet bouwen

Wat moet een assessmenttool bouwen voor een koppeling met Workable of Carerix?

Een assessmentaanbieder die wil koppelen met Workable of Carerix bouwt vijf onderdelen. Veilige authenticatie met API-tokens, een vaste mapping tussen kandidaat- en vacature-ID's, uitnodigingen die automatisch vertrekken zodra een kandidaat de assessmentfase in gaat, resultaten die terugkomen op het kandidaatprofiel in het ATS, en ondertekende, idempotente webhooks. Daaromheen moet de gegevensverwerking voldoen aan de AVG en, zodra er AI in de scoring zit, aan de EU AI Act.

Dit artikel is een technisch naslagwerk voor de developers die de koppelingslaag bouwen. Het gaat over authenticatie, ID-mapping, het starten van uitnodigingen, het synchroniseren van resultaten, webhookbeveiliging en gegevensverwerking volgens de AVG. Waarom een goede ATS-koppeling voor skilltests zo veel uitmaakt voor recruiters, lees je in een apart artikel.

Welk ATS je ook kiest, de levenscyclus van een koppeling is steeds dezelfde.

  1. Inrichten. Credentials uitwisselen en per ATS-fase een assessmenttemplate koppelen
  2. Uitnodigen. Een fasewijziging in het ATS stuurt de kandidaat een assessmentuitnodiging
  3. Afronden. De kandidaat maakt het assessment op het platform van de aanbieder
  4. Resultaten terugsturen. De aanbieder pusht de resultaten, of het ATS haalt ze op via polling
  5. Terugschrijven. Scores en status komen op het kandidaatrecord in het ATS

Het ATS is de bron van waarheid voor alle kandidaat- en vacaturegegevens. Jouw platform beheert alleen de status van de assessmentsessie en kopieert geen kandidaatprofielen.

Wat je vooraf geregeld moet hebben

Controleer deze punten voordat je een regel code schrijft.

  • Een publiek bereikbaar HTTPS-endpoint voor inkomende webhooks (geen self-signed certificaten in productie)
  • Duurzame opslag waarin je de Workable candidate_id, job_id en je eigen invitation_id bewaart en bij elk binnenkomend event kunt opzoeken
  • Een ontwerp voor toestemming. Kandidaten geven expliciet toestemming voordat persoonsgegevens naar jouw platform gaan, en opnieuw voordat resultaten worden teruggedeeld
  • Een vastgelegd bewaarbeleid volgens artikel 5, lid 1, onder e van de AVG, dat bepaalt hoe lang assessmentdata na een aannamebesluit bij jou blijft staan
  • Aanmelding bij het Workable Partner Program (Assessment Provider-track) of het Carerix Integration Partner Program, voordat je productiecalls doet

Authenticatie en API-tokens

Workable

De Assessment Provider API van Workable werkt met een statisch access token in de HTTP-header Authorization. Volgens de developerdocumentatie 'Assessment Providers' van Workable (workable.readme.io) wordt elke call van Workable naar jouw endpoint op deze manier geauthenticeerd.

Authorization: Bearer <your_access_token>

Je krijgt dit token zodra je koppeling via het partnerprogramma van Workable is ingericht. Vervang het token minstens elke 90 dagen, en direct bij een vermoeden van misbruik. Bewaar het in een secrets manager (AWS Secrets Manager, HashiCorp Vault of vergelijkbaar) en niet in omgevingsvariabelen op gedeelde servers.

Valideer het token aan jouw kant bij elk request, nog voordat je een payload verwerkt. Geef 401 Unauthorized terug bij een ontbrekend of ongeldig token. De foutafhandeling van Workable verwacht statuscodes als 400, 401, 409 en 422 met een gestructureerde foutmelding.

{
  "error": {
    "code": "INVALID_TOKEN",
    "message": "The provided bearer token is not recognized."
  }
}

Carerix

Carerix bouwt koppelingen via een officieel partnerprogramma en stelt voor goedgekeurde partners een GraphQL API beschikbaar. Het precieze authenticatiemodel (OAuth 2.0 client credentials of een API-key) wordt bevestigd tijdens de partneronboarding. Bouw je een nieuwe connector, begin dan bij de pagina 'Become an Integration Partner' van Carerix. Daar staan het aanmeldproces en de verwachte doorlooptijd.

Ga er in de praktijk van uit dat je GraphQL-mutations gebruikt om te schrijven (een assessmentuitnodiging aanmaken, een kandidaat bijwerken) en queries om te lezen (kandidaat- of vacaturegegevens ophalen). Al het verkeer loopt minimaal via TLS 1.2.

Tokenbeveiliging bij beide ATS'en

  • Vraag zo min mogelijk rechten aan. Laat de API scopes toe, kies dan alleen het lezen van kandidaten en fases en het schrijven van resultaten
  • Log nooit het volledige token. Toon in diagnostische output alleen de laatste 4 tekens
  • Controleer de echtheid van callbacks met een gedeeld geheim of een HMAC-handtekening (zie het hoofdstuk over webhooks)

Veldmapping van kandidaat- en vacature-ID's

Een strakke mapping voorkomt verweesde assessmentsessies en dubbele uitnodigingen. Deze ID-paren moet je opslag altijd bijhouden.

Veldmapping in Workable

Workable-veldVeld in jouw platformToelichting
candidate.idapplicant_idPrimaire sleutel voor alle kandidaatacties
job.shortcoderole_idVerwijst naar het assessmenttemplate voor die functie
stage.nametrigger_stageDe fase die de uitnodiging start
invitation_id (jouw veld)session_idOpslaan en in elke resultaatpayload meesturen

Voor de uitnodiging heb je alleen de velden nodig om het assessment te versturen, namelijk first_name, last_name, email en language. Stuur velden als cover_letter, resume_url, cv-tekst of antwoorden op eigen screeningsvragen niet door, tenzij je koppeling ze echt nodig heeft en de kandidaat voor dat delen toestemming heeft gegeven.

Veldmapping in Carerix

In het GraphQL-schema van Carerix heten de vergelijkbare objecten Candidate en Vacancy. Map ze zo.

  • Candidate.id naar je applicant_id
  • Vacancy.id naar je role_id
  • Een eigen veld of tag op het Candidate-object voor de invitation_id die jouw platform teruggeeft

Carerix gebruikt GUID's in tekstvorm als objectidentificatie. Laat de exacte veldnamen bevestigen tijdens de partneronboarding, want het GraphQL-schema verandert mee met platformupdates.

Zo min mogelijk persoonsgegevens onderweg

Stuur alleen wat nodig is. Voor de uitnodiging is email vereist, met optioneel first_name en preferred_language. Al het andere (geboortedatum, adres, nationaliteit, antwoorden op eigen vragenlijsten) blijft in het ATS. Jouw platform slaat die velden nooit op, ook niet als ze in de inkomende payload staan.

Assessments starten vanuit een fasewijziging in het ATS

Fasewijzigingen herkennen in Workable

Workable ondersteunt abonnementen op kandidaatevents via het endpoint /subscriptions. Je registreert een webhook met filters op fasewijzigingen. Met de subscription args filter je op eventtype, zodat je alleen candidate_moved of een vergelijkbaar event voor faseovergangen ontvangt en niet elke kandidaatactiviteit.

Gaat een kandidaat naar de ingestelde assessmentfase, dan stuurt Workable een POST naar je geregistreerde callback-URL. De payload bevat minimaal dit.

{
  "event_type": "candidate_moved",
  "event_id": "evt_01HXYZ",
  "candidate": {
    "id": "cand_7890",
    "name": "Alex van der Berg",
    "email": "[email protected]"
  },
  "job": {
    "id": "job_4567",
    "shortcode": "DEV001"
  },
  "stage": {
    "name": "Assessment",
    "previous_name": "Phone Screen"
  }
}

Bij dit event zoekt je service het assessmenttemplate op dat aan job.shortcode hangt, maakt een uitnodiging aan en slaat de invitation_id op bij candidate.id + job.id. Antwoord binnen 5 seconden met 200 OK en doe het zware werk asynchroon.

Verplichte parameters bij het aanmaken van een uitnodiging

Je call voor het aanmaken van een uitnodiging accepteert minimaal deze velden.

  • applicant_id (gemapt vanaf het kandidaat-ID in het ATS)
  • role_id (gemapt vanaf het vacature-ID in het ATS)
  • email
  • language (standaard en als de taal onbekend is)
  • assessment_template_id (bepaald via je configuratie van fase naar template)

Deze optionele parameters wil je per klant kunnen instellen.

  • allow_retake (boolean, standaard false)
  • proctoring_enabled (boolean)
  • expiry_hours (integer, bijvoorbeeld 72)

Heruitnodigingen en annuleringen

Wordt de kandidaat uit de assessmentfase teruggezet of afgewezen, dan doet je koppeling drie dingen.

  1. Controleren of er een open invitation_id bestaat voor het paar candidate_id + job_id
  2. De uitnodiging annuleren of laten verlopen via de interne API van je platform
  3. De annulering loggen met een tijdstempel

Komt de kandidaat later opnieuw in die fase, maak dan een nieuwe invitation_id aan en archiveer de oude. Hergebruik nooit een uitnodigings-ID. Dwing dat af met een unique constraint in de database.

Assessmentresultaten ontvangen

Push of pull

Ondersteun zo mogelijk beide. Push (jouw platform stuurt resultaten met een POST naar een callback die bij Workable is geregistreerd) heeft de voorkeur omdat het sneller is, maar sommige ATS-inrichtingen werken met polling. Volgens de Assessment Providers-documentatie van Workable kunnen resultaten via een callback of via polling binnenkomen.

De resultaatpayload

Een standaard resultaatpayload van jouw platform bevat minimaal dit.

{
  "event_type": "assessment_completed",
  "event_id": "res_evt_9921",
  "invitation_id": "inv_3344",
  "attempt_id": "att_5566",
  "candidate_id": "cand_7890",
  "job_id": "job_4567",
  "status": "completed",
  "completed_at": "2026-09-09T14:33:00Z",
  "scores": {
    "overall": 72,
    "dimensions": {
      "cognitive_ability": 68,
      "conscientiousness": 81,
      "verbal_reasoning": 74
    }
  },
  "report_url": "https://app.assessmentplatform.com/reports/att_5566"
}

Gebruik voor het veld status een vaste woordenlijst, namelijk completed, abandoned, expired en failed. Het ATS vertaalt die naar eigen labels. Je contract mag nooit leunen op vrije tekst als status.

Resultaten terugschrijven naar het ATS

Voor Workable stuur je de resultaatpayload met een POST naar de callback-URL die bij het aanmaken van het assessment is meegegeven, of via het resultatenendpoint van de Assessment Provider API. Workable toont de scores daarna op het kandidaatprofiel. Zo werkt het ook bij aanbieders als Test Partnership, waarvan de resultaten op het Workable-profiel van de kandidaat verschijnen.

Voor Carerix werk je het kandidaatrecord bij met een GraphQL-mutation, via een eigen assessmentveld of een gestructureerde notitie met de scores en de rapport-URL.

Webhooks instellen en beveiligen

Abonnementen registreren in Workable

Registreer je callback-URL via het endpoint /subscriptions van Workable. Volgens de webhookdocumentatie van Workable filteren de subscription args de eventstroom. Stel ze dus zo in dat je alleen events ontvangt die voor jouw koppeling relevant zijn, zoals fasewijzigingen bij vacatures waar je assessmenttemplate actief is.

Handtekeningen controleren

Elke webhook van jouw platform naar het ATS en elke callback van het ATS naar jouw endpoint moet ondertekend zijn. Gebruik daarvoor HMAC-SHA256.

import hmac
import hashlib

def verify_signature(payload_bytes: bytes, received_sig: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode("utf-8"),
        payload_bytes,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, received_sig)

Stuur een header X-Webhook-Timestamp mee en weiger payloads waarvan het tijdstempel ouder is dan 5 minuten. Zo voorkom je replay-aanvallen.

Retries en idempotentie

Workable en de meeste andere ATS'en proberen mislukte webhooks opnieuw af te leveren. Je endpoint moet daarom idempotent zijn. Hetzelfde event_id twee keer verwerken geeft dezelfde uitkomst, zonder bijeffecten zoals dubbele uitnodigingen of dubbel weggeschreven resultaten.

Zo pak je dat aan.

  1. Schrijf bij ontvangst het event_id weg in een deduplicatietabel met een TTL van minstens 24 uur
  2. Bestaat het event_id al, geef dan direct 200 OK terug zonder te verwerken
  3. Mislukt een uitgaande levering (jouw platform pusht resultaten), gebruik dan exponential backoff. Begin bij 5 seconden, verdubbel tot maximaal 5 minuten en stop na 7 pogingen
  4. Zijn alle pogingen op, zet het bericht dan in een dead-letter queue en alarmeer het operationele team
curl -X POST https://callback.workable.com/assessment-results \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-Signature: sha256=<hmac_value>" \
  -H "X-Webhook-Timestamp: 2026-09-09T14:33:01Z" \
  -d '{
    "invitation_id": "inv_3344",
    "candidate_id": "cand_7890",
    "status": "completed",
    "scores": { "overall": 72 }
  }'

Voorbeeldrequests en -responses

Beschikbare assessmenttemplates opvragen

curl -X GET https://api.assessmentplatform.com/v1/templates \
  -H "Authorization: Bearer <your_access_token>"

Het antwoord ziet er zo uit.

{
  "templates": [
    { "id": "tmpl_001", "name": "Cognitive + Personality Bundle", "language": "en" },
    { "id": "tmpl_002", "name": "Logistiek instapniveau NL", "language": "nl" }
  ]
}

Een uitnodiging aanmaken

curl -X POST https://api.assessmentplatform.com/v1/invitations \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "applicant_id": "cand_7890",
    "role_id": "job_4567",
    "template_id": "tmpl_001",
    "email": "[email protected]",
    "first_name": "Alex",
    "language": "en",
    "expiry_hours": 72
  }'

Het antwoord ziet er zo uit.

{
  "invitation_id": "inv_3344",
  "status": "pending",
  "invitation_url": "https://app.assessmentplatform.com/start/inv_3344",
  "expires_at": "2026-09-12T14:33:00Z"
}

Minimale webhookhandler in Node.js

const crypto = require("crypto");
const express = require("express");
const app = express();

app.use(express.raw({ type: "application/json" }));

app.post("/webhooks/ats", (req, res) => {
  const sig = req.headers["x-webhook-signature"];
  const ts = req.headers["x-webhook-timestamp"];

  const age = Date.now() - new Date(ts).getTime();
  if (age > 5 * 60 * 1000) return res.status(400).send("Timestamp too old");

  const expected = crypto
    .createHmac("sha256", process.env.WEBHOOK_SECRET)
    .update(req.body)
    .digest("hex");

  if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig.replace("sha256=", "")))) {
    return res.status(401).send("Invalid signature");
  }

  const event = JSON.parse(req.body);
  // Idempotency check, then enqueue for processing
  res.sendStatus(200);
});

Testchecklist en troubleshooting

Loop elk scenario door in een stagingomgeving voordat je productieverkeer aanzet.

TestgevalVerwachte uitkomst
Geldig token, correcte payload200 OK, uitnodiging aangemaakt
Verlopen of ongeldig token401 Unauthorized, geen uitnodiging aangemaakt
Kandidaat-ID niet gevonden in het ATS404 Not Found, fout gelogd
Vacature of fase niet gekoppeld aan een template422 Unprocessable Entity, alert verstuurd
Dubbel event_id ontvangen200 OK, geen dubbele uitnodiging
Webhookhandtekening klopt niet401 Unauthorized, request geweigerd
Push van resultaten loopt vast (5xx van het ATS)Opnieuw proberen met exponential backoff
Kandidaat afgewezen tijdens het assessmentUitnodiging geannuleerd, sessie verlopen
Resultaatevent komt binnen vóór het uitnodigingsrecord30 seconden in de wachtrij houden, daarna opnieuw opzoeken

Troubleshooting per HTTP-status

StatusSymptoomWaarschijnlijke oorzaakOplossing
401Alle requests geweigerdOngeldig of vervangen bearer tokenNieuw token aanmaken via de partneromgeving en de synchronisatie van de secrets manager controleren
404Uitnodiging aanmaken misluktcandidate_id of job_id staat niet in je mappingopslagNagaan of de webhook het fasewijzigingsevent heeft ontvangen en de deduplicatietabel op gemiste events controleren
409Dubbele uitnodiging geweigerdDezelfde candidate_id + job_id heeft al een actieve uitnodigingDe bestaande eerst annuleren, of de bestaande invitation_id teruggeven
422Validatiefout in de payloadVerplicht veld ontbreekt of ongeldige enum-waardeDe foutmelding per veld bekijken en de status-woordenlijst naast de specificatie leggen
5xxCallback voor resultaten faaltATS-endpoint onbereikbaar of verkeerd ingestelde callback-URLPartnersupport van Workable inschakelen en de resultaten in de dead-letter queue houden tot het is opgelost

Staan mislukte leveringen na 24 uur nog in de dead-letter queue, dan heeft je beheeromgeving een knop nodig om ze per invitation_id handmatig opnieuw te versturen, plus een export van openstaande resultaatpayloads om ze zo nodig handmatig in te voeren.

Privacy, AVG en de EU AI Act

Niet meer data dan nodig

Om een uitnodiging aan te maken hoeven maar drie velden van het ATS naar je assessmentplatform, namelijk email, first_name (voor de aanhef) en preferred_language. Al het andere blijft in het ATS. Kan je platform niet zonder extra velden, leg dan eerst de grondslag vast volgens artikel 6 van de AVG voordat je die overdracht aanzet.

Sla geen ruwe cv-tekst, antwoorden op screeningsvragen of beoordelingsnotities van recruiters op. Die velden kunnen in de webhookpayloads van sommige ATS'en zitten. Filter ze eruit bij binnenkomst, voordat ze je database bereiken.

Momenten van toestemming

Leg twee toestemmingsmomenten vast in je audittrail, elk met een UTC-tijdstempel.

  1. Voordat de uitnodigingsmail vertrekt. De kandidaat weet dat er een extern assessment komt en heeft geen bezwaar gemaakt, of heeft expliciet ingestemd. Dat hangt af van de grondslag die je klant gebruikt
  2. Voordat resultaten terug naar het ATS gaan. De kandidaat weet dat de scores zichtbaar worden voor het wervingsteam

Leg naast het tijdstempel ook vast hoe de toestemming is gegeven, bijvoorbeeld via een toestemmingsveld in het ATS of een vinkje in het product.

Dataopslag en bewaartermijnen

Werk je voor werkgevers in de EU, sla de persoonsgegevens uit je koppeling dan binnen de EU op. Selection Lab slaat bijvoorbeeld alle persoonsgegevens op in Frankfurt en haalt met lokale taalmodellen persoonlijke informatie uit gespreksdata voordat die bij een scoringsmodel komt. Dat patroon is het kopiëren waard. Laat elk AI-onderdeel in de scoring waar technisch mogelijk werken met geanonimiseerde of gepseudonimiseerde input.

Stel bewaartermijnen per klant in en laat ze automatisch handhaven. Een redelijke standaard is 12 maanden na afronding van het assessment, waarna de gegevens worden verwijderd of geanonimiseerd. Klanten in gereguleerde sectoren willen soms een kortere termijn. Bouw de termijn daarom als instelbare parameter en niet als vaste waarde in de code.

EU AI Act en auditlogging

Gebruikt een onderdeel van je assessmentplatform een AI-model om scores of aanbevelingen te genereren, dan valt het in de regel onder de AI-systemen met een hoog risico uit bijlage III van de EU AI Act (werving en selectie). Dat vraagt om deze maatregelen.

  • Elke scoring loggen met de modelversie, de geanonimiseerde inputkenmerken en de score
  • Per scoredimensie een begrijpelijke uitleg die een recruiter of kandidaat kan opvragen
  • Vastleggen dat het model vóór ingebruikname is getest op bias tussen groepen met beschermde kenmerken
  • Een conformiteitslog bijhouden waar je functionaris gegevensbescherming bij kan

Selection Lab combineert daarom transparante scorerapporten per dimensie met uitlegbare AI-uitkomsten die recruiters direct in de kandidaatweergave van hun ATS bekijken. Die herleidbaarheid is wat compliance met de EU AI Act op koppelingsniveau concreet vraagt. Elke automatische score die een aannamebesluit beïnvloedt, moet van begin tot eind te controleren zijn.

Hoe lang de bouw duurt

Een volledige koppeling met authenticatie, ID-mapping, uitnodigingen vanuit fasewijzigingen, synchronisatie van resultaten, webhookbeveiliging en AVG-proof gegevensverwerking kost doorgaans 2 tot 10 weken. Dat hangt af van de complexiteit van de ATS-omgeving en het aantal assessmenttemplates dat je inricht. Plan daarbinnen minstens een week voor end-to-end testen tegen een staging-omgeving van het ATS, voordat je productieverkeer aanzet.

Wil je zien hoe de ATS-koppelingen van Selection Lab in de praktijk werken? Vraag een demo aan.

Veelgestelde vragen

Hoe koppel je een assessmenttool aan Workable?

Via de Assessment Provider API van Workable, waarvoor je je eerst aanmeldt bij het Workable Partner Program. Je registreert een webhook op fasewijzigingen via het endpoint /subscriptions, maakt een uitnodiging aan voor elke kandidaat die de assessmentfase in gaat en stuurt de resultaten terug naar de callback-URL. De scores verschijnen dan op het kandidaatprofiel in Workable.

Heeft Carerix een API voor assessmentkoppelingen?

Ja. Carerix stelt een GraphQL API beschikbaar voor goedgekeurde integratiepartners. Je gebruikt mutations om uitnodigingen en resultaten weg te schrijven en queries om kandidaat- en vacaturegegevens te lezen. Het precieze authenticatiemodel en de veldnamen worden bevestigd tijdens de partneronboarding.

Welke kandidaatgegevens mag een ATS naar een assessmenttool sturen?

Alleen wat nodig is om de uitnodiging te versturen, dus het e-mailadres, de voornaam voor de aanhef en de voorkeurstaal. Cv-tekst, antwoorden op screeningsvragen, geboortedatum en adres blijven in het ATS. Heb je meer velden nodig, leg dan eerst de grondslag vast onder artikel 6 van de AVG.

Valt een assessmenttool met AI-scoring onder de EU AI Act?

In de regel wel. AI-systemen die kandidaten beoordelen of filteren bij werving en selectie staan in bijlage III van de EU AI Act en gelden als hoog risico. Dat betekent onder meer logging van elke scoring met modelversie, uitleg per scoredimensie, gedocumenteerde biastests en een conformiteitslog.

Hoe lang duurt het bouwen van een ATS-koppeling voor assessments?

Doorgaans 2 tot 10 weken, afhankelijk van de complexiteit van de ATS-omgeving en het aantal assessmenttemplates. Plan daarbinnen minstens een week voor end-to-end testen tegen een staging-omgeving van het ATS voordat je live gaat.

FAQ

Kunnen game-based assessments de diversiteit in het wervingsproces bevorderen?

Ja, game-based assessments kunnen de diversiteit bevorderen door de focus te leggen op vaardigheden en gedrag in plaats van op traditionele criteria zoals cv's, die onbewuste vooroordelen kunnen bevatten. Hierdoor krijgen kandidaten met uiteenlopende achtergronden een gelijke kans om hun potentieel te demonstreren.

Wat is een game-based assessment?

Een game-based assessment is een testmethode die gebruikmaakt van spelmechanismen om de vaardigheden, competenties en persoonlijkheidskenmerken van kandidaten te evalueren. Tijdens het spelen van deze games worden verschillende aspecten, zoals probleemoplossend vermogen, cognitieve capaciteiten en gedrag onder druk, op een interactieve manier beoordeeld.

Wat zijn de voordelen van game-based assessments?

Game-based assessments kunnen een interactieve en boeiende ervaring bieden voor kandidaten, wat voor bepaalde doelgroepen kan bijdragen aan een positiever beeld van het sollicitatieproces. Voor werkgevers kunnen deze assessments diepgaand inzicht geven in zowel cognitieve als gedragsmatige kwaliteiten op een manier die traditionele tests mogelijk niet bieden. Daarnaast kunnen ze de kans op sociaal wenselijk gedrag verminderen, omdat kandidaten in een game-omgeving vaak meer authentiek en spontaan reageren.

Hoe betrouwbaar zijn game-based assessments vergeleken met traditionele tests?

Als ze goed ontworpen zijn, kunnen game-based assessments even betrouwbaar en in sommige gevallen zelfs betrouwbaarder zijn dan traditionele tests, omdat ze een breed scala aan gedragsindicatoren en cognitieve vaardigheden meten in een dynamische setting. Er is echter wel een groot verschil in kwaliteit tussen de verschillende game-based assessments, dus let hier goed op.

Hoe werkt een game-based assessment?

Bij een game-based assessment nemen kandidaten deel aan interactieve spellen die zijn ontworpen om specifieke vaardigheden en gedragingen te meten. Tijdens het spel wordt niet alleen het eindresultaat geanalyseerd, maar ook hoe de kandidaat beslissingen neemt, reageert op uitdagingen en omgaat met verschillende scenario's. Deze observaties geven inzicht in hun denkprocessen en gedragspatronen.

Zijn game-based assessments wetenschappelijk onderbouwd?

Het grote nadeel van game based assessments is dat ze relatief nieuw zijn, dus dat veel game-based assessments nog niet tot nauwelijks onderzocht zijn door onafhankelijke onderzoekers. Veel partijen halen hun eigen onderzoek(en) aan, maar dit is zelden onafhankelijk getoetst. Zonder onafhankelijk onderzoek kun je de betrouwbaarheid van game based assessments niet zeker weten. Wees je hiervan bewust bij het selecteren van het best passende assessment.

Hoe kunnen game-based assessments bijdragen aan een betere kandidaatervaring?

Dit verschilt sterk per doelgroep. Doordat game-based assessments speels en interactief zijn, ervaren bepaalde groepen kandidaten minder stress dan bij traditionele tests. Onderzoek toont aan dat bepaalde doelgroepen (met name kandidaten boven de 35 jaar) juist meer stress ervaren van een game. Ook komt uit onderzoek dat mannen games als positiever ervaren dan vrouwen.

Kun je game-based assessments oefenen?

Hoewel je je kunt vertrouwd maken met het type games dat wordt gebruikt, zijn game-based assessments moeilijk specifiek te oefenen. Ze zijn ontworpen om natuurlijke reacties en authentiek gedrag te meten, waardoor repetitieve oefening minder invloed heeft op de uitkomst dan bij traditionele tests.

Zullen game-based assessments traditionele tests vervangen in de toekomst?

Het is waarschijnlijk dat game-based assessments een grotere rol zullen spelen in toekomstige wervingsprocessen, maar een volledige vervanging van traditionele tests is onzeker. Beide methoden kunnen elkaar aanvullen en worden ingezet afhankelijk van de specifieke eisen van de functie en de voorkeuren van het bedrijf.

Hoe worden de resultaten van een game-based assessment geanalyseerd en geïnterpreteerd?

De resultaten van een game-based assessment worden geanalyseerd op basis van vooraf vastgestelde parameters zoals probleemoplossend vermogen, reactietijd en gedrag onder druk. Geavanceerde algoritmen verzamelen en verwerken automatisch de data om een objectieve en betrouwbare beoordeling van de competenties en vaardigheden van de kandidaat te bieden.

Welke vaardigheden worden gemeten in een game-based assessment?

Game-based assessments meten een breed scala aan vaardigheden. Ze evalueren bijvoorbeeld het probleemoplossend vermogen, het aanpassingsvermogen, de besluitvorming onder druk, samenwerking en emotionele intelligentie van een kandidaat. Afhankelijk van het specifieke ontwerp kunnen ook cognitieve vaardigheden zoals geheugen, aandacht en patroonherkenning worden beoordeeld.

Hoe lang duurt een game-based assessment?

De duur van een game-based assessment varieert, maar meestal duurt het tussen de 15 en 60 minuten. Dit hangt af van de complexiteit van de game en het aantal vaardigheden dat wordt gemeten. Vaak zijn deze assessments korter en interactiever dan traditionele tests, wat kan bijdragen aan een speelse kandidaatervaring.

Zijn game-based assessments geschikt voor alle functies?

Game-based assessments zijn vooral geschikt voor functies waarbij cognitieve flexibiliteit, creativiteit, probleemoplossend vermogen en interpersoonlijke vaardigheden cruciaal zijn. Voor zeer technische of specialistische rollen kunnen aanvullende tests of evaluaties nodig zijn om specifieke kennis en expertise te meten.

Wat is het verschil tussen een game-based assessment en een gamified assessment?

Het verschil tussen een game-based assessment en een gamified assessment ligt in de mate waarin speltechnieken worden geïntegreerd. Bij een gamified assessment worden traditionele tests verrijkt met spelelementen om de betrokkenheid te vergroten, terwijl bij een game-based assessment de game zelf het primaire instrument is voor evaluatie. In een game-based assessment worden kandidaten beoordeeld op basis van hun interactie binnen de game, die is ontworpen om specifieke competenties te meten.

FAQ

Hoe kan ik het retentiepercentage van mijn bedrijf verbeteren?

Het retentiepercentage kan worden verbeterd door te investeren in de ontwikkeling en tevredenheid van medewerkers. Dit omvat het aanbieden van trainingen, carrièrekansen en erkenning voor hun bijdragen. Een open communicatiecultuur en aandacht voor werk-privébalans kunnen eveneens bijdragen aan hogere retentie. Daarnaast kan het bieden van concurrerende arbeidsvoorwaarden en het betrekken van medewerkers bij besluitvorming de loyaliteit versterken.

Wat zijn de voordelen van doorgroeimogelijkheden voor personeelsbehoud?

Doorgroeimogelijkheden kunnen het behoud van personeel bevorderen door medewerkers een gevoel van richting en motivatie te geven. Wanneer zij de kans krijgen om te leren en zich professioneel te ontwikkelen binnen het bedrijf, voelen zij zich gewaardeerd, wat hun loyaliteit vergroot. Dit kan voorkomen dat ze vertrekken om elders betere kansen te zoeken.

Wat zijn de belangrijkste factoren die personeelsretentie beïnvloeden?

Belangrijke factoren die personeelsretentie beïnvloeden zijn onder meer salaris en secundaire arbeidsvoorwaarden, mogelijkheden voor professionele ontwikkeling, werk-privébalans, bedrijfscultuur en de relatie met leidinggevenden. Medewerkers blijven vaak langer wanneer ze zich gewaardeerd, uitgedaagd en ondersteund voelen in hun werkomgeving.

Waarom is personeelsretentie zo belangrijk voor organisaties?

Personeelsretentie is belangrijk omdat het helpt bij het verminderen van kosten voor werving en training van nieuwe medewerkers, en bijdraagt aan het behoud van kennis en ervaring binnen de organisatie. Een hoge retentie zorgt ook voor continuïteit binnen teams, wat kan leiden tot een stabielere bedrijfscultuur, hogere klanttevredenheid en verbeterde bedrijfsresultaten.

Welke wervingsstrategieën helpen bij het verhogen van retentie?

Wervingsstrategieën die de retentie kunnen verhogen, omvatten het identificeren van kandidaten die passen bij de bedrijfscultuur, het gebruik van assessments om soft skills te evalueren en het bieden van transparantie over rolverwachtingen tijdens het sollicitatieproces. Medewerkers die zich verbonden voelen met de organisatie en duidelijkheid hebben over hun functie, zijn geneigd langer te blijven.

Hoe kan een goed onboardingsproces bijdragen aan hogere retentie?

Een effectief onboardingsproces kan bijdragen aan hogere retentie door nieuwe medewerkers te helpen zich snel aan te passen aan hun rol, de bedrijfscultuur en de verwachtingen. Door vanaf het begin ondersteuning en duidelijke informatie te bieden, wordt hun betrokkenheid vergroot en de kans verkleind dat ze vroegtijdig vertrekken vanwege gevoelens van overweldiging of gebrek aan begeleiding.

Wat is de rol van bedrijfscultuur in het behoud van personeel?

De bedrijfscultuur speelt een cruciale rol in het behoud van personeel. Wanneer medewerkers zich gehoord, gewaardeerd en verbonden voelen met de waarden en normen van het bedrijf, is de kans groter dat ze blijven. Een positieve cultuur die samenwerking, respect en persoonlijke groei stimuleert, kan de motivatie en tevredenheid van medewerkers aanzienlijk vergroten.

Hoe kunnen leiderschap en managementstijl de retentie beïnvloeden?

Leiderschap en managementstijl hebben een significante invloed op retentie. Leiders die hun team inspireren, ondersteunen en coachen, kunnen de betrokkenheid en tevredenheid van medewerkers verhogen. Het bieden van autonomie en vertrouwen kan leiden tot hogere loyaliteit, terwijl een inefficiënte of negatieve managementstijl kan bijdragen aan ontevredenheid en verhoogd personeelsverloop.

Wat is het belang van erkenning en beloningen voor personeelsbehoud?

Erkenning en beloningen spelen een belangrijke rol in personeelsbehoud door medewerkers te laten zien dat hun werk wordt gewaardeerd. Dit kan hun motivatie en loyaliteit verhogen. Naast financiële beloningen kunnen ook complimenten, promoties en andere vormen van erkenning bijdragen aan tevredenheid en het behouden van personeel.

Welke rol speelt werk-privébalans in het verhogen van retentie?

Een evenwichtige werk-privébalans speelt een belangrijke rol in het verhogen van retentie. Door stress te verminderen en werktevredenheid te vergroten, blijven medewerkers vaak langer bij het bedrijf. Initiatieven zoals flexibele werktijden, mogelijkheden voor thuiswerken en respect voor persoonlijke tijd kunnen bijdragen aan deze balans.

Wat betekent retentie verhogen binnen een bedrijf?

Retentie verhogen binnen een bedrijf houdt in dat je strategieën implementeert om medewerkers langer aan de organisatie te binden. Dit kan door het verbeteren van werktevredenheid, het aanbieden van doorgroeimogelijkheden en het bevorderen van een positieve en ondersteunende bedrijfscultuur.

Hoe meet ik het succes van mijn retentiestrategie?

Het succes van een retentiestrategie kan worden gemeten door het bijhouden van retentiepercentages en verloopcijfers, en door inzichten te verkrijgen uit exitgesprekken. Daarnaast kunnen enquêtes over medewerkerstevredenheid en feedback uit evaluatiegesprekken waardevolle informatie bieden over de effectiviteit van de toegepaste strategieën.

Wat zijn de kosten van een laag retentiepercentage?

Een laag retentiepercentage kan aanzienlijke kosten met zich meebrengen, zoals verhoogde uitgaven voor werving en training van nieuwe medewerkers. Bovendien kan het verlies van ervaren personeel leiden tot lagere productiviteit, verminderde kennisoverdracht en een negatieve invloed op de bedrijfscultuur.

Hoe kan ik medewerkersbetrokkenheid verhogen?

Om medewerkersbetrokkenheid te verhogen, kun je hen betrekken bij besluitvormingsprocessen, regelmatig om hun feedback vragen en erkenning geven voor hun bijdragen. Het aanbieden van ontwikkelingsmogelijkheden en het onderhouden van transparante communicatie kunnen eveneens bijdragen aan een grotere betrokkenheid.

Hoe kan technologie helpen bij het verbeteren van personeelsretentie?

Technologie kan een hulpmiddel zijn bij het verbeteren van personeelsretentie door het faciliteren van communicatie, feedback en ontwikkeling. Door gebruik te maken van online platforms voor training, erkenning en evaluatie, kunnen bedrijven een meer betrokken en tevreden personeelsbestand creëren.

FAQ

Hoe lang duurt het om de tool te doorlopen?

Minder dan 10 minuten. Je doorloopt 30 vragen en krijgt daarna een overzicht van waar je op moet letten bij je volgende assessmentplatform.

Helpt deze checklist bij het vergelijken van assessmentaanbieders?

Ja. Doordat je scherp krijgt wat voor jouw team echt belangrijk is, wordt het vergelijken van functionaliteit, prijs en sterke punten van aanbieders eenvoudiger en strategischer.

Hoe gebruik ik deze checklist zonder formele RFI?

De checklist is net zo waardevol voor een interne evaluatie, voor het verkennen van nieuwe tools of voor het verbeteren van je huidige selectieproces, ook als je geen RFI of RFQ uitzet.

Waar moet je op letten bij een modern assessmentplatform?

Geef voorrang aan platformen met een gebruiksvriendelijk ontwerp, goede werking op mobiel, sterke analytics, koppelingen met je ATS en inclusieve functionaliteit zoals ondersteuning voor neurodiversiteit.

Welke soorten assessments zijn in 2026 relevant?

De sterkste platformen combineren capaciteitentesten, situational judgement tests, gedragsassessments en voorspellende AI, zodat je een kandidaat completer beoordeelt dan met één los instrument.

Voor wie is een assessmentchecklist bedoeld?

Voor HR-professionals, hiring managers en inkoopteams die oplossingen voor voorselectie beoordelen, en in het bijzonder voor wie AI-gestuurde of compliance-gedreven assessmentplatformen met elkaar vergelijkt.

Hoe helpt deze checklist bij een RFI of RFQ voor assessments?

Met de checklist breng je je eisen scherp in kaart, zodat je met vertrouwen een Request for Information of Request for Quotation voor assessmenttools kunt opstellen of beantwoorden.

Wat is een assessmenttool in werving en selectie?

Een assessmenttool beoordeelt de vaardigheden, het gedrag en de match van kandidaten tijdens het wervingsproces. Daarmee onderbouw je aannamebeslissingen beter en verloopt de voorselectie soepeler.

Game-based assessment packs

← Blog

Workable en Carerix koppeling, wat een assessmenttool moet bouwen

Wat een assessmenttool moet bouwen om te koppelen met Workable of Carerix, van API-tokens en webhooks tot resultaten, AVG en de EU AI Act.
Joeri Everaers
COO
Leestijd: ca.
13 min

Wat moet een assessmenttool bouwen voor een koppeling met Workable of Carerix?

Een assessmentaanbieder die wil koppelen met Workable of Carerix bouwt vijf onderdelen. Veilige authenticatie met API-tokens, een vaste mapping tussen kandidaat- en vacature-ID's, uitnodigingen die automatisch vertrekken zodra een kandidaat de assessmentfase in gaat, resultaten die terugkomen op het kandidaatprofiel in het ATS, en ondertekende, idempotente webhooks. Daaromheen moet de gegevensverwerking voldoen aan de AVG en, zodra er AI in de scoring zit, aan de EU AI Act.

Dit artikel is een technisch naslagwerk voor de developers die de koppelingslaag bouwen. Het gaat over authenticatie, ID-mapping, het starten van uitnodigingen, het synchroniseren van resultaten, webhookbeveiliging en gegevensverwerking volgens de AVG. Waarom een goede ATS-koppeling voor skilltests zo veel uitmaakt voor recruiters, lees je in een apart artikel.

Welk ATS je ook kiest, de levenscyclus van een koppeling is steeds dezelfde.

  1. Inrichten. Credentials uitwisselen en per ATS-fase een assessmenttemplate koppelen
  2. Uitnodigen. Een fasewijziging in het ATS stuurt de kandidaat een assessmentuitnodiging
  3. Afronden. De kandidaat maakt het assessment op het platform van de aanbieder
  4. Resultaten terugsturen. De aanbieder pusht de resultaten, of het ATS haalt ze op via polling
  5. Terugschrijven. Scores en status komen op het kandidaatrecord in het ATS

Het ATS is de bron van waarheid voor alle kandidaat- en vacaturegegevens. Jouw platform beheert alleen de status van de assessmentsessie en kopieert geen kandidaatprofielen.

Wat je vooraf geregeld moet hebben

Controleer deze punten voordat je een regel code schrijft.

  • Een publiek bereikbaar HTTPS-endpoint voor inkomende webhooks (geen self-signed certificaten in productie)
  • Duurzame opslag waarin je de Workable candidate_id, job_id en je eigen invitation_id bewaart en bij elk binnenkomend event kunt opzoeken
  • Een ontwerp voor toestemming. Kandidaten geven expliciet toestemming voordat persoonsgegevens naar jouw platform gaan, en opnieuw voordat resultaten worden teruggedeeld
  • Een vastgelegd bewaarbeleid volgens artikel 5, lid 1, onder e van de AVG, dat bepaalt hoe lang assessmentdata na een aannamebesluit bij jou blijft staan
  • Aanmelding bij het Workable Partner Program (Assessment Provider-track) of het Carerix Integration Partner Program, voordat je productiecalls doet

Authenticatie en API-tokens

Workable

De Assessment Provider API van Workable werkt met een statisch access token in de HTTP-header Authorization. Volgens de developerdocumentatie 'Assessment Providers' van Workable (workable.readme.io) wordt elke call van Workable naar jouw endpoint op deze manier geauthenticeerd.

Authorization: Bearer <your_access_token>

Je krijgt dit token zodra je koppeling via het partnerprogramma van Workable is ingericht. Vervang het token minstens elke 90 dagen, en direct bij een vermoeden van misbruik. Bewaar het in een secrets manager (AWS Secrets Manager, HashiCorp Vault of vergelijkbaar) en niet in omgevingsvariabelen op gedeelde servers.

Valideer het token aan jouw kant bij elk request, nog voordat je een payload verwerkt. Geef 401 Unauthorized terug bij een ontbrekend of ongeldig token. De foutafhandeling van Workable verwacht statuscodes als 400, 401, 409 en 422 met een gestructureerde foutmelding.

{
  "error": {
    "code": "INVALID_TOKEN",
    "message": "The provided bearer token is not recognized."
  }
}

Carerix

Carerix bouwt koppelingen via een officieel partnerprogramma en stelt voor goedgekeurde partners een GraphQL API beschikbaar. Het precieze authenticatiemodel (OAuth 2.0 client credentials of een API-key) wordt bevestigd tijdens de partneronboarding. Bouw je een nieuwe connector, begin dan bij de pagina 'Become an Integration Partner' van Carerix. Daar staan het aanmeldproces en de verwachte doorlooptijd.

Ga er in de praktijk van uit dat je GraphQL-mutations gebruikt om te schrijven (een assessmentuitnodiging aanmaken, een kandidaat bijwerken) en queries om te lezen (kandidaat- of vacaturegegevens ophalen). Al het verkeer loopt minimaal via TLS 1.2.

Tokenbeveiliging bij beide ATS'en

  • Vraag zo min mogelijk rechten aan. Laat de API scopes toe, kies dan alleen het lezen van kandidaten en fases en het schrijven van resultaten
  • Log nooit het volledige token. Toon in diagnostische output alleen de laatste 4 tekens
  • Controleer de echtheid van callbacks met een gedeeld geheim of een HMAC-handtekening (zie het hoofdstuk over webhooks)

Veldmapping van kandidaat- en vacature-ID's

Een strakke mapping voorkomt verweesde assessmentsessies en dubbele uitnodigingen. Deze ID-paren moet je opslag altijd bijhouden.

Veldmapping in Workable

Workable-veldVeld in jouw platformToelichting
candidate.idapplicant_idPrimaire sleutel voor alle kandidaatacties
job.shortcoderole_idVerwijst naar het assessmenttemplate voor die functie
stage.nametrigger_stageDe fase die de uitnodiging start
invitation_id (jouw veld)session_idOpslaan en in elke resultaatpayload meesturen

Voor de uitnodiging heb je alleen de velden nodig om het assessment te versturen, namelijk first_name, last_name, email en language. Stuur velden als cover_letter, resume_url, cv-tekst of antwoorden op eigen screeningsvragen niet door, tenzij je koppeling ze echt nodig heeft en de kandidaat voor dat delen toestemming heeft gegeven.

Veldmapping in Carerix

In het GraphQL-schema van Carerix heten de vergelijkbare objecten Candidate en Vacancy. Map ze zo.

  • Candidate.id naar je applicant_id
  • Vacancy.id naar je role_id
  • Een eigen veld of tag op het Candidate-object voor de invitation_id die jouw platform teruggeeft

Carerix gebruikt GUID's in tekstvorm als objectidentificatie. Laat de exacte veldnamen bevestigen tijdens de partneronboarding, want het GraphQL-schema verandert mee met platformupdates.

Zo min mogelijk persoonsgegevens onderweg

Stuur alleen wat nodig is. Voor de uitnodiging is email vereist, met optioneel first_name en preferred_language. Al het andere (geboortedatum, adres, nationaliteit, antwoorden op eigen vragenlijsten) blijft in het ATS. Jouw platform slaat die velden nooit op, ook niet als ze in de inkomende payload staan.

Assessments starten vanuit een fasewijziging in het ATS

Fasewijzigingen herkennen in Workable

Workable ondersteunt abonnementen op kandidaatevents via het endpoint /subscriptions. Je registreert een webhook met filters op fasewijzigingen. Met de subscription args filter je op eventtype, zodat je alleen candidate_moved of een vergelijkbaar event voor faseovergangen ontvangt en niet elke kandidaatactiviteit.

Gaat een kandidaat naar de ingestelde assessmentfase, dan stuurt Workable een POST naar je geregistreerde callback-URL. De payload bevat minimaal dit.

{
  "event_type": "candidate_moved",
  "event_id": "evt_01HXYZ",
  "candidate": {
    "id": "cand_7890",
    "name": "Alex van der Berg",
    "email": "[email protected]"
  },
  "job": {
    "id": "job_4567",
    "shortcode": "DEV001"
  },
  "stage": {
    "name": "Assessment",
    "previous_name": "Phone Screen"
  }
}

Bij dit event zoekt je service het assessmenttemplate op dat aan job.shortcode hangt, maakt een uitnodiging aan en slaat de invitation_id op bij candidate.id + job.id. Antwoord binnen 5 seconden met 200 OK en doe het zware werk asynchroon.

Verplichte parameters bij het aanmaken van een uitnodiging

Je call voor het aanmaken van een uitnodiging accepteert minimaal deze velden.

  • applicant_id (gemapt vanaf het kandidaat-ID in het ATS)
  • role_id (gemapt vanaf het vacature-ID in het ATS)
  • email
  • language (standaard en als de taal onbekend is)
  • assessment_template_id (bepaald via je configuratie van fase naar template)

Deze optionele parameters wil je per klant kunnen instellen.

  • allow_retake (boolean, standaard false)
  • proctoring_enabled (boolean)
  • expiry_hours (integer, bijvoorbeeld 72)

Heruitnodigingen en annuleringen

Wordt de kandidaat uit de assessmentfase teruggezet of afgewezen, dan doet je koppeling drie dingen.

  1. Controleren of er een open invitation_id bestaat voor het paar candidate_id + job_id
  2. De uitnodiging annuleren of laten verlopen via de interne API van je platform
  3. De annulering loggen met een tijdstempel

Komt de kandidaat later opnieuw in die fase, maak dan een nieuwe invitation_id aan en archiveer de oude. Hergebruik nooit een uitnodigings-ID. Dwing dat af met een unique constraint in de database.

Assessmentresultaten ontvangen

Push of pull

Ondersteun zo mogelijk beide. Push (jouw platform stuurt resultaten met een POST naar een callback die bij Workable is geregistreerd) heeft de voorkeur omdat het sneller is, maar sommige ATS-inrichtingen werken met polling. Volgens de Assessment Providers-documentatie van Workable kunnen resultaten via een callback of via polling binnenkomen.

De resultaatpayload

Een standaard resultaatpayload van jouw platform bevat minimaal dit.

{
  "event_type": "assessment_completed",
  "event_id": "res_evt_9921",
  "invitation_id": "inv_3344",
  "attempt_id": "att_5566",
  "candidate_id": "cand_7890",
  "job_id": "job_4567",
  "status": "completed",
  "completed_at": "2026-09-09T14:33:00Z",
  "scores": {
    "overall": 72,
    "dimensions": {
      "cognitive_ability": 68,
      "conscientiousness": 81,
      "verbal_reasoning": 74
    }
  },
  "report_url": "https://app.assessmentplatform.com/reports/att_5566"
}

Gebruik voor het veld status een vaste woordenlijst, namelijk completed, abandoned, expired en failed. Het ATS vertaalt die naar eigen labels. Je contract mag nooit leunen op vrije tekst als status.

Resultaten terugschrijven naar het ATS

Voor Workable stuur je de resultaatpayload met een POST naar de callback-URL die bij het aanmaken van het assessment is meegegeven, of via het resultatenendpoint van de Assessment Provider API. Workable toont de scores daarna op het kandidaatprofiel. Zo werkt het ook bij aanbieders als Test Partnership, waarvan de resultaten op het Workable-profiel van de kandidaat verschijnen.

Voor Carerix werk je het kandidaatrecord bij met een GraphQL-mutation, via een eigen assessmentveld of een gestructureerde notitie met de scores en de rapport-URL.

Webhooks instellen en beveiligen

Abonnementen registreren in Workable

Registreer je callback-URL via het endpoint /subscriptions van Workable. Volgens de webhookdocumentatie van Workable filteren de subscription args de eventstroom. Stel ze dus zo in dat je alleen events ontvangt die voor jouw koppeling relevant zijn, zoals fasewijzigingen bij vacatures waar je assessmenttemplate actief is.

Handtekeningen controleren

Elke webhook van jouw platform naar het ATS en elke callback van het ATS naar jouw endpoint moet ondertekend zijn. Gebruik daarvoor HMAC-SHA256.

import hmac
import hashlib

def verify_signature(payload_bytes: bytes, received_sig: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode("utf-8"),
        payload_bytes,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, received_sig)

Stuur een header X-Webhook-Timestamp mee en weiger payloads waarvan het tijdstempel ouder is dan 5 minuten. Zo voorkom je replay-aanvallen.

Retries en idempotentie

Workable en de meeste andere ATS'en proberen mislukte webhooks opnieuw af te leveren. Je endpoint moet daarom idempotent zijn. Hetzelfde event_id twee keer verwerken geeft dezelfde uitkomst, zonder bijeffecten zoals dubbele uitnodigingen of dubbel weggeschreven resultaten.

Zo pak je dat aan.

  1. Schrijf bij ontvangst het event_id weg in een deduplicatietabel met een TTL van minstens 24 uur
  2. Bestaat het event_id al, geef dan direct 200 OK terug zonder te verwerken
  3. Mislukt een uitgaande levering (jouw platform pusht resultaten), gebruik dan exponential backoff. Begin bij 5 seconden, verdubbel tot maximaal 5 minuten en stop na 7 pogingen
  4. Zijn alle pogingen op, zet het bericht dan in een dead-letter queue en alarmeer het operationele team
curl -X POST https://callback.workable.com/assessment-results \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-Signature: sha256=<hmac_value>" \
  -H "X-Webhook-Timestamp: 2026-09-09T14:33:01Z" \
  -d '{
    "invitation_id": "inv_3344",
    "candidate_id": "cand_7890",
    "status": "completed",
    "scores": { "overall": 72 }
  }'

Voorbeeldrequests en -responses

Beschikbare assessmenttemplates opvragen

curl -X GET https://api.assessmentplatform.com/v1/templates \
  -H "Authorization: Bearer <your_access_token>"

Het antwoord ziet er zo uit.

{
  "templates": [
    { "id": "tmpl_001", "name": "Cognitive + Personality Bundle", "language": "en" },
    { "id": "tmpl_002", "name": "Logistiek instapniveau NL", "language": "nl" }
  ]
}

Een uitnodiging aanmaken

curl -X POST https://api.assessmentplatform.com/v1/invitations \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "applicant_id": "cand_7890",
    "role_id": "job_4567",
    "template_id": "tmpl_001",
    "email": "[email protected]",
    "first_name": "Alex",
    "language": "en",
    "expiry_hours": 72
  }'

Het antwoord ziet er zo uit.

{
  "invitation_id": "inv_3344",
  "status": "pending",
  "invitation_url": "https://app.assessmentplatform.com/start/inv_3344",
  "expires_at": "2026-09-12T14:33:00Z"
}

Minimale webhookhandler in Node.js

const crypto = require("crypto");
const express = require("express");
const app = express();

app.use(express.raw({ type: "application/json" }));

app.post("/webhooks/ats", (req, res) => {
  const sig = req.headers["x-webhook-signature"];
  const ts = req.headers["x-webhook-timestamp"];

  const age = Date.now() - new Date(ts).getTime();
  if (age > 5 * 60 * 1000) return res.status(400).send("Timestamp too old");

  const expected = crypto
    .createHmac("sha256", process.env.WEBHOOK_SECRET)
    .update(req.body)
    .digest("hex");

  if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig.replace("sha256=", "")))) {
    return res.status(401).send("Invalid signature");
  }

  const event = JSON.parse(req.body);
  // Idempotency check, then enqueue for processing
  res.sendStatus(200);
});

Testchecklist en troubleshooting

Loop elk scenario door in een stagingomgeving voordat je productieverkeer aanzet.

TestgevalVerwachte uitkomst
Geldig token, correcte payload200 OK, uitnodiging aangemaakt
Verlopen of ongeldig token401 Unauthorized, geen uitnodiging aangemaakt
Kandidaat-ID niet gevonden in het ATS404 Not Found, fout gelogd
Vacature of fase niet gekoppeld aan een template422 Unprocessable Entity, alert verstuurd
Dubbel event_id ontvangen200 OK, geen dubbele uitnodiging
Webhookhandtekening klopt niet401 Unauthorized, request geweigerd
Push van resultaten loopt vast (5xx van het ATS)Opnieuw proberen met exponential backoff
Kandidaat afgewezen tijdens het assessmentUitnodiging geannuleerd, sessie verlopen
Resultaatevent komt binnen vóór het uitnodigingsrecord30 seconden in de wachtrij houden, daarna opnieuw opzoeken

Troubleshooting per HTTP-status

StatusSymptoomWaarschijnlijke oorzaakOplossing
401Alle requests geweigerdOngeldig of vervangen bearer tokenNieuw token aanmaken via de partneromgeving en de synchronisatie van de secrets manager controleren
404Uitnodiging aanmaken misluktcandidate_id of job_id staat niet in je mappingopslagNagaan of de webhook het fasewijzigingsevent heeft ontvangen en de deduplicatietabel op gemiste events controleren
409Dubbele uitnodiging geweigerdDezelfde candidate_id + job_id heeft al een actieve uitnodigingDe bestaande eerst annuleren, of de bestaande invitation_id teruggeven
422Validatiefout in de payloadVerplicht veld ontbreekt of ongeldige enum-waardeDe foutmelding per veld bekijken en de status-woordenlijst naast de specificatie leggen
5xxCallback voor resultaten faaltATS-endpoint onbereikbaar of verkeerd ingestelde callback-URLPartnersupport van Workable inschakelen en de resultaten in de dead-letter queue houden tot het is opgelost

Staan mislukte leveringen na 24 uur nog in de dead-letter queue, dan heeft je beheeromgeving een knop nodig om ze per invitation_id handmatig opnieuw te versturen, plus een export van openstaande resultaatpayloads om ze zo nodig handmatig in te voeren.

Privacy, AVG en de EU AI Act

Niet meer data dan nodig

Om een uitnodiging aan te maken hoeven maar drie velden van het ATS naar je assessmentplatform, namelijk email, first_name (voor de aanhef) en preferred_language. Al het andere blijft in het ATS. Kan je platform niet zonder extra velden, leg dan eerst de grondslag vast volgens artikel 6 van de AVG voordat je die overdracht aanzet.

Sla geen ruwe cv-tekst, antwoorden op screeningsvragen of beoordelingsnotities van recruiters op. Die velden kunnen in de webhookpayloads van sommige ATS'en zitten. Filter ze eruit bij binnenkomst, voordat ze je database bereiken.

Momenten van toestemming

Leg twee toestemmingsmomenten vast in je audittrail, elk met een UTC-tijdstempel.

  1. Voordat de uitnodigingsmail vertrekt. De kandidaat weet dat er een extern assessment komt en heeft geen bezwaar gemaakt, of heeft expliciet ingestemd. Dat hangt af van de grondslag die je klant gebruikt
  2. Voordat resultaten terug naar het ATS gaan. De kandidaat weet dat de scores zichtbaar worden voor het wervingsteam

Leg naast het tijdstempel ook vast hoe de toestemming is gegeven, bijvoorbeeld via een toestemmingsveld in het ATS of een vinkje in het product.

Dataopslag en bewaartermijnen

Werk je voor werkgevers in de EU, sla de persoonsgegevens uit je koppeling dan binnen de EU op. Selection Lab slaat bijvoorbeeld alle persoonsgegevens op in Frankfurt en haalt met lokale taalmodellen persoonlijke informatie uit gespreksdata voordat die bij een scoringsmodel komt. Dat patroon is het kopiëren waard. Laat elk AI-onderdeel in de scoring waar technisch mogelijk werken met geanonimiseerde of gepseudonimiseerde input.

Stel bewaartermijnen per klant in en laat ze automatisch handhaven. Een redelijke standaard is 12 maanden na afronding van het assessment, waarna de gegevens worden verwijderd of geanonimiseerd. Klanten in gereguleerde sectoren willen soms een kortere termijn. Bouw de termijn daarom als instelbare parameter en niet als vaste waarde in de code.

EU AI Act en auditlogging

Gebruikt een onderdeel van je assessmentplatform een AI-model om scores of aanbevelingen te genereren, dan valt het in de regel onder de AI-systemen met een hoog risico uit bijlage III van de EU AI Act (werving en selectie). Dat vraagt om deze maatregelen.

  • Elke scoring loggen met de modelversie, de geanonimiseerde inputkenmerken en de score
  • Per scoredimensie een begrijpelijke uitleg die een recruiter of kandidaat kan opvragen
  • Vastleggen dat het model vóór ingebruikname is getest op bias tussen groepen met beschermde kenmerken
  • Een conformiteitslog bijhouden waar je functionaris gegevensbescherming bij kan

Selection Lab combineert daarom transparante scorerapporten per dimensie met uitlegbare AI-uitkomsten die recruiters direct in de kandidaatweergave van hun ATS bekijken. Die herleidbaarheid is wat compliance met de EU AI Act op koppelingsniveau concreet vraagt. Elke automatische score die een aannamebesluit beïnvloedt, moet van begin tot eind te controleren zijn.

Hoe lang de bouw duurt

Een volledige koppeling met authenticatie, ID-mapping, uitnodigingen vanuit fasewijzigingen, synchronisatie van resultaten, webhookbeveiliging en AVG-proof gegevensverwerking kost doorgaans 2 tot 10 weken. Dat hangt af van de complexiteit van de ATS-omgeving en het aantal assessmenttemplates dat je inricht. Plan daarbinnen minstens een week voor end-to-end testen tegen een staging-omgeving van het ATS, voordat je productieverkeer aanzet.

Wil je zien hoe de ATS-koppelingen van Selection Lab in de praktijk werken? Vraag een demo aan.

Veelgestelde vragen

Hoe koppel je een assessmenttool aan Workable?

Via de Assessment Provider API van Workable, waarvoor je je eerst aanmeldt bij het Workable Partner Program. Je registreert een webhook op fasewijzigingen via het endpoint /subscriptions, maakt een uitnodiging aan voor elke kandidaat die de assessmentfase in gaat en stuurt de resultaten terug naar de callback-URL. De scores verschijnen dan op het kandidaatprofiel in Workable.

Heeft Carerix een API voor assessmentkoppelingen?

Ja. Carerix stelt een GraphQL API beschikbaar voor goedgekeurde integratiepartners. Je gebruikt mutations om uitnodigingen en resultaten weg te schrijven en queries om kandidaat- en vacaturegegevens te lezen. Het precieze authenticatiemodel en de veldnamen worden bevestigd tijdens de partneronboarding.

Welke kandidaatgegevens mag een ATS naar een assessmenttool sturen?

Alleen wat nodig is om de uitnodiging te versturen, dus het e-mailadres, de voornaam voor de aanhef en de voorkeurstaal. Cv-tekst, antwoorden op screeningsvragen, geboortedatum en adres blijven in het ATS. Heb je meer velden nodig, leg dan eerst de grondslag vast onder artikel 6 van de AVG.

Valt een assessmenttool met AI-scoring onder de EU AI Act?

In de regel wel. AI-systemen die kandidaten beoordelen of filteren bij werving en selectie staan in bijlage III van de EU AI Act en gelden als hoog risico. Dat betekent onder meer logging van elke scoring met modelversie, uitleg per scoredimensie, gedocumenteerde biastests en een conformiteitslog.

Hoe lang duurt het bouwen van een ATS-koppeling voor assessments?

Doorgaans 2 tot 10 weken, afhankelijk van de complexiteit van de ATS-omgeving en het aantal assessmenttemplates. Plan daarbinnen minstens een week voor end-to-end testen tegen een staging-omgeving van het ATS voordat je live gaat.