{"uid":"cap_sUFXQM3kU17dO-45BRMeZ","slug":"agents-openwebninja-com-linkedin-job-details-bulk-fetch-2c2adb01","name":"LinkedIn Job Details Bulk Fetch","description":"Full details for up to 20 LinkedIn job postings in one call, fetched concurrently (bounded to 10 in flight).\n\nThe returned objects carry the same 35-key JSearch contract plus the LinkedIn extras. Two fields exist only on a search card and are therefore always `null` here: `job_position` (LinkedIn's absolute rank within a result set) and `job_posted_at_date` (the exact `datetime` attribute). On this surface the posting date is derived from LinkedIn's relative label (\"1 week ago\") and snapped to midnight UTC, so it can be off by a few days — `/search` is the authoritative source for the exact date.\n\nAn id this API did not mint, or a posting LinkedIn has taken down, is simply absent from the array. It is never an error and never a fabricated shell object.","url":"https://agents.openwebninja.com/realtime-linkedin-data/job-details?utm_source=zero.xyz","method":"GET","headers":{},"bodySchema":{"type":"object","required":["job_id"],"properties":{"fields":{"type":"string","description":"Comma-separated projection over the job object. `job_id` and `job_title` are always included. An unknown field is a 400."},"job_id":{"type":"string","example":"bGlua2VkaW46NDQ1MzY3MDk3Mw","description":"Comma-separated list of up to 20 `job_id` values as returned by `/search`. Duplicates are collapsed before the cap is applied. The raw numeric LinkedIn posting id (`job_uid`) is also accepted."},"country":{"type":"string","default":"us","description":"2-letter country code; selects the proxy exit market."}}},"responseSchema":{"type":"object","required":["status","request_id","parameters","data"],"properties":{"data":{"type":"array","items":{"type":"object","required":["job_id","job_title","employer_name","employer_logo","employer_website","job_publisher","job_employment_type","job_employment_types","job_apply_link","job_apply_is_direct","apply_options","job_description","job_is_remote","job_posted_at","job_posted_at_timestamp","job_posted_at_datetime_utc","job_location","job_city","job_state","job_country","job_latitude","job_longitude","job_benefits","job_benefits_strings","job_google_link","job_salary","job_salary_string","job_min_salary","job_max_salary","job_salary_period","job_highlights","job_onet_soc","job_onet_job_zone","employer_reviews","job_uid","employer_linkedin_url","job_linkedin_company_id","job_seniority_level","job_function","job_industries","job_applicants_count","job_applicants_label","job_salary_currency","job_posted_at_date","job_posted_at_linkedin_label","job_linkedin_badges","job_position"],"properties":{"job_id":{"type":"string","example":"bGlua2VkaW46NDQ1MzY3MDk3Mw","description":"Opaque public id: `base64url(\"linkedin:\" + <posting id>)`. Pass it back to `/job-details`. Stable for the life of the posting."},"job_uid":{"type":"string","example":"4453670973","description":"The raw numeric LinkedIn posting id. Permanent, and accepted directly by `/job-details`."},"job_city":{"type":"string","example":"New York","nullable":true},"job_state":{"type":"string","example":"New York","nullable":true,"description":"US 2-letter codes are expanded to the full state name, matching JSearch."},"job_title":{"type":"string","example":"Software Engineer III (Java/AWS)"},"job_salary":{"type":"number","example":null,"nullable":true,"description":"Set only when a posting states a single figure rather than a range; a range populates `job_min_salary` / `job_max_salary` instead."},"job_country":{"type":"string","example":"US","nullable":true,"description":"2-letter code derived from the posting's own location where it names a country or a US state, falling back to the requested `country`. A US state code always wins over the requested market."},"job_benefits":{"type":"array","items":{"type":"string"},"example":null,"nullable":true,"description":"Always `null`; LinkedIn does not publish a normalized benefits list."},"job_function":{"type":"string","example":"Engineering and Information Technology","nullable":true,"description":"LinkedIn's job-function label. Detail surface only."},"job_latitude":{"type":"number","format":"float","example":null,"nullable":true,"description":"Always `null`; not published on this surface."},"job_location":{"type":"string","example":"New York, NY","nullable":true,"description":"LinkedIn's location string, verbatim. Three shapes occur: `\"New York, NY\"` (US, no country suffix), `\"London, England, United Kingdom\"` (international) and `\"New York City Metropolitan Area\"` (metro, no comma)."},"job_onet_soc":{"type":"string","example":null,"nullable":true,"description":"Always `null`; not published."},"job_position":{"type":"integer","example":0,"nullable":true,"description":"Absolute 0-based rank within the result set, continuing across pages (page 2 starts at 10). **Search surface only** — always `null` on `/job-details`."},"apply_options":{"type":"array","items":{"type":"object","required":["apply_link","is_direct","publisher"],"properties":{"is_direct":{"enum":[false],"type":"boolean","example":false},"publisher":{"enum":["LinkedIn"],"type":"string","example":"LinkedIn"},"apply_link":{"type":"string","format":"uri","example":"https://www.linkedin.com/jobs/view/software-engineer-iii-java-aws-at-jpmorganchase-4453670973"}},"description":"Always exactly one entry on this source, describing the LinkedIn posting page. LinkedIn's logged-out surface does not expose the employer's own application destination, so there is never a second option and `is_direct` is never `true`."}},"employer_logo":{"type":"string","format":"uri","example":"https://media.licdn.com/dms/image/v2/D4E0BAQGxpntCyRgsuA/company-logo_100_100/0/1718711710850/jpmorganchase_logo","nullable":true,"description":"LinkedIn CDN company logo. 50/50 on the measured sample."},"employer_name":{"type":"string","example":"JPMorganChase"},"job_is_remote":{"type":"boolean","example":null,"nullable":true,"description":"`true` or `null`, **never `false`**. LinkedIn's logged-out payload has no workplace-type field, so `true` is emitted only when an explicit textual remote marker is present and `null` means \"LinkedIn did not say\", not \"not remote\". 0/50 on the measured sample."},"job_longitude":{"type":"number","format":"float","example":null,"nullable":true,"description":"Always `null`; not published on this surface."},"job_posted_at":{"type":"string","example":"8 days ago","nullable":true,"description":"Relative posting age in JSearch's vocabulary: `today`, `1 day ago`, `N days ago` up to 30, then `N month(s) ago`. LinkedIn's own badge (\"1 week ago\", \"Just now\") is never emitted here — it is preserved verbatim as `job_posted_at_linkedin_label`."},"job_publisher":{"enum":["LinkedIn"],"type":"string","example":"LinkedIn","description":"Always `LinkedIn` — the guest surface never names the originating job board."},"job_apply_link":{"type":"string","format":"uri","example":"https://www.linkedin.com/jobs/view/software-engineer-iii-java-aws-at-jpmorganchase-4453670973","nullable":true,"description":"The public LinkedIn posting URL, with LinkedIn's per-render tracking parameters stripped. **Not** the employer's ATS URL — that is behind a login wall and is not present in the guest payload. International postings use a country subdomain (`uk.linkedin.com`)."},"job_highlights":{"type":"object","example":{},"description":"Always `{}`. LinkedIn ships one prose blob with no qualifications / responsibilities / benefits split.","additionalProperties":{"type":"array","items":{"type":"string"}}},"job_industries":{"type":"array","items":{"type":"string"},"example":["Financial Services"],"nullable":true,"description":"LinkedIn's industry labels, comma-split. Individual labels can themselves contain \"and\" (\"IT Services and IT Consulting\") and are not split further. Detail surface only."},"job_max_salary":{"type":"number","example":185000,"nullable":true},"job_min_salary":{"type":"number","example":137750,"nullable":true},"job_description":{"type":"string","nullable":true,"description":"Full posting text, HTML stripped to plain text with paragraph breaks preserved. Typically 5 000–10 000 characters. Detail surface only — `null` when `include_details=false`."},"job_google_link":{"type":"string","format":"uri","example":null,"nullable":true,"description":"Always `null`; Google-specific."},"employer_reviews":{"type":"array","items":{"type":"object"},"example":null,"nullable":true,"description":"Always `null`; not published."},"employer_website":{"type":"string","format":"uri","example":null,"nullable":true,"description":"Always `null`. LinkedIn only ever exposes the employer's LinkedIn company page, which is returned as `employer_linkedin_url` instead of being passed off as a website."},"job_onet_job_zone":{"type":"string","example":null,"nullable":true,"description":"Always `null`; not published."},"job_salary_period":{"enum":["HOUR","DAY","WEEK","MONTH","YEAR",null],"type":"string","example":"YEAR","nullable":true},"job_salary_string":{"type":"string","example":"$137,750.00/yr - $185,000.00/yr","nullable":true,"description":"LinkedIn's compensation string, verbatim. Present on ~24% of postings (12/50 measured); detail surface only."},"job_posted_at_date":{"type":"string","format":"date","example":"2026-09-03","nullable":true,"description":"The exact `datetime` attribute LinkedIn publishes on a search card. **Search surface only** — always `null` on `/job-details`, which carries no date element."},"job_apply_is_direct":{"enum":[false],"type":"boolean","example":false,"description":"Always `false`; the employer's own application destination is not visible."},"job_employment_type":{"type":"string","example":"Full-time","nullable":true,"description":"LinkedIn's own label (\"Full-time\"). Detail surface only — `null` when `include_details=false`."},"job_linkedin_badges":{"type":"array","items":{"type":"string"},"example":["Actively Hiring"],"nullable":true,"description":"LinkedIn engagement badges (\"Actively Hiring\", \"Be an early applicant\"). Search surface only; 37/50 on the measured sample."},"job_salary_currency":{"type":"string","example":"USD","nullable":true,"description":"ISO 4217 code inferred from the salary string's symbol or code."},"job_seniority_level":{"enum":["Internship","Entry level","Associate","Mid-Senior level","Director","Executive","Not Applicable",null],"type":"string","example":"Not Applicable","nullable":true,"description":"LinkedIn's own seniority vocabulary. Detail surface only."},"job_applicants_count":{"type":"integer","example":193,"nullable":true,"description":"Applicant count as an integer. Present on ~52% of postings (26/50 measured). When LinkedIn caps the figure (\"Over 200 applicants\") this is the capped number and `job_applicants_label` carries the exact wording. Detail surface only."},"job_applicants_label":{"type":"string","example":"193 applicants","nullable":true,"description":"LinkedIn's applicant caption, verbatim."},"job_benefits_strings":{"type":"array","items":{"type":"string"},"example":null,"nullable":true,"description":"Always `null`. LinkedIn's only chips are engagement badges (\"Actively Hiring\"), which are not benefits; they are returned as `job_linkedin_badges` instead."},"job_employment_types":{"type":"array","items":{"enum":["FULLTIME","PARTTIME","CONTRACTOR","INTERN","VOLUNTEER","OTHER"],"type":"string"},"example":["FULLTIME"],"description":"Normalized enum form of `job_employment_type`. Empty when `include_details=false`."},"employer_linkedin_url":{"type":"string","format":"uri","example":"https://www.linkedin.com/company/jpmorganchase","nullable":true,"description":"The employer's LinkedIn company page, tracking parameters stripped."},"job_linkedin_company_id":{"type":"string","example":"1068","nullable":true,"description":"The employer's numeric LinkedIn company id. Feed it back as `company_id` on `/search` to get more jobs at the same company. Detail surface only."},"job_posted_at_timestamp":{"type":"integer","example":1788393600,"nullable":true,"description":"Unix epoch seconds at **midnight UTC of the posting date**. LinkedIn publishes a date, not a time. On `/job-details` this is derived from the relative label and can be off by a few days; `/search` carries the exact date."},"job_posted_at_datetime_utc":{"type":"string","format":"date-time","example":"2026-09-03T00:00:00.000Z","nullable":true},"job_posted_at_linkedin_label":{"type":"string","example":"1 week ago","nullable":true,"description":"LinkedIn's own relative badge, verbatim."}},"description":"A superset of the 35-key JSearch `/search` job object. All 35 keys are always present, as are the 12 LinkedIn-only extras; a field LinkedIn cannot supply is `null`, `[]` or `{}`."}},"status":{"enum":["OK"],"type":"string"},"parameters":{"type":"object","required":["job_id"],"properties":{"fields":{"type":"string"},"job_id":{"type":"string","example":"bGlua2VkaW46NDQ1MzY3MDk3Mw"},"country":{"type":"string","example":"us"}}},"request_id":{"type":"string"}}},"example":null,"exampleRequest":null,"tags":[],"displayCostAmount":"unknown","displayCostAsset":"USD","priceDynamic":true,"priceHint":null,"priceStatus":"unprobed","priceSource":"registry","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"unknown","summary":"price unknown","primary":{"kind":"dynamic","protocol":"mpp","network":"tempo","amountUsd":null,"per":"call","confidence":"unknown"},"accepted":[{"kind":"dynamic","protocol":"mpp","network":"tempo","amountUsd":null,"per":"call","confidence":"unknown"}]},"paymentMethods":[{"uid":"pm_UX6iaADbthrq5SoNkE_s2","protocol":"mpp","methodType":"crypto","chain":"tempo","mode":"charge","costAmount":"unknown","costPer":"request","priority":0,"asset":null,"unit":"request","depositMicros":null,"planRef":null}],"brandName":"agents.openwebninja.com","brandSlug":"agents-openwebninja-com-x402","brandBaseUrl":"https://agents.openwebninja.com","brandDocsUrl":null,"whatItDoes":"Fetches full details for up to 20 LinkedIn job postings concurrently by job ID, returning a rich 35+ field object per posting.","exampleAgentPrompt":"Can you pull the full details — job description, salary, employer, seniority level, and apply link — for these LinkedIn job IDs: bGlua2VkaW46NDQ1MzY3MDk3Mw and bGlua2VkaW46NDQ1MzY3MDk3Ng, using the US market proxy?","exampleUseCases":[{"title":"Job seeker comparing multiple listings","prompt":"I have these 5 LinkedIn job IDs from my earlier search — can you fetch the full details for all of them so I can compare salaries, seniority levels, and whether I can apply directly?"},{"title":"Recruiter enriching candidate pipeline","prompt":"We sourced these 15 LinkedIn job posting IDs for competitor role analysis — pull the full details including applicant counts, employer info, and job descriptions for all of them at once."},{"title":"Salary research for a specific role","prompt":"I found a LinkedIn job posting with ID 4453670973 — can you get me the complete details including salary range, benefits, and job highlights?"}],"resultDescription":"An array of job objects (one per valid, live posting ID supplied), each containing 35+ fields: job ID, title, employer name/logo/website/LinkedIn URL, employment type, apply link and options, job description, remote flag, posting date and timestamp, location details (city, state, country, lat/lon), salary data (min, max, single figure, currency, period), job highlights, O*NET codes, employer reviews, LinkedIn-specific fields (seniority level, job function, industries, applicant count and label, LinkedIn badges). Missing or taken-down postings are silently omitted from the array rather than causing errors.","failureModes":["Invalid or unrecognized field name in 'fields' parameter returns HTTP 400","Job ID not minted by this API or posting taken down by LinkedIn — posting silently absent from response array (not an error)","More than 20 job IDs supplied — excess IDs beyond cap are ignored or rejected","Invalid country code may result in incorrect proxy exit market or error","Posting date may be off by a few days since it is derived from LinkedIn's relative label ('1 week ago') snapped to midnight UTC","Rate limiting or upstream LinkedIn blocking may result in partial or empty results"],"whenToPreferThis":"Use this endpoint when you already have LinkedIn job IDs (from a prior /search call or stored elsewhere) and need the full 35+ field detail object for each posting — especially for batch hydration of up to 20 jobs in one call. Prefer /search when you need the exact posting date (job_posted_at_date) or the job's absolute rank in a result set (job_position), since those fields are only authoritative on search results.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-14T00:37:00.237Z","isFirstParty":false,"canonicalSlug":"agents-openwebninja-com-linkedin-job-details-bulk-fetch-2c2adb01"}