Create Job
curl --request POST \
--url https://api.linkupapi.com/v1/recruiter/create \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"login_token": "<string>",
"company_url": "<string>",
"title": "<string>",
"place": "<string>",
"html_description": "<string>",
"employment_status": "<string>",
"workplace": "<string>",
"skills": [
{}
],
"screening_questions": [
{}
],
"auto_rejection_template": "<string>",
"contact_email": "<string>",
"country": "<string>"
}
'import requests
url = "https://api.linkupapi.com/v1/recruiter/create"
payload = {
"login_token": "<string>",
"company_url": "<string>",
"title": "<string>",
"place": "<string>",
"html_description": "<string>",
"employment_status": "<string>",
"workplace": "<string>",
"skills": [{}],
"screening_questions": [{}],
"auto_rejection_template": "<string>",
"contact_email": "<string>",
"country": "<string>"
}
headers = {
"x-api-key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
login_token: '<string>',
company_url: '<string>',
title: '<string>',
place: '<string>',
html_description: '<string>',
employment_status: '<string>',
workplace: '<string>',
skills: [{}],
screening_questions: [{}],
auto_rejection_template: '<string>',
contact_email: '<string>',
country: '<string>'
})
};
fetch('https://api.linkupapi.com/v1/recruiter/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.linkupapi.com/v1/recruiter/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'login_token' => '<string>',
'company_url' => '<string>',
'title' => '<string>',
'place' => '<string>',
'html_description' => '<string>',
'employment_status' => '<string>',
'workplace' => '<string>',
'skills' => [
[
]
],
'screening_questions' => [
[
]
],
'auto_rejection_template' => '<string>',
'contact_email' => '<string>',
'country' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.linkupapi.com/v1/recruiter/create"
payload := strings.NewReader("{\n \"login_token\": \"<string>\",\n \"company_url\": \"<string>\",\n \"title\": \"<string>\",\n \"place\": \"<string>\",\n \"html_description\": \"<string>\",\n \"employment_status\": \"<string>\",\n \"workplace\": \"<string>\",\n \"skills\": [\n {}\n ],\n \"screening_questions\": [\n {}\n ],\n \"auto_rejection_template\": \"<string>\",\n \"contact_email\": \"<string>\",\n \"country\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.linkupapi.com/v1/recruiter/create")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"login_token\": \"<string>\",\n \"company_url\": \"<string>\",\n \"title\": \"<string>\",\n \"place\": \"<string>\",\n \"html_description\": \"<string>\",\n \"employment_status\": \"<string>\",\n \"workplace\": \"<string>\",\n \"skills\": [\n {}\n ],\n \"screening_questions\": [\n {}\n ],\n \"auto_rejection_template\": \"<string>\",\n \"contact_email\": \"<string>\",\n \"country\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.linkupapi.com/v1/recruiter/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"login_token\": \"<string>\",\n \"company_url\": \"<string>\",\n \"title\": \"<string>\",\n \"place\": \"<string>\",\n \"html_description\": \"<string>\",\n \"employment_status\": \"<string>\",\n \"workplace\": \"<string>\",\n \"skills\": [\n {}\n ],\n \"screening_questions\": [\n {}\n ],\n \"auto_rejection_template\": \"<string>\",\n \"contact_email\": \"<string>\",\n \"country\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "Job posting created successfully",
"data": {
"job_posting_id": "4219038884",
"screening_questions_added": true
}
}
Recruiting
Create Job
Create a new job posting on LinkedIn
POST
/
v1
/
recruiter
/
create
Create Job
curl --request POST \
--url https://api.linkupapi.com/v1/recruiter/create \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"login_token": "<string>",
"company_url": "<string>",
"title": "<string>",
"place": "<string>",
"html_description": "<string>",
"employment_status": "<string>",
"workplace": "<string>",
"skills": [
{}
],
"screening_questions": [
{}
],
"auto_rejection_template": "<string>",
"contact_email": "<string>",
"country": "<string>"
}
'import requests
url = "https://api.linkupapi.com/v1/recruiter/create"
payload = {
"login_token": "<string>",
"company_url": "<string>",
"title": "<string>",
"place": "<string>",
"html_description": "<string>",
"employment_status": "<string>",
"workplace": "<string>",
"skills": [{}],
"screening_questions": [{}],
"auto_rejection_template": "<string>",
"contact_email": "<string>",
"country": "<string>"
}
headers = {
"x-api-key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
login_token: '<string>',
company_url: '<string>',
title: '<string>',
place: '<string>',
html_description: '<string>',
employment_status: '<string>',
workplace: '<string>',
skills: [{}],
screening_questions: [{}],
auto_rejection_template: '<string>',
contact_email: '<string>',
country: '<string>'
})
};
fetch('https://api.linkupapi.com/v1/recruiter/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.linkupapi.com/v1/recruiter/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'login_token' => '<string>',
'company_url' => '<string>',
'title' => '<string>',
'place' => '<string>',
'html_description' => '<string>',
'employment_status' => '<string>',
'workplace' => '<string>',
'skills' => [
[
]
],
'screening_questions' => [
[
]
],
'auto_rejection_template' => '<string>',
'contact_email' => '<string>',
'country' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.linkupapi.com/v1/recruiter/create"
payload := strings.NewReader("{\n \"login_token\": \"<string>\",\n \"company_url\": \"<string>\",\n \"title\": \"<string>\",\n \"place\": \"<string>\",\n \"html_description\": \"<string>\",\n \"employment_status\": \"<string>\",\n \"workplace\": \"<string>\",\n \"skills\": [\n {}\n ],\n \"screening_questions\": [\n {}\n ],\n \"auto_rejection_template\": \"<string>\",\n \"contact_email\": \"<string>\",\n \"country\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.linkupapi.com/v1/recruiter/create")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"login_token\": \"<string>\",\n \"company_url\": \"<string>\",\n \"title\": \"<string>\",\n \"place\": \"<string>\",\n \"html_description\": \"<string>\",\n \"employment_status\": \"<string>\",\n \"workplace\": \"<string>\",\n \"skills\": [\n {}\n ],\n \"screening_questions\": [\n {}\n ],\n \"auto_rejection_template\": \"<string>\",\n \"contact_email\": \"<string>\",\n \"country\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.linkupapi.com/v1/recruiter/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"login_token\": \"<string>\",\n \"company_url\": \"<string>\",\n \"title\": \"<string>\",\n \"place\": \"<string>\",\n \"html_description\": \"<string>\",\n \"employment_status\": \"<string>\",\n \"workplace\": \"<string>\",\n \"skills\": [\n {}\n ],\n \"screening_questions\": [\n {}\n ],\n \"auto_rejection_template\": \"<string>\",\n \"contact_email\": \"<string>\",\n \"country\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "Job posting created successfully",
"data": {
"job_posting_id": "4219038884",
"screening_questions_added": true
}
}
Create a complete job posting on LinkedIn with customizable fields, including job title, description, location, and screening questions. The job will be created in draft state.
This endpoint costs 5 credits per job posting. Ignore this if you’re on per-seat pricing: usage is unlimited.
Header Parameters
string
required
Your API key
Body Parameters
string
required
LinkedIn authentication cookie obtained from the login/verify process
string
required
URL of the LinkedIn company page (e.g., “https://www.linkedin.com/company/company-name/”)
string
required
Job title (e.g., “Senior Software Engineer”)
string
required
Job location (e.g., “Paris, France”)
string
required
Job description in HTML format. Supports basic HTML formatting (bold, lists, paragraphs)
string
default:"FULL_TIME"
Employment type. Options: FULL_TIME, PART_TIME, CONTRACT, TEMPORARY, VOLUNTEER, INTERNSHIP
string
default:"1"
Workplace type. Options: “1” (on-site), “2” (remote), “3” (hybrid)
array
List of skills required for the job (e.g., [“Python”, “Django”])
array
List of screening question objects. Each object in this array should contain the properties described below.
string
Template message for automatic rejections
string
default:""
Contact email for the job posting
string
default:"FR"
Country code for proxy selection. Available: (US, UK, FR, DE, NL, IT, IL, CA, BR, ES, IN)
Screening Question Object Properties
Each object in thescreening_questions array should have the following properties:
string
Template message for automatic rejections
string
default:""
Contact email for the job posting
string
default:"FR"
Country code for proxy selection. Available: (US, UK, FR, DE, NL, IT, IL, CA, BR, ES, IN)
Response
string
Request status (success/error/partial_success)
string
Status message
object
Response data container (on success)
string
LinkedIn job posting ID that can be used for other operations
boolean
Whether screening questions were successfully added
string
Additional error details (in case of error)
{
"status": "success",
"message": "Job posting created successfully",
"data": {
"job_posting_id": "4219038884",
"screening_questions_added": true
}
}
{
"status": "error",
"message": "Impossible de récupérer les informations de l'entreprise"
}
{
"status": "partial_success",
"message": "Offre créée mais erreur lors de l'ajout des questions: 400",
"job_posting_id": "4219038884",
"details": "Invalid question format"
}
Predefined Screening Question Types
You can use the following predefined question types in yourscreening_questions array:
Yes/No Questions
WORK_AUTHORIZATION: Verify if candidates are authorized to workURGENT_HIRING: Indicate urgent hiring needsREMOTE_WORK: Confirm if candidate can work remotelyHYBRID_WORK: Confirm if candidate can work in hybrid modeONSITE_WORK: Confirm if candidate can work on-siteDRUG_SCREENING: Verify willingness to undergo drug screeningDRIVERS_LICENSE: Verify if candidate has a driver’s licenseBACKGROUND_CHECK: Verify willingness to undergo background checksVISA_STATUS: Verify visa status
Numerical Questions
INDUSTRY_EXPERIENCE: Years of experience in a specific industry (requiresparameterValuewith industry name)(industry list:api.linkupapi.com/v1/tool/industries)PROFESSIONAL_EXPERIENCE: Years of general professional experience (requiresparameterValuewith field name)SKILL_COMPETENCE: Level of competence with a specific skill (requiresparameterValuewith skill name,skill list:(https://github.com/maciejszewczyk/linkedin-skills/blob/master/linkedin_skills.txt))TRANSACTION_AMOUNT: Average transaction amount (requiresparameterValue)
Education & Language
EDUCATION: Education level (requiresparameterValuewith education level)LANGUAGE: Language proficiency (requiresparameterValuewith language name and optionallanguageLevel)
Location
LOCATION: Location preference (requiresparameterValue)
Example - Creating a Job with Custom Questions
Here’s a complete example of creating a job with both custom and predefined questions:{
"login_token": "AQEDATQBr-0K3AA...",
"company_url": "https://www.linkedin.com/company/acme-corporation/",
"title": "Senior Software Developer",
"place": "Paris, France",
"html_description": "<p>We are seeking a <strong>talented developer</strong> to join our team.</p><ul><li>5+ years of experience with Python</li><li>Experience with cloud technologies</li><li>Strong problem-solving skills</li></ul>",
"employment_status": "FULL_TIME",
"workplace": "3",
"contact_email": "[email protected]",
"country": "FR",
"skills": ["Python", "Django", "AWS"],
"screening_questions": [
{
"type": "CUSTOM_QUESTION",
"questionText": "Are you comfortable with at least weekly travel to client sites?",
"format": "MULTIPLE_CHOICE",
"required": True
},
{
"type": "PROFESSIONAL_EXPERIENCE",
"parameterValue": "Python development",
"parameterDisplayText": "Python development",
"required": True,
"experienceYears": 3
},
{
"type": "LANGUAGE",
"parameterValue": "fr",
"parameterDisplayText": "French",
"languageLevel": "Professional"
},
{
"type": "SKILL_COMPETENCE",
"parameterValue": "Docker",
"parameterDisplayText": "Docker",
"favorableFloor": 2
},
{
"type": "EDUCATION",
"parameterValue": "BTS, DUT (ou diplôme de niveau Bac+2)",
"parameterDisplayText": "BTS, DUT (ou diplôme de niveau Bac+2)",
"required": true
},
{
"type": "DRUG_SCREENING",
"required": True
},
{
"type": "WORK_AUTHORIZATION",
"required": True
},
{
"type": "URGENT_HIRING",
"required": True
},
],
"auto_rejection_template": "Thank you for your interest in our position. After careful consideration, we've decided to pursue other candidates whose qualifications better match our current needs."
}
Was this page helpful?