Jobs

Get job posting

Returns one classic job posting at full detail. Any posting reachable by its numeric id can be retrieved, including one not owned by the connected account. Pass with_sections for extra sections.

get/v1/{account_id}/jobs/{job_id}

Request

  • Base URL: https://api.curviate.com
  • URL: https://api.curviate.com/v1/{account_id}/jobs/{job_id}
  • Auth: HTTP bearer

Path parameters

account_idstring required

The connected LinkedIn account to retrieve the job posting on behalf of.

job_idstring required

The job posting's numeric id, e.g. 4100000000 (from the LinkedIn job URL or a search/jobs result). A full URL is not accepted here.

Query parameters

with_sectionsstring[]

Extra sections to include (e.g. hiring_team, salary, benefits), comma-separated for more than one. Omit for base fields only.

Response

The classic job posting's full detail. Content fields (title, description) are returned verbatim and are never stored.

object'job_posting' required

Response type discriminator.

idstring required

The job posting's numeric identifier.

titlestring required

Job title (content pass-through, never stored).

locationstring

Job location, when set.

state'DRAFT' | 'LISTED' | 'CLOSED' | 'REVIEW' | 'SUSPENDED' required

Posting lifecycle state.

is_repostboolean required

Whether this posting is a repost of a prior one.

is_application_limit_reachedboolean required

Whether this posting has reached its application limit.

industriesstring[]

Industries associated with this posting, when set.

created_atstring required

ISO-8601 UTC timestamp the posting was created.

descriptionstring required

Full job description text (content pass-through, never stored).

views_countnumber

Number of views so far, when tracked.

applications_countnumber required

Number of applicants so far.

workplace_type'ON_SITE' | 'HYBRID' | 'REMOTE' required

Workplace arrangement.

employment_status'FULL_TIME' | 'PART_TIME' | 'CONTRACT' | 'TEMPORARY' | 'OTHER' | 'VOLUNTEER' | 'INTERNSHIP' required

Employment type.

published_atstring

ISO-8601 UTC timestamp the posting was published, when set.

expires_atstring

ISO-8601 UTC timestamp the posting expires, when set.

closed_atstring

ISO-8601 UTC timestamp the posting was closed, when set.

listed_atstring

ISO-8601 UTC timestamp the posting was listed, when set.

observed_atstring required

ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it.

source'store' | 'live' required

Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.

withdrawnboolean required

Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case.

withdrawn_atstring

ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true.

Example response

{
  "safety_warning": {
    "row": "profile_views",
    "reset_at": "2026-09-05T00:00:00.000Z",
    "hint": {
      "parameter": "profile_views.ceiling",
      "message": "This account is at its ceiling for profile_views. This action went through because profile_views.posture is warn, and it counted: 101 of 100 this window. Raise profile_views.ceiling, or wait for the window to reset at 2026-09-05T00:00:00.000Z."
    },
    "reason": "ceiling",
    "blocked": false
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.