Job detail

POST /flan.jobs.v1.JobsService/Get

Returns the full detail for a single job, including sanitized description, all locations, full source attribution, and active/expired status.

Request body

| Parameter | Type | Description | | --------- | ---- | -------------------------------------------------- | | id | uuid | The job identifier returned by JobsService.List. |

curl -X POST "https://api.useflan.app/flan.jobs.v1.JobsService/Get" \
  -H "Content-Type: application/json" \
  --data '{"id":"018f3b21-4b2c-7e3d-9a40-23e8a1f2b3c4"}'
{
  "id": "018f3b21-4b2c-7e3d-9a40-23e8a1f2b3c4",
  "slug": "senior-frontend-engineer-acme",
  "title": "Senior Frontend Engineer",
  "company": {
    "name": "Acme",
    "slug": "acme",
    "domain": "acme.com",
    "logoUrl": "https://logo.clearbit.com/acme.com"
  },
  "locations": [
    { "city": "Remote", "country": "US", "remote": true, "text": "Remote, US" }
  ],
  "remote": true,
  "employmentType": "full_time",
  "seniority": "senior",
  "occupation": "Software Engineer",
  "salary": {
    "min": 140000,
    "max": 180000,
    "currency": "USD",
    "period": "year"
  },
  "description": "<p>We're looking for a...</p>",
  "source": { "type": "ats", "platform": "greenhouse" },
  "status": "active",
  "discoveredAt": "2026-06-18T14:20:00Z",
  "lastSeenAt": "2026-06-21T08:30:00Z",
  "lastScrapedAt": "2026-06-21T08:30:00Z",
  "lastVerifiedAt": "2026-06-21T08:30:00Z"
}

Response fields

| Field | Type | Description | | ---------------- | -------------- | ----------------------------------------------------------------- | | id | uuid | Job identifier. | | slug | string | Canonical URL slug. | | title | string | Job title. | | company | object | { name, slug?, domain?, logoUrl? }. | | locations | array | One or more { city?, region?, country?, text?, remote }. | | remote | boolean | Whether the role accepts remote. | | employmentType | enum | One of the five canonical types. | | seniority | string | Seniority bucket. | | occupation | string | Normalized occupation label, if known. | | salary | object | null | { min, max, currency, period }. | | description | string | HTML description (sanitized on the read path). | | source | object | { type: "ats", platform: "greenhouse" }. | | status | enum | active or expired. Derived from the latest verification pass. | | discoveredAt | datetime | First crawled. | | lastSeenAt | datetime | Last time the URL was reachable. | | lastScrapedAt | datetime | Last time content was fetched. | | lastVerifiedAt | datetime | Last active/expired verification. |

Status semantics

status is derived from a backend boolean (is_active):

  • active — the job URL was reachable and the listing was present in the most recent verification pass.
  • expired — the URL returned 404, the posting was removed, or the page indicates the role is closed.

Expired jobs are retained for ~30 days so callers can detect removals and keep their caches clean.

Related endpoints

  • JobsService.GetSimilar — related jobs based on title, occupation, and seniority.
  • POST /v1/reports — flag a job whose backend-derived status appears wrong.