Skip to main content

Vacaturefacetten ophalen

NL EN

Bijgewerkt 22 april 2026

GET /api/v1/vacancies/facets
curl -X GET \
  "https://app.recruitsome.com/api/v1/vacancies/facets" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
const response = await fetch('https://app.recruitsome.com/api/v1/vacancies/facets', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Accept': 'application/json',
  },
});

const data = await response.json();
console.log(data);
use Illuminate\Support\Facades\Http;

$response = Http::withToken('YOUR_API_KEY')
    ->acceptJson()
    ->get('https://app.recruitsome.com/api/v1/vacancies/facets');

$data = $response->json();

Vacature-facetten ophalen

Het facets-endpoint levert geaggregeerde data over beschikbare filteropties voor vacatures. Dit is ideaal voor het bouwen van dynamische zoekinterfaces met facetnavigatie, waarbij gebruikers zien welke filters beschikbaar zijn en hoeveel resultaten elk filter zou opleveren.

Overzicht

Dit endpoint retourneert aantallen voor alle beschikbare filteropties, rekening houdend met eventueel actieve filters. Het is efficiënter dan ?include=facets gebruiken op het hoofdlijstendpoint wanneer je alleen facetdata nodig hebt zonder de daadwerkelijke vacaturelijsten.

Eenvoudig voorbeeld

Haal alle beschikbare facetten op zonder filters:

``bash cURL

curl -X GET https://app\.recruitsome\.com/api/v1/vacancies/facets \

-H "Authorization: Bearer YOUR_API_KEY"


javascript JavaScript

const response = await fetch('https://app\.recruitsome\.com/api/v1/vacancies/facets', {

headers: {

'Authorization': 'Bearer YOUR_API_KEY'

}

});

const facets = await response.json();


python Python

import requests

response = requests.get(

'https://app\.recruitsome\.com/api/v1/vacancies/facets',

headers={'Authorization': 'Bearer YOUR_API_KEY'}

)

facets = response.json()



Voorbeeld van een response

json

{

"data": {

"locations": [

{

"id": 1,

"name": "Amsterdam",

"city": "Amsterdam",

"country_code": "NL",

"country_name": "Netherlands",

"count": 45,

"selected": false

},

{

"id": 2,

"name": "Rotterdam",

"city": "Rotterdam",

"country_code": "NL",

"country_name": "Netherlands",

"count": 23,

"selected": false

},

{

"id": 3,

"name": "Utrecht",

"city": "Utrecht",

"country_code": "NL",

"country_name": "Netherlands",

"count": 18,

"selected": false

}

],

"company_locations": [

{

"id": 10,

"name": "Shell Pernis Refinery",

"city": "Rotterdam",

"country_code": "NL",

"country_name": "Netherlands",

"count": 12,

"selected": false

},

{

"id": 11,

"name": "ASML Veldhoven HQ",

"city": "Veldhoven",

"country_code": "NL",

"country_name": "Netherlands",

"count": 8,

"selected": false

}

],

"departments": [

{

"id": 5,

"name": "Engineering",

"count": 32,

"selected": false

},

{

"id": 6,

"name": "Sales",

"count": 21,

"selected": false

},

{

"id": 7,

"name": "Marketing",

"count": 15,

"selected": false

}

],

"experience_levels": [

{

"id": 2,

"name": "Junior",

"count": 20,

"selected": false

},

{

"id": 3,

"name": "Medior",

"count": 35,

"selected": false

},

{

"id": 4,

"name": "Senior",

"count": 28,

"selected": false

}

],

"job_types": [

{

"id": 1,

"name": "Full-time",

"count": 68,

"selected": false

},

{

"id": 2,

"name": "Part-time",

"count": 12,

"selected": false

},

{

"id": 3,

"name": "Contract",

"count": 8,

"selected": false

}

],

"education_levels": [

{

"id": 8,

"name": "Bachelor",

"count": 45,

"selected": false

},

{

"id": 9,

"name": "Master",

"count": 28,

"selected": false

}

],

"tags": [

{

"id": 1,

"name": "Engineering",

"count": 42,

"selected": false,

"sub_tags": [

{

"id": 5,

"name": "Software Engineer",

"count": 25,

"selected": false

},

{

"id": 6,

"name": "DevOps Engineer",

"count": 12,

"selected": false

}

]

},

{

"id": 2,

"name": "Sales",

"count": 28,

"selected": false,

"sub_tags": [

{

"id": 10,

"name": "Account Executive",

"count": 15,

"selected": false

}

]

}

],

"languages": [

{

"code": "en",

"name": "English",

"count": 52,

"selected": false

},

{

"code": "nl",

"name": "Nederlands",

"count": 34,

"selected": false

}

]

},

"meta": {

"generated_at": "2024-01-20T10:30:00Z",

"filters_applied": []

}

}

Voorbeeld met filters

Haal facetten op met actieve filters om te zien hoe selecties andere opties beïnvloeden:

bash cURL

curl -X GET "https://app\.recruitsome\.com/api/v1/vacancies/facets?\

location_id[]=1&\

language=en" \

-H "Authorization: Bearer YOUR_API_KEY"


javascript JavaScript

const params = new URLSearchParams({

'location_id[]': 1,

'language': 'en'

});

const response = await fetch(

https://app\.recruitsome\.com/api/v1/vacancies/facets?${params},

{

headers: {

'Authorization': 'Bearer YOUR_API_KEY'

}

}

);

const facets = await response.json();


python Python

import requests

params = {

'location_id[]': 1,

'language': 'en'

}

response = requests.get(

'https://app\.recruitsome\.com/api/v1/vacancies/facets',

headers={'Authorization': 'Bearer YOUR_API_KEY'},

params=params

)

facets = response.json()



Wanneer filters worden toegepast:

  • Het selected-veld toont true voor actieve filters
  • Aantallen in andere facetcategorieën worden bijgewerkt om alleen de gefilterde resultaten weer te geven
  • De filters_applied-array in meta toont welke filters actief zijn

Queryparameters

ParameterTypeVerplichtBeschrijving
languagestringNeeFilter op taalcode (bijv. 'en', 'nl', 'de')
location_id[]arrayNeeFilter op locatie-ID's (ondersteunt meerdere)
company_location_id[]arrayNeeFilter op bedrijfslocatie-ID's (werklocatie, voor uitzendbureaus)
department_id[]arrayNeeFilter op afdelings-ID's (ondersteunt meerdere)
searchstringNeeZoek in titel en samenvatting
experience_levels[]arrayNeeFilter op ervaringsniveau-ID's
education_levels[]arrayNeeFilter op opleidingsniveau-ID's
job_types[]arrayNeeFilter op dienstverband-ID's
tags[]arrayNeeFilter op tag-ID's (hoofdtags worden doorvertaald naar subtags)

<div class="not-prose rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-800"><p class="mt-1 text-sm text-gray-700 dark:text-gray-300">De company_location_id-parameter ondersteunt arraynotatie op zowel dit endpoint als het hoofdendpoint voor vacatures. location_id en department_id ondersteunen arraynotatie alleen op dit facets-endpoint.</p></div>

Facetaantallen begrijpen

Zonder filters

Wanneer er geen filters zijn toegepast, toont elk facet het totale aantal actieve vacatures met dat kenmerk:

  • Locatie "Amsterdam" aantal: 45 = Totaal aantal actieve vacatures in Amsterdam
  • Afdeling "Engineering" aantal: 32 = Totaal aantal actieve vacatures bij Engineering

Met actieve filters

Wanneer filters zijn toegepast, tonen de aantallen hoeveel resultaten overeenkomen met zowel het facet ALS de huidige filters:

  • Bij filteren op Amsterdam: Afdeling "Engineering" aantal: 12 = Vacatures in Amsterdam EN Engineering
  • De locatie Amsterdam zelf toont "selected": true

Responsstructuur

Facet-objectstructuur

Elk facettype bevat een array van opties met:

VeldTypeBeschrijving
idintegerUnieke identifier voor de optie
namestringLeesbare naam (vertaald)
countintegerAantal vacatures met dit kenmerk
selectedbooleanOf dit filter momenteel actief is

Locatiefacetten

Locatiefacetten bevatten aanvullende geografische informatie:

VeldTypeBeschrijving
idintegerUnieke locatie-identifier
namestringLocatienaam
citystring\nullPlaatsnaam (uit het locality-veld)
country_codestring\nullISO 3166-1 alpha-2 landcode
country_namestring\nullVolledige landnaam in de huidige taalinstelling
countintegerAantal vacatures op deze locatie
selectedbooleanOf dit filter momenteel actief is

<div class="not-prose rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-800"><p class="mt-1 text-sm text-gray-700 dark:text-gray-300">Voor remote functies of locaties zonder specifieke stad kan het city-veld null zijn.</p></div>

Bedrijfslocatiefacetten

Bedrijfslocatiefacetten vertegenwoordigen de daadwerkelijke werklocaties (locaties van het opdrachtgevende bedrijf) voor uitzend- en detacheringstenants. Deze array is leeg voor niet-uitzendtenants of wanneer er geen vacatures aan een bedrijfslocatie zijn gekoppeld.

VeldTypeBeschrijving
idintegerUnieke bedrijfslocatie-identifier
namestringNaam van de bedrijfslocatie
citystring\nullPlaatsnaam (uit het locality-veld)
country_codestring\nullISO 3166-1 alpha-2 landcode
country_namestring\nullVolledige landnaam in de huidige taalinstelling
countintegerAantal vacatures op deze werklocatie
selectedbooleanOf dit filter momenteel actief is

<div class="not-prose rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-800"><p class="mt-1 text-sm text-gray-700 dark:text-gray-300">Het company_locations-facet bevat niet de bedrijfsnaam om onbedoelde onthulling van klantrelaties te voorkomen. Gebruik de include_company_name-parameter op de vacaturelijst-/detail-endpoints als je bedrijfsnamen nodig hebt.</p></div>

Tagfacetten (hiërarchisch)

Tagfacetten gebruiken een hiërarchische structuur met hoofdcategorieën die geneste subtags bevatten:

VeldTypeBeschrijving
idintegerUnieke tag-identifier
namestringTagnaam (vertaald)
countintegerTotaal aantal vacatures in deze categorie (inclusief subtags)
selectedbooleanOf dit filter momenteel actief is
sub_tagsarrayArray van subcategorietags

Elk sub_tags-item bevat: id, name, count en selected.

<div class="not-prose rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-800"><p class="mt-1 text-sm text-gray-700 dark:text-gray-300">Bij het filteren op een hoofdtag (bijv. "Engineering") worden alle vacatures die getagd zijn met een van de bijbehorende subtags automatisch in de resultaten opgenomen.</p></div>

Taalfacetten

Taalfacetten hebben een iets andere structuur:

VeldTypeBeschrijving
codestringISO 639-1 taalcode
namestringTaalnaam
countintegerAantal vacatures in deze taal
selectedbooleanOf dit filter momenteel actief is

Toepassingen

Dynamische filters bouwen

Gebruik facetdata om filterinterfaces te maken die beschikbare opties en aantallen tonen:

javascript

// Bouw een locatiefilter-dropdown met uitgebreide geografische info

const locationFilter = facets.data.locations.map(location => ({

value: location.id,

label: ${location.name} (${location.count}),

description: location.city && location.country_name

? ${location.city}, ${location.country_name}

: location.country_name || '',

disabled: location.count === 0,

checked: location.selected

}));

// Voorbeelduitvoer:

// {

// value: 1,

// label: "Amsterdam Office (45)",

// description: "Amsterdam, Netherlands",

// disabled: false,

// checked: false

// }


Slimme filterupdates

Wanneer een gebruiker een filter selecteert, haal dan bijgewerkte facetten op om te tonen hoe dit andere opties beïnvloedt:

javascript

async function onFilterChange(filters) {

// Haal nieuwe facetten op met huidige filters

const facets = await fetchFacets(filters);

// Werk de UI bij om nieuwe aantallen te tonen

updateFilterCounts(facets);

// Schakel opties zonder resultaten uit

disableEmptyFilters(facets);

}


Filteropties vooraf laden

Laad facetten bij het laden van de pagina om direct beschikbare filters te tonen:

javascript

// Bij het laden van de pagina

const [vacancies, facets] = await Promise.all([

fetchVacancies({ page: 1 }),

fetchFacets({})

]);

// Initialiseer filters met facetdata

initializeFilters(facets);


Prestatieoverwegingen

  1. Caching: Facetdata verandert minder vaak dan vacatureoverzichten, waardoor het ideaal is voor caching
  2. Parallel laden: Haal facetten parallel op met de initiële vacaturedata voor snellere laadtijden
  3. Debouncing: Gebruik debouncing bij het implementeren van live filterupdates om overmatige API-aanroepen te voorkomen
  4. Voorwaardelijke updates: Haal facetten alleen opnieuw op wanneer filters daadwerkelijk wijzigen

Foutmeldingen

Ongeldige filterparameter

json

{

"message": "The given data was invalid.",

"errors": {

"location_id.0": ["The location_id.0 must be a valid location."]

}

}


API-toegang uitgeschakeld

json

{

"message": "API access is not enabled for this tenant."

}

``

Best practices

  1. Cache facetresultaten: Implementeer client-side caching met een passende TTL
  2. Lege statussen afhandelen: Ontwerp de UI zodat facetten met nul resultaten netjes worden weergegeven
  3. Progressive enhancement: Laad de initiële pagina met basisfilters en verrijk deze met facetdata
  4. Gebundelde updates: Wanneer meerdere filters wijzigen, verwerk ze samen in één enkel verzoek
  5. Laadstatussen: Toon laadindicatoren tijdens het ophalen van bijgewerkte facetten