{"id":"stillinger","name":"Open positions","description":"Recently published jobs and details from NAV's open labour-market data.","documentation":null,"operations":[{"name":"get_recent_jobs","description":"Job vacancies posted or changed at/after a date, from NAV's stillingsfeed. Signature: get_recent_jobs(since: string, optional, default None; keyword: string, optional, default None; municipality: string, optional, default None; active_only: yes/no, optional, default True; max_results: integer, optional, default 50; max_pages: integer, pages, optional, default 20; limit: integer, items, optional, default 25; offset: integer, items, optional, default 0).","signature":"get_recent_jobs(since: string, optional, default None; keyword: string, optional, default None; municipality: string, optional, default None; active_only: yes/no, optional, default True; max_results: integer, optional, default 50; max_pages: integer, pages, optional, default 20; limit: integer, items, optional, default 25; offset: integer, items, optional, default 0)","parameters":[{"name":"since","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"required":false,"default":null,"description":"ISO date or datetime (UTC), e.g. \"2026-07-01\" or \"2026-07-01T08:00:00Z\". Default: 24 hours ago. Earlier dates cover more but walk more pages (see max_pages). A `since` in the future returns nothing.","unit":null,"display_type":"string"},{"name":"keyword","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"required":false,"default":null,"description":"Case-insensitive substring filter on job title and employer.","unit":null,"display_type":"string"},{"name":"municipality","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"required":false,"default":null,"description":"Case-insensitive substring filter on the ad's municipality (e.g. \"OSLO\", \"Bergen\").","unit":null,"display_type":"string"},{"name":"active_only","type":"boolean","schema":{"type":"boolean"},"required":false,"default":true,"description":"If True (default), return only ads whose latest state is ACTIVE. False also includes ads that have since gone INACTIVE.","unit":null,"display_type":"yes/no"},{"name":"max_results","type":"integer","schema":{"type":"integer"},"required":false,"default":50,"description":"Cap on returned ads, 1-200 (default 50). Newest first.","unit":null,"display_type":"integer"},{"name":"max_pages","type":"integer","schema":{"type":"integer"},"required":false,"default":20,"description":"Safety cap on feed pages walked, 1-100 (default 20). Each page is up to 1000 events. If hit before reaching the newest page, `truncated` is True and the newest ads may be missing; narrow `since` toward now or raise this. Unit: pages.","unit":"pages","display_type":"integer"},{"name":"limit","type":"integer","schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"display_type":"integer","required":false,"default":25,"description":"Maximum list items returned by the gateway (default 25, maximum 100).","unit":"items"},{"name":"offset","type":"integer","schema":{"type":"integer","minimum":0,"default":0},"display_type":"integer","required":false,"default":0,"description":"Number of list items to skip before returning the page.","unit":"items"}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_recent_jobs?since={since}&keyword={keyword}&municipality={municipality}&active_only=true&max_results=50&max_pages=20&limit=25&offset=0","output_fields":["since","pages_scanned","unique_ads_scanned","match_count","returned","truncated","jobs","jobs[].id","jobs[].title","jobs[].employer","jobs[].municipal","jobs[].status","jobs[].modified","jobs[].link","note"],"output_fields_truncated":false,"canonical_field_aliases":{"identifier":["jobs[].id"],"name":["jobs[].title"]},"description_language":"en","documentation":"Job vacancies posted or changed at/after a date, from NAV's stillingsfeed.\n\nThe feed is a forward-only, oldest-first chain of ad change-events. This\ntool positions into it by `since`, walks forward to the newest page,\nkeeps the latest state per ad (deduped by id), then filters client-side.\n\nArgs:\n    since: ISO date or datetime (UTC), e.g. \"2026-07-01\" or\n        \"2026-07-01T08:00:00Z\". Default: 24 hours ago. Earlier dates\n        cover more but walk more pages (see max_pages). A `since` in the\n        future returns nothing.\n    keyword: Case-insensitive substring filter on job title and employer.\n    municipality: Case-insensitive substring filter on the ad's\n        municipality (e.g. \"OSLO\", \"Bergen\").\n    active_only: If True (default), return only ads whose latest state is\n        ACTIVE. False also includes ads that have since gone INACTIVE.\n    max_results: Cap on returned ads, 1-200 (default 50). Newest first.\n    max_pages: Safety cap on feed pages walked, 1-100 (default 20). Each\n        page is up to 1000 events. If hit before reaching the newest page,\n        `truncated` is True and the newest ads may be missing; narrow\n        `since` toward now or raise this.\n\nReturns a dict with `since` (the resolved If-Modified-Since), `pages_scanned`,\n`unique_ads_scanned`, `match_count` (after filters), `returned`, `truncated`,\nand `jobs`: each with id, title, employer, municipal, status, modified, link.\nPass a job's `id` to get_job for the full ad.\n\nFeed pages are cached, so an ad posted in the last minute may not appear\nyet, and the default `since` is rounded down to a 10-minute boundary.\n\nSignature: get_recent_jobs(since: string, optional, default None; keyword: string, optional, default None; municipality: string, optional, default None; active_only: yes/no, optional, default True; max_results: integer, optional, default 50; max_pages: integer, pages, optional, default 20; limit: integer, items, optional, default 25; offset: integer, items, optional, default 0).","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/stillinger/get_recent_jobs/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/stillinger/get_recent_jobs/?since={since}&keyword={keyword}&municipality={municipality}&active_only=true&max_results=50&max_pages=20&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_recent_jobs","response_schema":{"type":"object","properties":{"since":{"type":"string"},"pages_scanned":{"type":"integer"},"unique_ads_scanned":{"type":"integer"},"match_count":{"type":"integer"},"returned":{"type":"integer"},"truncated":{"type":"boolean"},"jobs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":["string","null"]},"employer":{"type":["string","null"]},"municipal":{"type":["string","null"]},"status":{"type":["string","null"]},"modified":{"type":["string","null"],"format":"date-time"},"link":{"type":["string","null"],"format":"uri"}},"additionalProperties":false,"required":["id"]}},"note":{"type":["string","null"]}},"additionalProperties":false,"required":["since","match_count","returned","jobs"]},"response_schema_status":{"status":"declared","codegen_safe":true,"description":"Maintained response contract."},"entity_projection":{"status":"projected","entity_types":["job","organization"],"description":"Recognized records and stable operation identifiers are projected; an empty array means the successful payload contained no recognizable entity."},"response_schema_url":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_recent_jobs/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_recent_jobs","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_recent_jobs?since={since}&keyword={keyword}&municipality={municipality}&active_only=true&max_results=50&max_pages=20&limit=25&offset=0","response_example":{"source":"stillinger","operation":"get_recent_jobs","parameters":{"since":"example value","keyword":"example value","municipality":"example value","active_only":true,"max_results":50,"max_pages":20},"data":{"since":"example value","pages_scanned":1,"unique_ads_scanned":1,"match_count":1,"returned":1,"truncated":true,"jobs":[{"id":"example-id","title":"Example","employer":"example value","municipal":"example value","status":"example value","modified":"2026-01-15T12:00:00Z","link":"https://example.invalid/resource"}],"note":"example value"},"entities":[],"_meta":{"retrieved_at":"2026-01-15T12:00:00Z","language":"en","content_languages":["en"],"sources":[{"id":"stillinger","name":"Open positions","description":"Recently published jobs and details from NAV's open labour-market data.","cache_ttl_seconds":60}]},"_provenance":{"data":{"source":"stillinger","source_api":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger"},"entities":{"source":"stillinger","source_api":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger","derived_from":"#/data","description":"Normalized projection of data."}},"_links":{"self":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_recent_jobs","source":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger","wiki":"https://allemannsdata.com/wiki/kilder/stillinger/get_recent_jobs/","feedback":"https://allemannsdata.com/wiki/api/v1/feedback"}}},{"name":"get_job","description":"Full details for one job ad, by its feed entry id (a UUID). Signature: get_job(job_id: string, required; limit: integer, items, optional, default 25; offset: integer, items, optional, default 0).","signature":"get_job(job_id: string, required; limit: integer, items, optional, default 25; offset: integer, items, optional, default 0)","parameters":[{"name":"job_id","type":"string","schema":{"type":"string"},"required":true,"default":null,"description":"","unit":null,"display_type":"string"},{"name":"limit","type":"integer","schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"display_type":"integer","required":false,"default":25,"description":"Maximum list items returned by the gateway (default 25, maximum 100).","unit":"items"},{"name":"offset","type":"integer","schema":{"type":"integer","minimum":0,"default":0},"display_type":"integer","required":false,"default":0,"description":"Number of list items to skip before returning the page.","unit":"items"}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_job?job_id={job_id}&limit=25&offset=0","output_fields":["id","status","note","title","employer","employer.name","employer.organization_id","employer.homepage","employer.about","locations","locations[].address","locations[].postal_code","locations[].city","locations[].municipal","locations[].county","locations[].country","published","expires","application_due","application_url","link","source","employment_type","extent","sector","position_count","start","occupation_categories","styrk_codes","styrk_codes[].type"],"output_fields_truncated":true,"canonical_field_aliases":{"identifier":["id","styrk_codes[].code"],"name":["title","employer.name","styrk_codes[].name"]},"description_language":"en","documentation":"Full details for one job ad, by its feed entry id (a UUID).\n\nGet ids from get_recent_jobs (each job's `id`). Expired/withdrawn ads keep\nonly their status: NAV strips the content once an ad goes INACTIVE, so for\nthose this returns just uuid, status and a note.\n\nReturns a dict with id, status, title, employer (name/orgnr/homepage/about),\nlocations, published, expires, application_due, application_url, link,\nsource, employment_type, extent, sector, position_count, start,\noccupation_categories, styrk_codes, and description (plain text).\n\nSignature: get_job(job_id: string, required; limit: integer, items, optional, default 25; offset: integer, items, optional, default 0).","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/stillinger/get_job/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/stillinger/get_job/?job_id={job_id}&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_job","response_schema":{"type":"object","properties":{"id":{"type":["string","null"]},"status":{"type":["string","null"]},"note":{"type":["string","null"]},"title":{"type":["string","null"]},"employer":{"type":"object","properties":{"name":{"type":["string","null"]},"organization_id":{"type":["string","null"]},"homepage":{"type":["string","null"]},"about":{"type":["string","null"]}},"additionalProperties":false},"locations":{"type":"array","items":{"type":"object","properties":{"address":{"type":["string","null"]},"postal_code":{"type":["string","null"]},"city":{"type":["string","null"]},"municipal":{"type":["string","null"]},"county":{"type":["string","null"]},"country":{"type":["string","null"]}},"additionalProperties":false}},"published":{"type":["string","null"],"format":"date-time"},"expires":{"type":["string","null"],"format":"date-time"},"application_due":{"type":["string","null"]},"application_url":{"type":["string","null"]},"link":{"type":["string","null"],"format":"uri"},"source":{"type":["string","null"]},"employment_type":{"type":["string","null"]},"extent":{"type":["string","null"]},"sector":{"type":["string","null"]},"position_count":{"type":["string","integer","null"]},"start":{"type":["string","null"]},"occupation_categories":{"type":["array","null"],"items":{"type":"object"}},"styrk_codes":{"type":"array","items":{"type":"object","properties":{"type":{"type":["string","null"]},"code":{"type":["string","null"]},"name":{"type":["string","null"]}},"additionalProperties":false}},"description":{"type":["string","null"]}},"additionalProperties":false,"required":["id"]},"response_schema_status":{"status":"declared","codegen_safe":true,"description":"Maintained response contract."},"entity_projection":{"status":"projected","entity_types":["job","organization"],"description":"Recognized records and stable operation identifiers are projected; an empty array means the successful payload contained no recognizable entity."},"response_schema_url":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_job/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_job","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_job?job_id={job_id}&limit=25&offset=0","response_example":{"source":"stillinger","operation":"get_job","parameters":{"job_id":"example-id"},"data":{"id":"example-id","status":"example value","note":"example value","title":"Example","employer":{"name":"Example","organization_id":"example-id","homepage":"example value","about":"example value"},"locations":[{"address":"example value","postal_code":"example value","city":"example value","municipal":"example value","county":"example value","country":"example value"}],"published":"2026-01-15T12:00:00Z","expires":"2026-01-15T12:00:00Z","application_due":"example value","application_url":"https://example.invalid/resource","link":"https://example.invalid/resource","source":"example value","employment_type":"example value","extent":"example value","sector":"example value","position_count":"example value","start":"example value","occupation_categories":[{}],"styrk_codes":[{"type":"example value","code":"example value","name":"Example"}],"description":"example value"},"entities":[{"type":"job","id":"example-id","source":"stillinger","description":"Job posting used as the operation input."}],"_meta":{"retrieved_at":"2026-01-15T12:00:00Z","language":"en","content_languages":["en"],"sources":[{"id":"stillinger","name":"Open positions","description":"Recently published jobs and details from NAV's open labour-market data.","cache_ttl_seconds":60}]},"_provenance":{"data":{"source":"stillinger","source_api":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger"},"entities":{"source":"stillinger","source_api":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger","derived_from":"#/data","description":"Normalized projection of data."}},"_links":{"self":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/get_job","source":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger","wiki":"https://allemannsdata.com/wiki/kilder/stillinger/get_job/","feedback":"https://allemannsdata.com/wiki/api/v1/feedback"}}}],"operation_schema_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger/{operation}/schema","related_sources":[{"id":"firmafakta","name":"Firmafakta","reason":"Company facts about the employer, including jobs by organization number.","api":"https://allemannsdata.com/wiki/api/v1/kilder/firmafakta","wiki":"https://allemannsdata.com/wiki/kilder/firmafakta/"}],"_meta":{"retrieved_at":"2026-09-20T20:02:54Z","language":"en","content_languages":["en"],"sources":[{"id":"stillinger","name":"Open positions","description":"Recently published jobs and details from NAV's open labour-market data.","cache_ttl_seconds":60}]},"_links":{"self":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger","names":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger?view=names","compact":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger?view=compact","full":"https://allemannsdata.com/wiki/api/v1/kilder/stillinger","wiki":"https://allemannsdata.com/wiki/kilder/stillinger/","feedback":"https://allemannsdata.com/wiki/api/v1/feedback"}}
