Skip to main content

Vacancy Details

NL EN

Updated April 22, 2026

GET /api/v1/vacancies/{slug}
curl -X GET \
  "https://app.recruitsome.com/api/v1/vacancies/{slug}" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
const response = await fetch('https://app.recruitsome.com/api/v1/vacancies/{slug}', {
  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/{slug}');

$data = $response->json();

Vacancy Details

Retrieve full details for a specific vacancy publication.

Endpoint

GET /api/v1/vacancies/{slug}

Path Parameters

ParameterTypeDescription
slugstringThe publication slug (URL-friendly identifier)

Query Parameters

ParameterTypeDefaultDescription
languagestring-ISO 639-1 language code (e.g., nl, en). Sets the locale for translated fields like education levels, job types, and department names.
include_compensationbooleanfalseInclude compensation details
include_mediabooleantrueInclude header image and media URLs
include_company_namebooleanfalseInclude company name in the company_location object (opt-in for privacy)

Response Fields

The detail endpoint returns the following structure:

FieldTypeDescription
idintegerUnique vacancy publication ID
slugstringURL-friendly identifier
titlestringVacancy title
summarystringBrief description (HTML)
languagestringLanguage code (ISO 639-1)
published_atstringISO 8601 publication date
ends_atstring\nullISO 8601 expiration date
views_countintegerNumber of times viewed (incremented on each request)
header_imageobject\nullHeader image URLs in multiple sizes (Legacy, mapped to 'default' crop)
imagesobjectMap of all configured image crops (keyed by configuration ID)
job_descriptionstringFull job description (HTML)
job_requirementsstringJob requirements (HTML)
job_offerstringWhat the company offers (HTML)
company_descriptionstring\nullCompany description in the vacancy's language (falls back to first available language)
locationobject\nullLocation details (office/branch location)
company_locationobject\nullCompany location details (actual work site, for agency tenants)
departmentobject\nullDepartment details
hiring_managerobject\nullHiring manager information
education_levelsarrayRequired education levels
job_typesarrayEmployment types
experience_levelsarrayExperience/seniority levels (e.g., Junior, Medior, Senior, Lead)
work_arrangementobject\nullWork model: on-site, hybrid, or remote
tagsarrayJob category tags (main and sub-categories)
language_proficienciesarrayRequired language skills
application_urlstringURL to apply for this position
metadataobjectAdditional vacancy metadata
compensationobjectCompensation details (only when include_compensation=true)

Object Structures

Images Object (New)

Returns a map of all configured image crops. The 'default' key corresponds to the legacy header_image URL.

{

"default": {

"url": "https://...",

"width": 1200,

"height": 675,

"mime_type": "image/jpeg"

},

"narrow_casting": {

"url": "https://...",

"width": 1080,

"height": 1920,

"mime_type": "image/jpeg"

}

}

Header Image Object (Legacy)

{

"small": "https://...",

"medium": "https://...",

"large": "https://...",

"xlarge": "https://...",

"original": "https://..."

}

Location Object

{

"id": 123,

"name": "Amsterdam Office",

"city": "Amsterdam",

"country_code": "NL",

"country_name": "Netherlands"

}

Company Location Object

The work site location for agency vacancies. Returns null for non-agency tenants or when no company location is assigned.

{

"id": 789,

"name": "Shell Pernis Refinery",

"city": "Rotterdam",

"country_code": "NL",

"country_name": "Netherlands",

"company_name": "Shell Nederland B.V."

}

The company_name field is only included when include_company_name=true is passed. This is opt-in to prevent accidentally exposing which client company an agency is recruiting for.

Department Object

{

"id": 456,

"name": "Engineering Department"

}

Hiring Manager Object

{

"given_name": "John",

"family_name": "Doe",

"full_name": "John Doe",

"job_title": "Engineering Manager",

"email": "[email protected]",

"avatar": {

"small": "https://...",

"medium": "https://...",

"large": "https://...",

"xlarge": "https://...",

"original": "https://..."

}

}

Education Level Object

{

"id": 1,

"name": "Bachelor"

}

Job Type Object

{

"id": 1,

"name": "Full-time"

}

Experience Level Object

{

"id": 3,

"name": "Senior"

}

Possible values: Junior, Medior, Senior, Lead. Returns an empty array when no experience level is assigned.

Work Arrangement Object

{

"value": "Hybrid remote",

"label": "Hybride"

}

The value field contains the canonical identifier (on-site, Fully remote, Hybrid remote). The label is the localized display name (respects the language query parameter).

Tag Object

{

"id": 5,

"name": "Software Engineer",

"type": "sub",

"parent_id": 1

}

The type field indicates whether the tag is a main category or a sub category. Main tags have parent_id: null.

Language Proficiency Object

{

"language_code": "en",

"speaking_level": "Professional",

"reading_level": "Professional",

"writing_level": "Professional"

}

Metadata Object

{

"status": "active"

}

Compensation Object (when include_compensation=true)

The compensation object contains salary, hours, and holidays information. Data is resolved using a priority chain:

  • Salary: from the vacancy's own fields (salary_min_cents, salary_max_cents)
  • Hours: from the vacancy's own fields, falling back to the linked employment conditions (CompanyRemuneration), then company defaults
  • Holidays: from the linked employment conditions (CompanyRemuneration), falling back to company defaults

{

"salary": {

"min": 3500,

"max": 5000,

"currency": "EUR",

"period": "monthly"

},

"hours": {

"min_per_week": 32,

"max_per_week": 40

},

"holidays": {

"total_days": 38,

"breakdown": {

"statutory": 20,

"non_statutory": 5,

"adv": 13

}

}

}

Each section is omitted when no data is available. For example, a vacancy with no salary set will not have a salary key in the compensation object.

The compensation object only includes salary, hours, and holidays. Benefits such as pension, holiday allowance, thirteenth month, travel allowance, work-from-home allowance, and other employment conditions are not exposed via the API.

Example Request

Basic Request

curl -X GET https://api.example.com/api/v1/vacancies/senior-developer-position \

-H "Authorization: Bearer YOUR_API_TOKEN"

With Language (Dutch)

curl -X GET "https://api.example.com/api/v1/vacancies/senior-developer-position?language=nl" \

-H "Authorization: Bearer YOUR_API_TOKEN"

With Compensation

curl -X GET "https://api.example.com/api/v1/vacancies/senior-developer-position?include_compensation=true&language=nl" \

-H "Authorization: Bearer YOUR_API_TOKEN"

Example Response

Without Compensation

{

"data": {

"id": 123,

"slug": "senior-developer-position",

"title": "Senior Software Developer",

"summary": "Join our team to build innovative solutions...",

"language": "en",

"published_at": "2024-01-15T09:00:00+00:00",

"ends_at": "2024-02-15T23:59:59+00:00",

"views_count": 42,

"header_image": {

"small": "https://cdn.example.com/images/header-small.jpg",

"medium": "https://cdn.example.com/images/header-medium.jpg",

"large": "https://cdn.example.com/images/header-large.jpg",

"xlarge": "https://cdn.example.com/images/header-xlarge.jpg",

"original": "https://cdn.example.com/images/header.jpg"

},

"images": {

"default": {

"url": "https://cdn.example.com/images/header-large.jpg",

"width": 1200,

"height": 675,

"mime_type": "image/jpeg"

}

},

"job_description": "<h2>About the Role</h2><p>We are looking for a Senior Software Developer...</p>",

"job_requirements": "<h2>Requirements</h2><ul><li>5+ years experience</li><li>PHP expertise</li></ul>",

"job_offer": "<h2>What We Offer</h2><ul><li>Competitive salary</li><li>Great benefits</li></ul>",

"company_description": "<p>We are a leading technology company focused on innovative solutions...</p>",

"location": {

"id": 1,

"name": "Amsterdam Office",

"city": "Amsterdam",

"country_code": "NL",

"country_name": "Netherlands"

},

"company_location": null,

"department": {

"id": 5,

"name": "Engineering"

},

"hiring_manager": {

"given_name": "John",

"family_name": "Doe",

"full_name": "John Doe",

"job_title": "Engineering Manager",

"email": "[email protected]",

"avatar": null

},

"education_levels": [

{

"id": 1,

"name": "Bachelor"

},

{

"id": 2,

"name": "Master"

}

],

"job_types": [

{

"id": 1,

"name": "Full-time"

}

],

"experience_levels": [

{

"id": 3,

"name": "Senior"

}

],

"work_arrangement": {

"value": "Hybrid remote",

"label": "Hybrid"

},

"tags": [

{

"id": 1,

"name": "Engineering",

"type": "main",

"parent_id": null

},

{

"id": 5,

"name": "Software Engineer",

"type": "sub",

"parent_id": 1

}

],

"language_proficiencies": [

{

"language_code": "en",

"speaking_level": "Professional",

"reading_level": "Professional",

"writing_level": "Professional"

}

],

"application_url": "https://careers.example.com/senior-developer-position",

"metadata": {

"status": "active"

}

}

}

With Compensation

The response includes all fields from above, plus a compensation object with the structure shown in the Compensation Object section.

Notes

  • The views_count is incremented with each request to this endpoint
  • The header_image field is included by default (set include_media=false to exclude it)
  • Core relationship fields (location, company_location, department, hiring_manager) are always included, even when null
  • The compensation field is only included when include_compensation=true is specified
  • Education levels, job types, and tags arrays may be empty if none are specified
  • Salary amounts are in the base currency unit (e.g., 3500 = €3,500)
  • Compensation uses a priority chain: vacancy fields → employment conditions (CompanyRemuneration) → company defaults
  • Empty compensation sections (salary, hours, holidays) are omitted from the response

Localization

When the language parameter is provided, the following fields are returned in the specified language:

  • education_levels[].name - Translated education level names (e.g., "Middelbaar onderwijs" for Dutch)
  • job_types[].name - Translated job type names (e.g., "Voltijd" for Dutch)
  • department.name - Department name (if translations are available)

If no language parameter is provided, the API returns values in the application's default locale.