Skip to main content

1. Overview

The Company Job Details API fetches the complete details of a single job posting using its job_id. Results are returned synchronously in the HTTP response — no job polling required. This is a synchronous GET API — you pass a job_id as a URL parameter and receive the full job posting object immediately. The job posting object includes:
  • Core posting data — title, location, full description text, and canonical posting URL
  • Employment details — employment type, remote eligibility, and experience level
  • Compensation — salary details, compensation type, pay period, and currency code (when disclosed)
  • Classification — associated job functions and industries
  • Requirements — listed skills and benefits (when present on the posting)
Common use cases:
  • Talent intelligence — Pull the full description and required skills for postings surfaced by the Get Jobs API to analyse hiring signals across a company
  • Competitive hiring analysis — Track the seniority mix, remote policy, and functional focus of a competitor’s open roles
  • Market mapping — Aggregate job functions and industries across a set of postings to understand where a company is investing headcount
  • LLM-powered research — Feed the full description field into your own summarisation, skill-extraction, or classification pipeline
This API is synchronous. Results are returned directly in the HTTP response — no job submission or polling required. See How Sync APIs work.

2. Quick Start

Step 1 — Obtain a job_id The job_id is returned by the Get Jobs API. Each job in that response carries an id that you pass to this endpoint. Step 2 — Make a request
curl --location 'https://api.wokelo.ai/api/enterprise/company/jobs/detail?job_id=4426080772' \
  --header 'Authorization: Bearer <YOUR_API_TOKEN>' \
  --header 'Content-Type: application/json'
Step 3 — Work with the job object
job = response.json()["data"]

print(f"Title:        {job['title']}")
print(f"Location:     {job['location']}")
print(f"Type:         {job['type']}")
print(f"Remote:       {job['remote_allow']}")
print(f"Experience:   {job['experience_level']}")
print(f"Functions:    {', '.join(job['job_functions'])}")
print(f"Industries:   {', '.join(job['industries'])}")
print(f"\nDescription:\n{job['description'][:300]}...")

3. Authentication

All requests must include a Bearer token in the Authorization HTTP header. No other authentication method is supported.
Authorization: Bearer <YOUR_API_TOKEN>
API tokens are issued from your Wokelo account. Navigate to Account Details → API Credentials in the Wokelo dashboard to get your client id and client secret. Contact support@wokelo.ai if you do not yet have API access.
Never expose your token in client-side code, browser requests, or public repositories. A missing or invalid token returns 401 Unauthorized. A valid token without sufficient plan permissions returns 403 Forbidden.

4. Request Reference

Endpoint
GET https://api.wokelo.ai/api/enterprise/company/jobs/detail
All parameters are passed as URL query parameters.
ParameterTypeRequiredDescription
job_idstringRequiredThe unique identifier of the job posting. Obtain this from the id field returned by the Get Jobs API.
Full request example:
curl --location 'https://api.wokelo.ai/api/enterprise/company/jobs/detail?job_id=4426080772' \
  --header 'Authorization: Bearer <YOUR_API_TOKEN>' \
  --header 'Content-Type: application/json'

5. Response

Response structure

{
  "status": "success",
  "data": { ...job object... },
  "credits_consumed": 0.1
}
FieldTypeDescription
statusstring"success" when the request was processed successfully.
dataobjectThe job posting object. See fields below.
credits_consumednumberNumber of API credits consumed by this request.

Job object fields

Core posting data
FieldTypeDescription
idstringUnique identifier of the job posting (mirrors the job_id parameter).
titlestringJob title of the posting.
locationstringLocation of the role (e.g. "Vittuone, Lombardy, Italy").
descriptionstringFull description text of the posting, including responsibilities and requirements. May be in the local language of the posting.
urlstringCanonical URL of the original job posting.
Employment details
FieldTypeDescription
typestringEmployment type (e.g. "Full-time", "Part-time", "Contract").
remote_allowbooleantrue if the role permits remote work, otherwise false.
experience_levelstringSeniority of the role (e.g. "Entry level", "Mid-Senior level", "Director").
Compensation
FieldTypeDescription
salary_detailsobjectStructured salary information when disclosed. Empty object {} when not present on the posting.
compensation_typestringType of compensation (e.g. "Base", "Base + Commission"). null when not disclosed.
pay_periodstringFrequency of pay (e.g. "Hourly", "Monthly", "Annual"). null when not disclosed.
currency_codestringISO 4217 currency code for the salary (e.g. "USD", "EUR"). null when not disclosed.
expire_atstringExpiry datetime of the posting. null when not disclosed.
Classification & requirements
FieldTypeDescription
job_functionsstring[]Job functions associated with the role. Empty array when none are listed.
industriesstring[]Industries associated with the role. Empty array when none are listed.
skillsstring[]Skills listed on the posting. Empty array when none are listed.
benefitsstring[]Benefits listed on the posting. Empty array when none are listed.

Notes on empty fields

Several fields can be empty or null in valid responses:
  • skills, benefits, job_functions, industries — empty array when no values were present on the posting
  • salary_details — empty object {} when compensation was not disclosed
  • compensation_type, pay_period, currency_code, expire_atnull when not disclosed

Sample response

{
  "status": "success",
  "data": {
    "id": "4426080772",
    "title": "Service Preparation Specialist",
    "location": "Vittuone, Lombardy, Italy",
    "description": "What To Expect\nIn qualità di Specialista nella Preparazione del Servizio Tecnico, fornirai un contributo chiave al nostro team di Preparazione Service...",
    "skills": [],
    "benefits": [],
    "url": "https://www.linkedin.com/jobs/view/4426080772/",
    "type": "Full-time",
    "remote_allow": false,
    "salary_details": {},
    "compensation_type": null,
    "pay_period": null,
    "currency_code": null,
    "expire_at": null,
    "job_functions": [
      "Innovation in electric cars and clean energy products"
    ],
    "industries": [
      "Motor Vehicle Manufacturing"
    ],
    "experience_level": "Entry level"
  },
  "credits_consumed": 0.1
}

6. Examples

Enrich a list of jobs from the Get Jobs API

Pull a list of postings from the Get Jobs API, then fetch full details for each to analyse seniority and functional focus.
import requests

HEADERS = {"Authorization": "Bearer <YOUR_API_TOKEN>"}

# Assume `job_ids` were collected from the Get Jobs API
job_ids = ["4426080772", "4426080773", "4426080774"]

detailed_jobs = []
for job_id in job_ids:
    response = requests.get(
        "https://api.wokelo.ai/api/enterprise/company/jobs/detail",
        headers=HEADERS,
        params={"job_id": job_id}
    )
    if response.ok:
        detailed_jobs.append(response.json()["data"])

# Summarise the hiring signal
from collections import Counter

levels = Counter(j["experience_level"] for j in detailed_jobs)
functions = Counter(f for j in detailed_jobs for f in j["job_functions"])
remote_count = sum(1 for j in detailed_jobs if j["remote_allow"])

print(f"Roles analysed:   {len(detailed_jobs)}")
print(f"Remote-friendly:  {remote_count}")
print(f"Seniority mix:    {dict(levels)}")
print(f"Top functions:    {functions.most_common(5)}")

Extract job description for LLM processing

Use the full description field to feed posting content into a skill-extraction or summarisation pipeline.
import requests

HEADERS = {"Authorization": "Bearer <YOUR_API_TOKEN>"}

response = requests.get(
    "https://api.wokelo.ai/api/enterprise/company/jobs/detail",
    headers=HEADERS,
    params={"job_id": "4426080772"}
)

job = response.json()["data"]

description = job.get("description", "").strip()
if description:
    word_count = len(description.split())
    print(f"Title: {job['title']}")
    print(f"Location: {job['location']} | Words: {word_count}")
    # Pass `description` to your LLM pipeline here
else:
    print("No description available for this posting.")

7. Error Handling

The API uses standard HTTP status codes. All error responses include a JSON body with a detail or message field.
StatusMeaningCause & Resolution
200 OKSuccessJob details returned successfully.
400 Bad RequestInvalid parametersThe job_id parameter is missing or malformed. Check the detail field.
401 UnauthorizedAuth failedThe Authorization header is missing, malformed, or contains an invalid token. Verify your key in Account Details → API Credentials.
403 ForbiddenInsufficient accessYour plan does not include access to this endpoint. Contact support@wokelo.ai to review your plan.
404 Not FoundJob not foundThe job_id could not be resolved. Verify the ID using the Get Jobs API.
429 Too Many RequestsRate limit exceededImplement exponential back-off. The response includes a Retry-After header.
500 Internal Server ErrorServer errorRetry after a brief delay. If the issue persists, contact support@wokelo.ai.
Error response example:
{
  "status": "error",
  "detail": "Job with id '0000000000' could not be found."
}

8. Best Practices

Obtain job_id from the Get Jobs API The job_id is not a value you construct — it comes from the id field of postings returned by the Get Jobs API. Always resolve IDs through that endpoint before calling this one. Guard against null and empty fields Compensation and requirement fields (salary_details, compensation_type, pay_period, currency_code, skills, benefits) are frequently absent on public postings. Use .get() with a default rather than direct key access:
# ✅ Safe
currency = job.get("currency_code") or "N/A"
skills = job.get("skills", [])
Expect localized description text The description field reflects the original language of the posting, which may not be English. If you need consistent-language output, run the text through a translation or LLM normalisation step before analysis.

Get Jobs

Retrieve the list of open job postings for a company, including the job_id used by this endpoint.

Company News Monitoring

Fetch the latest news articles for any company, enriched with AI summaries and event categories.

Company Instant Enrichment

Synchronously enrich firmographic and financial data for any company by permalink or URL.