Job Details
curl --request POST \
--url https://api.datamagnet.co/api/v1/jobs/detail \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"job_id": "<string>",
"url": "<string>",
"include_hiring_team": true
}
'import requests
url = "https://api.datamagnet.co/api/v1/jobs/detail"
payload = {
"job_id": "<string>",
"url": "<string>",
"include_hiring_team": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({job_id: '<string>', url: '<string>', include_hiring_team: true})
};
fetch('https://api.datamagnet.co/api/v1/jobs/detail', 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.datamagnet.co/api/v1/jobs/detail",
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([
'job_id' => '<string>',
'url' => '<string>',
'include_hiring_team' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.datamagnet.co/api/v1/jobs/detail"
payload := strings.NewReader("{\n \"job_id\": \"<string>\",\n \"url\": \"<string>\",\n \"include_hiring_team\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.datamagnet.co/api/v1/jobs/detail")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"job_id\": \"<string>\",\n \"url\": \"<string>\",\n \"include_hiring_team\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datamagnet.co/api/v1/jobs/detail")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"job_id\": \"<string>\",\n \"url\": \"<string>\",\n \"include_hiring_team\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "response retrieved successfully",
"data": {
"title": "Generative AI Engineer",
"standardized_title": "Generative AI Engineer",
"description": "🚀 HCLTech Exclusive Walk-In Drive | AIML Developer - Are you passionate about Artificial Intelligence, Machine Learning, and Generative AI?...",
"description_html": "<p>🚀 <strong>HCLTech Exclusive Walk-In Drive | AIML Developer </strong>- Are you passionate about...</p><ul><li>Lead AI/ML solution development using Python</li></ul>",
"location": "Noida, Uttar Pradesh, India",
"location_id": "104869687",
"employment_status": "Full-time",
"is_remote_allowed": false,
"is_third_party_sourced": false,
"listed_at": "2026-07-21T13:36:54Z",
"expire_at": "2026-08-20T13:36:54Z",
"closed_at": null,
"job_url": "https://www.linkedin.com/jobs/view/4443378596",
"experience_level": "Associate",
"industries": ["IT Services and IT Consulting"],
"job_functions": ["Engineering", "Research"],
"is_new": false,
"original_listed_at": "2026-07-21T13:36:54Z",
"job_state": "LISTED",
"workplace_types": ["ONSITE"],
"country_code": "in",
"job_posting_id": "4443378596",
"is_reposted": false,
"job_application_limit_reached": false,
"eligible_for_referrals": false,
"posted_time_ago": "3 weeks ago",
"seniority_level": "Associate",
"salary": null,
"salary_min": null,
"salary_max": null,
"salary_currency": null,
"salary_period": null,
"benefits": null,
"required_skills": [],
"applicant_tracking_system": "LinkedIn",
"total_applies": 0,
"total_views": 0,
"is_application_limit_reached": false,
"application_url": "https://www.linkedin.com/job-apply/4443378596",
"is_easy_apply": true,
"applicant_count_text": null,
"company_info": {
"name": "HCLTech",
"description": "HCLTech is a global technology company, home to more than 223,000 people across 60 countries...",
"staff_count": 257915,
"industries": ["IT Services and IT Consulting"],
"specialities": ["Manufacturing", "Aerospace & Defense", "Financial Services", "Telecom"],
"universal_name": "hcltech",
"headquarters": {
"line1": null,
"city": "Noida",
"geographicArea": "Uttar Pradesh",
"postalCode": "201301",
"country": "IN",
"$type": "com.linkedin.common.Address"
},
"url": "https://www.linkedin.com/company/hcltech",
"logo_url": "https://media.licdn.com/dms/image/v2/C4D0BAQF-RIoeeMTMKQ/company-logo_200_200/...",
"background_cover_url": "https://media.licdn.com/dms/image/v2/D4D3DAQEVwVTGwE1eXA/image-scale_191_1128/...",
"company_id": "1756",
"website": null,
"followers": 9571613,
"company_size": "10001+",
"company_type": null,
"founded_year": null
}
},
"credit_used": 1,
"credit_addon": 0
}
Job Details
Fetch a LinkedIn job posting by job ID or URL — title, description, location, seniority, employment type, workplace type, apply links, application counts and the hiring company.
POST
/
api
/
v1
/
jobs
/
detail
Job Details
curl --request POST \
--url https://api.datamagnet.co/api/v1/jobs/detail \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"job_id": "<string>",
"url": "<string>",
"include_hiring_team": true
}
'import requests
url = "https://api.datamagnet.co/api/v1/jobs/detail"
payload = {
"job_id": "<string>",
"url": "<string>",
"include_hiring_team": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({job_id: '<string>', url: '<string>', include_hiring_team: true})
};
fetch('https://api.datamagnet.co/api/v1/jobs/detail', 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.datamagnet.co/api/v1/jobs/detail",
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([
'job_id' => '<string>',
'url' => '<string>',
'include_hiring_team' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.datamagnet.co/api/v1/jobs/detail"
payload := strings.NewReader("{\n \"job_id\": \"<string>\",\n \"url\": \"<string>\",\n \"include_hiring_team\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.datamagnet.co/api/v1/jobs/detail")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"job_id\": \"<string>\",\n \"url\": \"<string>\",\n \"include_hiring_team\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datamagnet.co/api/v1/jobs/detail")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"job_id\": \"<string>\",\n \"url\": \"<string>\",\n \"include_hiring_team\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "response retrieved successfully",
"data": {
"title": "Generative AI Engineer",
"standardized_title": "Generative AI Engineer",
"description": "🚀 HCLTech Exclusive Walk-In Drive | AIML Developer - Are you passionate about Artificial Intelligence, Machine Learning, and Generative AI?...",
"description_html": "<p>🚀 <strong>HCLTech Exclusive Walk-In Drive | AIML Developer </strong>- Are you passionate about...</p><ul><li>Lead AI/ML solution development using Python</li></ul>",
"location": "Noida, Uttar Pradesh, India",
"location_id": "104869687",
"employment_status": "Full-time",
"is_remote_allowed": false,
"is_third_party_sourced": false,
"listed_at": "2026-07-21T13:36:54Z",
"expire_at": "2026-08-20T13:36:54Z",
"closed_at": null,
"job_url": "https://www.linkedin.com/jobs/view/4443378596",
"experience_level": "Associate",
"industries": ["IT Services and IT Consulting"],
"job_functions": ["Engineering", "Research"],
"is_new": false,
"original_listed_at": "2026-07-21T13:36:54Z",
"job_state": "LISTED",
"workplace_types": ["ONSITE"],
"country_code": "in",
"job_posting_id": "4443378596",
"is_reposted": false,
"job_application_limit_reached": false,
"eligible_for_referrals": false,
"posted_time_ago": "3 weeks ago",
"seniority_level": "Associate",
"salary": null,
"salary_min": null,
"salary_max": null,
"salary_currency": null,
"salary_period": null,
"benefits": null,
"required_skills": [],
"applicant_tracking_system": "LinkedIn",
"total_applies": 0,
"total_views": 0,
"is_application_limit_reached": false,
"application_url": "https://www.linkedin.com/job-apply/4443378596",
"is_easy_apply": true,
"applicant_count_text": null,
"company_info": {
"name": "HCLTech",
"description": "HCLTech is a global technology company, home to more than 223,000 people across 60 countries...",
"staff_count": 257915,
"industries": ["IT Services and IT Consulting"],
"specialities": ["Manufacturing", "Aerospace & Defense", "Financial Services", "Telecom"],
"universal_name": "hcltech",
"headquarters": {
"line1": null,
"city": "Noida",
"geographicArea": "Uttar Pradesh",
"postalCode": "201301",
"country": "IN",
"$type": "com.linkedin.common.Address"
},
"url": "https://www.linkedin.com/company/hcltech",
"logo_url": "https://media.licdn.com/dms/image/v2/C4D0BAQF-RIoeeMTMKQ/company-logo_200_200/...",
"background_cover_url": "https://media.licdn.com/dms/image/v2/D4D3DAQEVwVTGwE1eXA/image-scale_191_1128/...",
"company_id": "1756",
"website": null,
"followers": 9571613,
"company_size": "10001+",
"company_type": null,
"founded_year": null
}
},
"credit_used": 1,
"credit_addon": 0
}
Job Details
Cost:1 credit / successful request. (include_hiring_team adds 1 credit, charged only when the section is returned.)
Get structured data for a single LinkedIn job posting. Provide either the numeric job ID or any LinkedIn job URL — the API extracts the ID for you.
data is the posting itself: its own fields, the apply counts and links alongside them, and the hiring company nested under company_info. Every request returns the same set of keys; a field a posting does not publish comes back as null rather than being omitted, so your parsing code never has to branch.
Job details endpoint
Required attributes
string
The numeric LinkedIn job posting ID, e.g.
"4443378596".Either job_id or url is required. If both are supplied, job_id wins.string
Any LinkedIn job URL. The posting ID is extracted automatically from all common formats:
https://www.linkedin.com/jobs/view/4443378596https://www.linkedin.com/jobs/view/generative-ai-engineer-at-hcltech-4443378596https://www.linkedin.com/jobs/search/?currentJobId=4443378596
Optional attributes
boolean
default:"false"
Adds the
hiring_team key: the job poster and any recruiters LinkedIn lists on the posting, with their name, headline, profile URL and photo.Costs an additional 1 credit, charged only when the section is returned. A posting with nobody listed returns an empty members array and is billed; a posting whose hiring team could not be retrieved omits the key entirely and is not billed.This endpoint also accepts
GET with the same attributes as query parameters, e.g.
GET /api/v1/jobs/detail?job_id=4443378596&include_hiring_team=true.Response
{
"success": true,
"message": "response retrieved successfully",
"data": {
"title": "Generative AI Engineer",
"standardized_title": "Generative AI Engineer",
"description": "🚀 HCLTech Exclusive Walk-In Drive | AIML Developer - Are you passionate about Artificial Intelligence, Machine Learning, and Generative AI?...",
"description_html": "<p>🚀 <strong>HCLTech Exclusive Walk-In Drive | AIML Developer </strong>- Are you passionate about...</p><ul><li>Lead AI/ML solution development using Python</li></ul>",
"location": "Noida, Uttar Pradesh, India",
"location_id": "104869687",
"employment_status": "Full-time",
"is_remote_allowed": false,
"is_third_party_sourced": false,
"listed_at": "2026-07-21T13:36:54Z",
"expire_at": "2026-08-20T13:36:54Z",
"closed_at": null,
"job_url": "https://www.linkedin.com/jobs/view/4443378596",
"experience_level": "Associate",
"industries": ["IT Services and IT Consulting"],
"job_functions": ["Engineering", "Research"],
"is_new": false,
"original_listed_at": "2026-07-21T13:36:54Z",
"job_state": "LISTED",
"workplace_types": ["ONSITE"],
"country_code": "in",
"job_posting_id": "4443378596",
"is_reposted": false,
"job_application_limit_reached": false,
"eligible_for_referrals": false,
"posted_time_ago": "3 weeks ago",
"seniority_level": "Associate",
"salary": null,
"salary_min": null,
"salary_max": null,
"salary_currency": null,
"salary_period": null,
"benefits": null,
"required_skills": [],
"applicant_tracking_system": "LinkedIn",
"total_applies": 0,
"total_views": 0,
"is_application_limit_reached": false,
"application_url": "https://www.linkedin.com/job-apply/4443378596",
"is_easy_apply": true,
"applicant_count_text": null,
"company_info": {
"name": "HCLTech",
"description": "HCLTech is a global technology company, home to more than 223,000 people across 60 countries...",
"staff_count": 257915,
"industries": ["IT Services and IT Consulting"],
"specialities": ["Manufacturing", "Aerospace & Defense", "Financial Services", "Telecom"],
"universal_name": "hcltech",
"headquarters": {
"line1": null,
"city": "Noida",
"geographicArea": "Uttar Pradesh",
"postalCode": "201301",
"country": "IN",
"$type": "com.linkedin.common.Address"
},
"url": "https://www.linkedin.com/company/hcltech",
"logo_url": "https://media.licdn.com/dms/image/v2/C4D0BAQF-RIoeeMTMKQ/company-logo_200_200/...",
"background_cover_url": "https://media.licdn.com/dms/image/v2/D4D3DAQEVwVTGwE1eXA/image-scale_191_1128/...",
"company_id": "1756",
"website": null,
"followers": 9571613,
"company_size": "10001+",
"company_type": null,
"founded_year": null
}
},
"credit_used": 1,
"credit_addon": 0
}
The job details model
Properties
boolean
Whether the posting was retrieved.
string
A human-readable status. On failure this explains what went wrong.
integer
Credits charged for the posting itself.
0 on any error response.integer
Extra credits charged for optional sections that were returned.
object | null
The job posting.
null on any error response.Show Data object
Show Data object
Identity
string
The job title as written on the posting.
string | null
LinkedIn’s normalized title for the role, e.g. a posting titled
"Gen AI Engineer" standardizes to "Artificial Intelligence Engineer". Useful for grouping postings that describe the same job in different words.string
The numeric posting ID, as a string.
string
Canonical LinkedIn URL for the posting, free of tracking parameters.
Description
string
The full job description as plain text, with paragraph and bullet breaks preserved.
string | null
The same description as HTML —
<p>, <ul>/<li>, <strong> and <em> — ready to render. Text is HTML-escaped.Location
string
The location as written on the posting, e.g.
"Noida, Uttar Pradesh, India".string | null
LinkedIn’s internal geo ID for the location, stable across postings in the same place.
string | null
Two-letter country code for the posting’s location, lower-case, e.g.
"in".array
Where the work happens:
["ONSITE"], ["REMOTE"] or ["HYBRID"].boolean | null
Whether the posting allows remote work.
Classification
string | null
Employment type:
"Full-time", "Part-time", "Contract", "Internship", "Temporary", "Volunteer", "Other".string | null
Seniority as LinkedIn labels it:
"Internship", "Entry level", "Associate", "Mid-Senior level", "Director", "Executive", "Not Applicable".string | null
Alias of
experience_level.array
Industries the posting is filed under, e.g.
["IT Services and IT Consulting"].array
Job functions, e.g.
["Engineering", "Research"].array
Skills listed on the posting, when the posting lists them.
string | null
The ATS the posting is administered through, e.g.
"LinkedIn", when the posting names one.Compensation
string | null
The salary range exactly as displayed, e.g.
"$120,000.00/yr - $150,000.00/yr". Most postings do not publish one.number | null
Lower bound of the range.
number | null
Upper bound of the range.
string | null
Currency symbol or code detected in the range, e.g.
"$".string | null
Pay period:
"YEARLY", "MONTHLY", "WEEKLY" or "HOURLY".string | null
The benefits listed on the posting, when present.
Timing and state
string | null
When the posting went live, as an ISO 8601 UTC timestamp, e.g.
"2026-07-21T13:36:54Z". All timestamps use this format.string | null
When the posting first went live, which differs from
listed_at on reposted jobs.string | null
When the posting expires.
string | null
When the posting stopped accepting applications.
null while it is still open.string | null
Age of the posting in words, e.g.
"3 weeks ago".boolean | null
Whether the posting went up within the last 24 hours.
boolean | null
Whether the posting is a repost of an earlier one.
string | null
"LISTED" while the posting accepts applications, "CLOSED" once it stops.boolean | null
Whether the posting has hit its application limit.
boolean | null
Whether a staffing agency, rather than the employer, posted the job.
boolean | null
Whether LinkedIn offers a referral path on the posting.
Applying
string | null
Where applications go — the employer’s site for off-LinkedIn postings, the LinkedIn apply link for Easy Apply ones.
null when the posting takes applications without a link.boolean | null
Whether the application stays on LinkedIn rather than going to an external site.
integer | null
Number of applications received.
integer | null
Number of times the posting has been viewed.
string | null
The applicant count as LinkedIn phrases it, e.g.
"Over 200 applicants", when the posting shows it that way.boolean | null
Whether the posting has stopped accepting applications.
Company info
object
The hiring company.
Show Company info object
Show Company info object
string
Company name.
string | null
The company’s About description.
string | null
The company’s LinkedIn page URL.
string | null
The company’s LinkedIn slug, e.g.
"hcltech".string | null
LinkedIn’s numeric company ID.
string | null
Company logo image URL.
string | null
Cover image on the company page.
array
Industries the company operates in.
array
The specialities listed on the company page.
integer | null
Number of employees on LinkedIn.
string | null
Headcount bracket, written as a plain range:
"51-200", "1001-5000", "10001+".integer | null
LinkedIn follower count.
object
string | null
The company’s own website.
string | null
Organization type, e.g.
"Public Company".string | null
Year the company was founded.
Hiring team
object
The people LinkedIn lists on the posting. Present only when
include_hiring_team was set and the section was returned — check for the key rather than for a null.Show Hiring team object
Show Hiring team object
integer
Number of people on the hiring team.
Hiring team example
Withinclude_hiring_team set to true, the hiring_team key is added to data:
hiring_team
"hiring_team": {
"members": [
{
"name": "Mahima Prajapati",
"headline": "HR Professional || Talent Acquisition Specialist || IT Recruitment",
"urn": "ACoAADaj6F0BDLJlkkLSMH-0i05H1wQ5quh9Htk",
"username": "mahima-prajapati-425008217",
"url": "https://www.linkedin.com/in/mahima-prajapati-425008217",
"profile_picture_url": "https://media.licdn.com/dms/image/v2/D5603AQGxk.../profile-displayphoto-shrink_800_800/...",
"role": "Job poster"
}
],
"total": 1
}
Field availability
Every response carries every key. What varies is what the posting itself publishes:| Field | Filled when |
|---|---|
salary, salary_min, salary_max, salary_currency, salary_period | The employer published a pay range. Most do not. |
benefits, required_skills | The employer listed them on the posting. |
closed_at | The posting has closed. null while job_state is "LISTED". |
application_url | Applications go to a URL — an employer site, or a LinkedIn apply link. |
applicant_count_text | The posting displays a phrased applicant count. |
standardized_title, applicant_tracking_system | LinkedIn classified the role / named the ATS. |
company_info.website, company_type, founded_year | Published on the company page. |
hiring_team | include_hiring_team was set and the section was returned. |
Credits
| Request | Credits |
|---|---|
| Job posting | 1 |
With include_hiring_team | 2 |
4xx, 5xx) are never charged.
Errors
| Status | Meaning |
|---|---|
400 | Neither job_id nor url was supplied, or the URL contains no job ID. |
404 | The posting does not exist, or has been removed by the poster. |
502 | The posting exists but could not be retrieved. Retry shortly. |
Example
Example
import requests
url = "https://api.datamagnet.co/api/v1/jobs/detail"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.post(url, json={
"job_id": "4443378596",
"include_hiring_team": True
}, headers=headers)
job = response.json()["data"]
company = job["company_info"]
print(f"{job['title']} at {company['name']} — {job['location']}")
print(f"{job['employment_status']} · {job['experience_level']} · {job['workplace_types'][0]}")
print(f"Posted {job['posted_time_ago']} · {job['total_applies']} applies · {job['total_views']} views")
print(f"Apply: {job['application_url'] or 'on LinkedIn'}")
for member in job.get("hiring_team", {}).get("members", []):
print(f" {member['role']}: {member['name']} — {member['url']}")
Was this page helpful?
⌘I