Enrich a job
Fetch full details for a single LinkedIn job posting, including the description and company.
POST
https://api.up2data.ai/v1/jobs/enrichIdentify the job with a LinkedIn job url (/jobs/view/<id> or any jobs page URL carrying currentJobId) or its numeric job_id. A closed posting still answers, with job_state and closed_at set.
Info
Send many as batch operation items (operation jobs.enrich); 1 credit per item, free when the job is not found. See the batch endpoint.
#Request
| Field | Type | Notes |
|---|---|---|
url | string | LinkedIn job posting URL. Provide url or job_id. |
job_id | string | Numeric LinkedIn job ID, when you have no URL. Provide url or job_id. |
#Call it
curl -X POST "https://api.up2data.ai/v1/jobs/enrich" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.linkedin.com/jobs/view/4470130770"
}'import requests
url = "https://api.up2data.ai/v1/jobs/enrich"
headers = {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
payload = {
"url": "https://www.linkedin.com/jobs/view/4470130770"
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())const url = "https://api.up2data.ai/v1/jobs/enrich";
const headers = {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
};
const body = {
"url": "https://www.linkedin.com/jobs/view/4470130770"
};
const response = await fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
});
const data = await response.json();
console.log(data);package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
url := "https://api.up2data.ai/v1/jobs/enrich"
body := bytes.NewBufferString(`{
"url": "https://www.linkedin.com/jobs/view/4470130770"
}`)
req, err := http.NewRequest("POST", url, body)
if err != nil {
panic(err)
}
req.Header.Set("X-API-Key", "YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
respBody, _ := io.ReadAll(resp.Body)
fmt.Println(string(respBody))
}#Response
{
"data": {
"url": "https://www.linkedin.com/jobs/view/4470130770",
"title": "Full-Stack Agentic Engineer (focus on Backend)",
"company": { "name": "Apoddo", "url": "https://www.linkedin.com/company/apoddo-llp", "linkedin_id": "11571939", "industry": "Software Development", "logo_url": "https://media.licdn.com/dms/image/v2/D4D0BAQExample/company-logo_400_400/0/apoddo_llp_logo" },
"location": "Serbia",
"posted_at": "2026-09-25T09:22:27.000Z",
"description_snippet": "Apoddo is a software development-as-a-service company. We specialize in providing software development services to small and medium-sized businesses in the United States...",
"job_id": "4470130770",
"description": "Apoddo is a software development-as-a-service company. We specialize in providing software development services to small and medium-sized businesses in the United States. ...",
"employment_type": "Full-time",
"scraped_at": "2026-09-25T21:55:52.000Z",
"job_state": "LISTED",
"expires_at": "2027-03-24T09:22:27.000Z"
},
"meta": { "creditsUsed": 1, "creditsRemaining": 98419, "billed": true, "reason": "job_found", "requestId": "req_example", "latencyMs": 2100 }
}#Errors
| Status | Type | When | Billed |
|---|---|---|---|
| 400 | invalid_request | Missing url and job_id, unknown field, a URL that is not a LinkedIn job URL, or a non-numeric job_id. | No |
| 401 | invalid_api_key | Missing, malformed, or revoked key. | No |
| 402 | insufficient_credits | Balance can't cover the call. | No |
| 422 | unprocessable_target | Job not found, removed, or unreachable. Billed as 1 credit. | Yes |
| 429 | rate_limited | Over the 300 requests/min per-key limit. Honor Retry-After. | No |
| 500 | internal_error | Something broke on the server side. | No |
| 504 | upstream_timeout | The live scrape didn't complete in time. | No |
See the Errors guide for every error type this version can return.