Docs / Job Data API / Endpoints / Retrieve a job

Retrieve a job

Returns one posting by id. It reads stored data and does not crawl on demand, so a posting whose page the crawler has not fetched has a null description here too — this endpoint is for fetching a known id, not for filling in a sparse row.

GET https://api.softon.dev/v1/jobs/{id} Copy

Parameters

ParameterTypeDescription
id required string The posting id from a list response. Ids are stable while a posting exists, but a posting is removed when the source removes it — take ids from a list response rather than from here.

Request

curl https://api.softon.dev/v1/jobs/glorri:unibank-region-filiallari-uzre-konullu-seki-79999900 \
  -H "Authorization: Bearer $SOFTON_KEY"

Response

The envelope is identical on every softon.dev API: data, meta, error. Only the shape inside data changes per dataset — see the response envelope.

{
  "data": {
    "id": "glorri:unibank-region-filiallari-uzre-konullu-seki-79999900",
    "source": "glorri",
    "title": "Region filialları üzrə könüllü (Şəki)",
    "company": { "name": "Unibank Kommersiya Bankı", "slug": "unibank" },
    "location": "Şəki, Azərbaycan",
    "remote": false,
    "employment_type": "Volunteer",
    "job_function": "Customer relations",
    "career_level": null,
    "posted_at": "2026-08-04T19:18:51.735Z",
    "description": "- Filiala müraciət edən müştərilərin qarşılanması və ilkin məlumatlandırılması;\n- Müştərilərin ehtiyaclarının müəyyənləşdirilməsi…",
    "requirements": "- Ali təhsil və ya universitet tələbəsi;\n- Müştərilərlə işləmək və komanda mühitində fəaliyyət göstərmək bacarığı;…",
    "facts": {
      "Apply Before": "September 3, 2026",
      "Category": "Sales and Customer Services",
      "Job Posted On": "August 4, 2026",
      "Job Type": "Volunteer"
    },
    "ingested_at": "2026-08-04T23:55:43.722474Z"
  },
  "meta": { "request_id": "req_9Fv3" },
  "error": null
}

Fields of data

FieldTypeDescription
id string Stable identifier, "<source>:<source id>". Pass it to /v1/jobs/{id}.
source string Which scraper produced this posting.
title string Posting title as published.
company object · nullable The hiring company: name and slug. null when the source omits it.
location string · nullable Free-text location as published.
remote boolean · nullable Whether the posting is remote-eligible.
employment_type string · nullable Full-time, Part-time, Contract, as the source labels it.
job_function string · nullable The source's own function taxonomy, not normalised across sources.
career_level string · nullable The source's own seniority label. Not normalised, so it is not called "seniority".
posted_at timestamp · nullable When the posting first appeared, RFC 3339.
url string · nullable Canonical page on the source site.
description string · nullable Full posting body. Present when the crawler has fetched the posting's own page, null otherwise — on collections and on /v1/jobs/{id} alike, since neither fetches on demand.
requirements string · nullable Requirements section when the source separates it, subject to the same condition as description.
facts object · nullable The source's own labelled metadata, e.g. "Apply Before". Label set differs per source.
ingested_at timestamp When this version was stored.

Try it

v1 · stable
Send the request to see a response.