Get Job Candidates
curl --request POST \
--url https://api.linkupapi.com/v2/recruiter \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"account_id": "<string>",
"action": "<string>",
"params": {
"job_id": "<string>",
"count": 123,
"offset": 123,
"ratings": "<string>",
"sortType": "<string>",
"sortOrder": "<string>"
}
}
'import requests
url = "https://api.linkupapi.com/v2/recruiter"
payload = {
"account_id": "<string>",
"action": "<string>",
"params": {
"job_id": "<string>",
"count": 123,
"offset": 123,
"ratings": "<string>",
"sortType": "<string>",
"sortOrder": "<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({
account_id: '<string>',
action: '<string>',
params: {
job_id: '<string>',
count: 123,
offset: 123,
ratings: '<string>',
sortType: '<string>',
sortOrder: '<string>'
}
})
};
fetch('https://api.linkupapi.com/v2/recruiter', 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/v2/recruiter",
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([
'account_id' => '<string>',
'action' => '<string>',
'params' => [
'job_id' => '<string>',
'count' => 123,
'offset' => 123,
'ratings' => '<string>',
'sortType' => '<string>',
'sortOrder' => '<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/v2/recruiter"
payload := strings.NewReader("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"job_id\": \"<string>\",\n \"count\": 123,\n \"offset\": 123,\n \"ratings\": \"<string>\",\n \"sortType\": \"<string>\",\n \"sortOrder\": \"<string>\"\n }\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/v2/recruiter")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"job_id\": \"<string>\",\n \"count\": 123,\n \"offset\": 123,\n \"ratings\": \"<string>\",\n \"sortType\": \"<string>\",\n \"sortOrder\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.linkupapi.com/v2/recruiter")
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 \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"job_id\": \"<string>\",\n \"count\": 123,\n \"offset\": 123,\n \"ratings\": \"<string>\",\n \"sortType\": \"<string>\",\n \"sortOrder\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"candidates": [
{
"application_id": "26905743894",
"rating": "UNRATED",
"is_rejected": false,
"rejected_at": null,
"is_top_choice": false,
"top_choice_message": "",
"first_name": "Jane",
"last_name": "Doe",
"full_name": "Jane Doe",
"headline": "Digital Marketing Strategist | SEO, SEM & Analytics",
"public_identifier": "jane-doe-42",
"profile_url": "https://www.linkedin.com/in/jane-doe-42",
"location": "Paris, France",
"experiences": [
{
"title": "Digital Marketing Intern",
"company": "Acme Corp",
"company_url": "https://www.linkedin.com/company/acme-corp/",
"date_range": "2/2025 - 7/2025",
"description": ""
}
]
}
],
"total_results": 1,
"total_available_results": 81,
"pagination": {
"offset": 0,
"count": 1,
"next_offset": 1,
"has_more": true,
"results_per_page": 50,
"pages_fetched": 1
}
},
"metadata": {
"action": "get_candidates",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-04-26T10:35:00Z"
}
}
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "job_id is required."
},
"metadata": {
"action": "get_candidates",
"account_id": "your-account-id",
"credits_consumed": 0,
"timestamp": "2026-04-26T10:35:00Z"
}
}
Recruiting
Get Job Candidates
Retrieve candidates who applied to a specific job posting.
POST
/
v2
/
recruiter
Get Job Candidates
curl --request POST \
--url https://api.linkupapi.com/v2/recruiter \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"account_id": "<string>",
"action": "<string>",
"params": {
"job_id": "<string>",
"count": 123,
"offset": 123,
"ratings": "<string>",
"sortType": "<string>",
"sortOrder": "<string>"
}
}
'import requests
url = "https://api.linkupapi.com/v2/recruiter"
payload = {
"account_id": "<string>",
"action": "<string>",
"params": {
"job_id": "<string>",
"count": 123,
"offset": 123,
"ratings": "<string>",
"sortType": "<string>",
"sortOrder": "<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({
account_id: '<string>',
action: '<string>',
params: {
job_id: '<string>',
count: 123,
offset: 123,
ratings: '<string>',
sortType: '<string>',
sortOrder: '<string>'
}
})
};
fetch('https://api.linkupapi.com/v2/recruiter', 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/v2/recruiter",
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([
'account_id' => '<string>',
'action' => '<string>',
'params' => [
'job_id' => '<string>',
'count' => 123,
'offset' => 123,
'ratings' => '<string>',
'sortType' => '<string>',
'sortOrder' => '<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/v2/recruiter"
payload := strings.NewReader("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"job_id\": \"<string>\",\n \"count\": 123,\n \"offset\": 123,\n \"ratings\": \"<string>\",\n \"sortType\": \"<string>\",\n \"sortOrder\": \"<string>\"\n }\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/v2/recruiter")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"job_id\": \"<string>\",\n \"count\": 123,\n \"offset\": 123,\n \"ratings\": \"<string>\",\n \"sortType\": \"<string>\",\n \"sortOrder\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.linkupapi.com/v2/recruiter")
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 \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"job_id\": \"<string>\",\n \"count\": 123,\n \"offset\": 123,\n \"ratings\": \"<string>\",\n \"sortType\": \"<string>\",\n \"sortOrder\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"candidates": [
{
"application_id": "26905743894",
"rating": "UNRATED",
"is_rejected": false,
"rejected_at": null,
"is_top_choice": false,
"top_choice_message": "",
"first_name": "Jane",
"last_name": "Doe",
"full_name": "Jane Doe",
"headline": "Digital Marketing Strategist | SEO, SEM & Analytics",
"public_identifier": "jane-doe-42",
"profile_url": "https://www.linkedin.com/in/jane-doe-42",
"location": "Paris, France",
"experiences": [
{
"title": "Digital Marketing Intern",
"company": "Acme Corp",
"company_url": "https://www.linkedin.com/company/acme-corp/",
"date_range": "2/2025 - 7/2025",
"description": ""
}
]
}
],
"total_results": 1,
"total_available_results": 81,
"pagination": {
"offset": 0,
"count": 1,
"next_offset": 1,
"has_more": true,
"results_per_page": 50,
"pages_fetched": 1
}
},
"metadata": {
"action": "get_candidates",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-04-26T10:35:00Z"
}
}
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "job_id is required."
},
"metadata": {
"action": "get_candidates",
"account_id": "your-account-id",
"credits_consumed": 0,
"timestamp": "2026-04-26T10:35:00Z"
}
}
Overview
Returns the candidates who applied to a specific job posting. Pagination is offset-based — setcount for the page size and offset to skip ahead.
This endpoint consumes 1 credit per 10 results returned. The platform returns up to 50 candidates per internal request, so larger
count values trigger multiple upstream calls automatically. Ignore this if you’re on per-seat pricing: usage is unlimited.Request
string
required
Your API key for authentication.
string
required
The unique identifier of the account to use.
string
required
Must be
"get_candidates".object
required
Show params properties
Show params properties
string
required
The numeric job ID to retrieve candidates for.
integer
default:10
Number of candidates to return. Defaults to
10. Capped at 1000 per call.integer
default:0
Zero-indexed offset into the candidates list. Defaults to
0. Use pagination.next_offset from a previous response to fetch the next page.string
default:"GOOD_FIT,MAYBE,UNRATED,NOT_A_FIT"
Ratings to include, comma-separated. Defaults to all ratings.
string
default:"RELEVANCE"
RELEVANCE or APPLIED_DATE.string
default:"DESCENDING"
DESCENDING or ASCENDING.Response
boolean
Indicates whether the request was successful.
object
Show data properties
Show data properties
array
List of candidates.
Show candidate properties
Show candidate properties
string
Unique application ID — use it with
get_cv.string
Recruiter rating:
"UNRATED", "GOOD_FIT", "MAYBE", "NOT_A_FIT".boolean
true when the candidate is in the Rejected stage. Keep false to get the candidates in review.string
Rejection date (
YYYY-MM-DD HH:MM:SS), null when not rejected.boolean
true when the candidate marked the job as a top choice.string
Optional message left by the candidate.
string
First name.
string
Last name.
string
Full name.
string
Headline.
string
Vanity slug.
string
Public profile URL.
string
Candidate location.
array
Work experience entries with
title, company, company_url, date_range (e.g. "2/2025 - 7/2025"), description.integer
Number of candidates returned in this response.
integer
Total number of candidates that applied to the job.
object
Show pagination properties
Show pagination properties
integer
Offset of the first candidate in this response.
integer
Number of candidates returned (mirrors
total_results).integer
Offset to send as
offset in the next request. null when exhausted.boolean
true if more candidates are available.integer
Maximum batch size used per upstream request (50).
integer
Number of internal upstream batches consumed.
object
{
"success": true,
"data": {
"candidates": [
{
"application_id": "26905743894",
"rating": "UNRATED",
"is_rejected": false,
"rejected_at": null,
"is_top_choice": false,
"top_choice_message": "",
"first_name": "Jane",
"last_name": "Doe",
"full_name": "Jane Doe",
"headline": "Digital Marketing Strategist | SEO, SEM & Analytics",
"public_identifier": "jane-doe-42",
"profile_url": "https://www.linkedin.com/in/jane-doe-42",
"location": "Paris, France",
"experiences": [
{
"title": "Digital Marketing Intern",
"company": "Acme Corp",
"company_url": "https://www.linkedin.com/company/acme-corp/",
"date_range": "2/2025 - 7/2025",
"description": ""
}
]
}
],
"total_results": 1,
"total_available_results": 81,
"pagination": {
"offset": 0,
"count": 1,
"next_offset": 1,
"has_more": true,
"results_per_page": 50,
"pages_fetched": 1
}
},
"metadata": {
"action": "get_candidates",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-04-26T10:35:00Z"
}
}
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "job_id is required."
},
"metadata": {
"action": "get_candidates",
"account_id": "your-account-id",
"credits_consumed": 0,
"timestamp": "2026-04-26T10:35:00Z"
}
}
Was this page helpful?