Will Werk
Will Werk
API-documentatie

De Will Werk API

Koppel je eigen systeem aan Will Werk. Je plaatst en beheert hiermee je vacatures, haalt aangedragen kandidaten op, vraagt een cv op, en schrijft de status van een kandidaat terug. Werkt met elk systeem dat een REST-koppeling aankan, bijvoorbeeld Recruitee.

Beginnen

Maak een sleutel aan in je portaal onder Mijn account, kaart API-koppeling. Je ziet hem daar één keer; wij bewaren alleen een versleutelde afdruk, dus bij verlies maak je een nieuwe aan. API-toegang hoort bij de pakketten Pro en Enterprise.

Stuur de sleutel mee in de Authorization-kop:

curl https://www.willwerk.nl/api/v1/mij \
  -H "Authorization: Bearer ww_jouw_sleutel"

Werkt dat, dan krijg je je bedrijfsnaam terug en weet je meteen wat de sleutel mag:

{
  "bedrijf": "Voorbeeld BV",
  "pakket": "Pro",
  "sleutel": "Recruitee",
  "mag_schrijven": false,
  "limiet_per_uur": 1000
}
Alleen jouw gegevens. Elke aanvraag wordt gefilterd op jouw bedrijf. Een id van een andere klant raden levert niets op: je krijgt dan een 404, niet die gegevens.

Vacatures ophalen

GET/api/v1/vacatures
ParameterBetekenis
limitAantal per pagina, standaard 100, hoogstens 200
offsetOverslaan, voor de volgende pagina
curl "https://www.willwerk.nl/api/v1/vacatures?limit=25" \
  -H "Authorization: Bearer ww_jouw_sleutel"
{
  "vacatures": [
    {
      "id": 3289,
      "titel": "Word Mechanisch Werkvoorbereider",
      "categorie": "Techniek",
      "locatie": "Ouderkerk aan den IJssel",
      "type": "Vast",
      "salaris": "Conform cao Metaal en Techniek",
      "slug": "word-mechanisch-werkvoorbereider-ouderkerk",
      "actief": true,
      "datum_toegevoegd": "2026-07-02T09:14:00+00:00"
    }
  ],
  "totaal": 42, "limit": 25, "offset": 0
}

Een vacature plaatsen

POST/api/v1/vacatures

Hiervoor heb je een sleutel nodig die mag schrijven. Wat je stuurt komt op onze site, gaat via de feed naar de jobboards en wordt door Will voorgelezen aan kandidaten, dus het gaat eerst door dezelfde controle als alles wat wij zelf plaatsen.

VeldBetekenis
titelVerplicht. Onze titels beginnen met "Word"; staat dat er niet, dan zetten wij het ervoor en krijg je de nieuwe titel terug
beschrijvingVerplicht, minimaal 100 tekens. Met de kopjes Functie-eisen, Arbeidsvoorwaarden en Interesse
categorieVerplicht, een van onze categorieën. Stuur je iets anders, dan krijg je de hele lijst terug in de foutmelding
typeVast, Contract, Detachering, Fulltime, Parttime, Uitzendwerk, Oproepbasis, In overleg. Standaard Contract
locatiePlaatsnaam. Standaard Nederland
salarisVrije tekst. Zie de waarschuwing hieronder
bron_urlJe eigen URL of id voor deze vacature. Hiermee voorkomen wij dubbelingen: stuur je hem twee keer, dan krijg je een 409 met het bestaande id
actiefStandaard true
curl -X POST https://www.willwerk.nl/api/v1/vacatures \
  -H "Authorization: Bearer ww_jouw_sleutel" \
  -H "Content-Type: application/json" \
  -d '{
    "titel": "Senior Java Developer (m/v)",
    "categorie": "IT & Technologie",
    "locatie": "Utrecht",
    "type": "Vast",
    "salaris": "€ 4.500 tot € 6.000 per maand",
    "bron_url": "https://jouwsite.nl/vacature/java-1",
    "beschrijving": "... Functie-eisen: ... Arbeidsvoorwaarden: ... Interesse? ..."
  }'
{
  "ok": true,
  "id": 3764,
  "titel": "Word Senior Java Developer",
  "url": "https://www.willwerk.nl/vacature/word-senior-java-developer-utrecht",
  "waarschuwingen": [],
  "titel_aangepast": "Onze vacatures beginnen met 'Word'. Jouw titel is geplaatst als: …"
}

Wat tegenhoudt en wat niet

Een ontbrekende of ongeldige categorie, een ongeldig type, een te korte beschrijving en placeholdertekst ("recruiter vult dit later aan") leveren een 422 op met een lijst onder problemen. Er wordt dan niets geplaatst.

De rest komt terug onder waarschuwingen en houdt niets tegen. De belangrijkste is het salaris: geef je geen bedrag op, dan publiceren wij het mediaanloon uit de CBS-cijfers als indicatie, met de vermelding dat het niet jouw aanbod is. Dat doen we omdat jobboards vacatures zonder bedrag weigeren. Een eigen bedrag werkt beter, en vanaf 1 januari 2027 moet een kandidaat het sowieso weten voor het eerste gesprek.

Een vacature bijwerken of sluiten

PATCH/api/v1/vacatures/{id}

Stuur alleen de velden die veranderen; de rest blijft staan. Dezelfde controle geldt, dus je kunt een vacature niet met een wijziging alsnog onder de eisen door krijgen.

curl -X PATCH https://www.willwerk.nl/api/v1/vacatures/3764 \
  -H "Authorization: Bearer ww_jouw_sleutel" \
  -H "Content-Type: application/json" \
  -d '{"actief": false}'

Een vacature verwijderen kan niet, en dat is met opzet: kandidaten die er al op hebben gereageerd horen bij die vacature. "actief": false haalt hem van de site.

Kandidaten ophalen

GET/api/v1/kandidaten

Je krijgt de kandidaten die aan jou zijn aangedragen. Kandidaten die Will nog beoordeelt of zelf heeft afgewezen zitten hier bewust niet bij: die zijn nog niet aan jou voorgelegd.

ParameterBetekenis
statusaangedragen, gesprek_klant, aangenomen of afgewezen
vacatureFilter op vacaturetitel
limit / offsetZoals hierboven
{
  "kandidaten": [
    {
      "id": 118,
      "voornaam": "Sanne", "achternaam": "de Vries",
      "email": "sanne@voorbeeld.nl", "telefoon": "+31 6 12345678",
      "woonplaats": "Rotterdam",
      "vacature": "Word Elektricien in Rotterdam",
      "status": "aangedragen",
      "match_oordeel": "sterk",
      "datum_aangedragen": "2026-08-14T11:02:00+00:00",
      "heeft_cv": true
    }
  ]
}

Een cv opvragen

GET/api/v1/kandidaten/{id}/cv

Je krijgt geen bestand maar een ondertekende link die een uur geldig is. Download hem binnen dat uur; daarna vraag je gewoon een nieuwe op.

{ "url": "https://www.willwerk.nl/cvs/1786384327_cv.pdf?t=1787136000&s=a1b2…",
  "geldig_uren": 1 }
Waarom geen vast bestand. Een URL zonder vervaltijd blijft werken zodra hij in een logboek of browsergeschiedenis belandt. Hier gaan persoonsgegevens de deur uit, dus die link hoort te verlopen. Wat je met een gedownload cv doet valt onder jouw eigen verwerking; zie onze algemene voorwaarden en het privacybeleid.

Een status terugschrijven

PATCH/api/v1/kandidaten/{id}

Neem je iemand aan of wijs je hem af, dan kun je dat hier doorgeven. Hiervoor heb je een sleutel nodig die mag schrijven; dat vink je aan bij het aanmaken.

curl -X PATCH https://www.willwerk.nl/api/v1/kandidaten/118 \
  -H "Authorization: Bearer ww_jouw_sleutel" \
  -H "Content-Type: application/json" \
  -d '{"status": "aangenomen"}'

Toegestaan zijn gesprek_klant (je hebt hem gesproken of een gesprek gepland), aangenomen en afgewezen. Dit werkt bij kandidaten die op aangedragen of gesprek_klant staan.

Foutmeldingen

CodeWat er aan de hand is
401Geen sleutel meegestuurd, of hij is ingetrokken
403Je pakket heeft geen API-toegang, of de sleutel mag alleen lezen
404Bestaat niet, of hoort niet bij jouw bedrijf
409Deze bron_url staat al bij ons; het bestaande id staat erbij
422De vacature komt niet door onze controle; zie problemen
429Meer dan 1000 aanvragen in een uur

Elke fout komt terug als {"error": "uitleg in gewone taal"}.

Verkeerslimiet

Duizend aanvragen per uur per sleutel. Dat is ruim voor een koppeling die elke paar minuten kijkt of er iets nieuws is. Kom je eraan, haal dan meer per keer op met limit in plaats van vaker te vragen.

Wat je met de gegevens mag doen

Zolang wij kandidaatgegevens voor je bewaren, doen wij dat als jouw verwerker. Haal je ze via deze API op en zet je ze in je eigen systeem, dan ben je voor die kopie zelf verwerkingsverantwoordelijke. Dat is geen formaliteit: vanaf dat moment ga jij over de bewaartermijn, de beveiliging, en de vragen die een kandidaat over die gegevens stelt.

De volledige afspraak staat in paragraaf 3.11 en 3.12 van de algemene voorwaarden. Kort samengevat:

Je sleutel is een wachtwoord. Zet hem in een omgevingsvariabele of een kluis, niet in code die je deelt. Vermoed je dat iemand anders hem heeft, trek hem dan meteen in in je portaal.

Vragen

Loop je vast, mail ik@willwerk.nl met de aanvraag die misgaat en de foutmelding die je terugkreeg. Zet je sleutel er niet bij.