Updated April 22, 2026
/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
| Parameter | Type | Description |
|---|---|---|
slug | string | The publication slug (URL-friendly identifier) |
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
language | string | - | ISO 639-1 language code (e.g., nl, en). Sets the locale for translated fields like education levels, job types, and department names. |
include_compensation | boolean | false | Include compensation details |
include_media | boolean | true | Include header image and media URLs |
include_company_name | boolean | false | Include company name in the company_location object (opt-in for privacy) |
Response Fields
The detail endpoint returns the following structure:
| Field | Type | Description | |
|---|---|---|---|
id | integer | Unique vacancy publication ID | |
slug | string | URL-friendly identifier | |
title | string | Vacancy title | |
summary | string | Brief description (HTML) | |
language | string | Language code (ISO 639-1) | |
published_at | string | ISO 8601 publication date | |
ends_at | string\ | null | ISO 8601 expiration date |
views_count | integer | Number of times viewed (incremented on each request) | |
header_image | object\ | null | Header image URLs in multiple sizes (Legacy, mapped to 'default' crop) |
images | object | Map of all configured image crops (keyed by configuration ID) | |
job_description | string | Full job description (HTML) | |
job_requirements | string | Job requirements (HTML) | |
job_offer | string | What the company offers (HTML) | |
company_description | string\ | null | Company description in the vacancy's language (falls back to first available language) |
location | object\ | null | Location details (office/branch location) |
company_location | object\ | null | Company location details (actual work site, for agency tenants) |
department | object\ | null | Department details |
hiring_manager | object\ | null | Hiring manager information |
education_levels | array | Required education levels | |
job_types | array | Employment types | |
experience_levels | array | Experience/seniority levels (e.g., Junior, Medior, Senior, Lead) | |
work_arrangement | object\ | null | Work model: on-site, hybrid, or remote |
tags | array | Job category tags (main and sub-categories) | |
language_proficiencies | array | Required language skills | |
application_url | string | URL to apply for this position | |
metadata | object | Additional vacancy metadata | |
compensation | object | Compensation 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_countis incremented with each request to this endpoint - The
header_imagefield is included by default (setinclude_media=falseto exclude it) - Core relationship fields (
location,company_location,department,hiring_manager) are always included, even whennull - The
compensationfield is only included wheninclude_compensation=trueis 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.