{"id":"politiloggen","name":"Norwegian Police Log","description":"Official operational messages about traffic, fires, public order, missing persons and other incidents.","documentation":"https://api.politiloggen.politiet.no/swagger/index.html","operations":[{"name":"search_messages","description":"Search the Norwegian police log.","parameters":[{"name":"keyword","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"Free-text term, e.g. \"trafikkulykke\", \"knivstikking\". Client-side filter, see above. Combine with districts or a date range to aim the scan window."},{"name":"districts","type":"array","schema":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}]},"display_type":"list of string (comma-separated)","required":false,"default":null,"description":"Filter by police district. Use these exact names: Oslo, \u00d8st, Innlandet, S\u00f8r\u00d8st, Agder, S\u00f8rVest, Vest, M\u00f8reOgRomsdal, Tr\u00f8ndelag, Nordland, Troms, Finnmark."},{"name":"municipalities","type":"array","schema":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}]},"display_type":"list of string (comma-separated)","required":false,"default":null,"description":"Filter by municipality name (e.g. \"Lier\", \"Bergen\")."},{"name":"categories","type":"array","schema":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}]},"display_type":"list of string (comma-separated)","required":false,"default":null,"description":"Filter by category name (e.g. \"Trafikk\", \"Brann\"). Call list_categories() for the full list."},{"name":"is_active","type":"boolean","schema":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"display_type":"yes/no","required":false,"default":null,"description":"True for ongoing incidents only, False for closed."},{"name":"date_from","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"ISO datetime lower bound, e.g. \"2026-06-01T00:00:00Z\"."},{"name":"date_to","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"ISO datetime upper bound."},{"name":"sort_by","type":"string","schema":{"type":"string"},"display_type":"string","required":false,"default":"Date","description":"One of Date, Update, District, Category, Area, Municipality, IsActive, None. Default Date."},{"name":"sort_order","type":"string","schema":{"type":"string"},"display_type":"string","required":false,"default":"Descending","description":"\"Ascending\" or \"Descending\" (default)."},{"name":"skip","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":0,"description":"Offset for paging (default 0)."},{"name":"take","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":10,"description":"How many to return, 1 to 50 (default 10)."},{"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)."},{"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."}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/search_messages?keyword={keyword}&districts={districts}&municipalities={municipalities}&categories={categories}&is_active={is_active}&date_from={date_from}&date_to={date_to}&sort_by=Date&sort_order=Descending&skip=0&take=10&limit=25&offset=0","output_fields":["total_count","messages","messages.id","messages.category","messages.district","messages.municipality","messages.area","messages.text","messages.is_active","messages.created_on","messages.updated_on","messages.image_url"],"output_fields_truncated":false,"canonical_field_aliases":{"identifier":["messages.id"],"timestamp":["messages.created_on","messages.updated_on"]},"description_language":"en","documentation":"Search the Norwegian police log.\n\nThe districts/municipalities/categories/is_active/date filters are\napplied server-side by the API. `keyword` is different: the API has\nno free-text search, so it is matched client-side (case-insensitive\nsubstring against each message's `text` and `category`) over a\nbounded scan of recent messages that pass the other filters.\n\nArgs:\n    keyword: Free-text term, e.g. \"trafikkulykke\", \"knivstikking\".\n        Client-side filter, see above. Combine with districts or a\n        date range to aim the scan window.\n    districts: Filter by police district. Use these exact names:\n        Oslo, \u00d8st, Innlandet, S\u00f8r\u00d8st, Agder, S\u00f8rVest, Vest,\n        M\u00f8reOgRomsdal, Tr\u00f8ndelag, Nordland, Troms, Finnmark.\n    municipalities: Filter by municipality name (e.g. \"Lier\", \"Bergen\").\n    categories: Filter by category name (e.g. \"Trafikk\", \"Brann\").\n        Call list_categories() for the full list.\n    is_active: True for ongoing incidents only, False for closed.\n    date_from: ISO datetime lower bound, e.g. \"2026-06-01T00:00:00Z\".\n    date_to: ISO datetime upper bound.\n    sort_by: One of Date, Update, District, Category, Area,\n        Municipality, IsActive, None. Default Date.\n    sort_order: \"Ascending\" or \"Descending\" (default).\n    skip: Offset for paging (default 0).\n    take: How many to return, 1 to 50 (default 10).\n\nThere is no server-side filter for the sub-locality `area` field\n(e.g. \"Bragernes\", \"Sj\u00f8vegan\"). For a local newsroom covering one\narea within a bigger municipality: filter by municipalities here,\nthen check the `area` field on each returned message yourself.\n\nReturns a dict with `total_count` (all server-side matches; None\nwhen `keyword` is used, since that count is unknown) and `messages`\n(this page). Each message has id, category, district, municipality,\narea, text, isActive, createdOn, updatedOn.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/politiloggen/search_messages/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/politiloggen/search_messages/?keyword={keyword}&districts={districts}&municipalities={municipalities}&categories={categories}&is_active={is_active}&date_from={date_from}&date_to={date_to}&sort_by=Date&sort_order=Descending&skip=0&take=10&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/search_messages","response_schema":{"type":"object","properties":{"total_count":{"type":"null"},"messages":{"type":"object","properties":{"id":{"type":["string","null"]},"category":{"type":["string","null"]},"district":{"type":["string","null"]},"municipality":{"type":["string","null"]},"area":{"type":["string","null"]},"text":{"type":["string","null"]},"is_active":{"type":["boolean","null"]},"created_on":{"type":["string","null"],"format":"date-time"},"updated_on":{"type":["string","null"],"format":"date-time"},"image_url":{"type":["string","null"],"format":"uri"}},"additionalProperties":false}},"additionalProperties":false},"response_schema_status":{"status":"inferred","codegen_safe":true,"description":"Safe for code generation from the currently published fields. The contract is statically inferred rather than independently maintained, so clients should tolerate additional fields."},"entity_projection":{"status":"projected","entity_types":["police_incident"],"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/politiloggen/search_messages/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/search_messages","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/search_messages?keyword={keyword}&districts={districts}&municipalities={municipalities}&categories={categories}&is_active={is_active}&date_from={date_from}&date_to={date_to}&sort_by=Date&sort_order=Descending&skip=0&take=10&limit=25&offset=0"},{"name":"search_by_location","description":"Find police log messages for a place name, whether the API classifies\nit as a municipality or as a sub-locality `area` (e.g. \"Bragernes\",\n\"Sj\u00f8vegan\") -- the API only supports server-side filtering by\nmunicipality, not by area.","parameters":[{"name":"location","type":"string","schema":{"type":"string"},"display_type":"string","required":true,"default":null,"description":"Place name to search for, matched case-insensitively as a substring against each message's municipality and area."},{"name":"districts","type":"array","schema":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}]},"display_type":"list of string (comma-separated)","required":false,"default":null,"description":"Optionally narrow the scan to these police districts (exact names, see search_messages). Improves hit rate for scarce locations by scanning more relevant messages."},{"name":"categories","type":"array","schema":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}]},"display_type":"list of string (comma-separated)","required":false,"default":null,"description":"Filter by category name. Call list_categories()."},{"name":"is_active","type":"boolean","schema":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"display_type":"yes/no","required":false,"default":null,"description":"True for ongoing incidents only, False for closed."},{"name":"date_from","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"ISO datetime lower bound, e.g. \"2026-06-01T00:00:00Z\"."},{"name":"date_to","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"ISO datetime upper bound."},{"name":"take","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":10,"description":"How many matches to return, 1 to 50 (default 10)."},{"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)."},{"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."}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/search_by_location?location={location}&districts={districts}&categories={categories}&is_active={is_active}&date_from={date_from}&date_to={date_to}&take=10&limit=25&offset=0","output_fields":["messages","messages.id","messages.category","messages.district","messages.municipality","messages.area","messages.text","messages.is_active","messages.created_on","messages.updated_on","messages.image_url"],"output_fields_truncated":false,"canonical_field_aliases":{"identifier":["messages.id"],"timestamp":["messages.created_on","messages.updated_on"]},"description_language":"en","documentation":"Find police log messages for a place name, whether the API classifies\nit as a municipality or as a sub-locality `area` (e.g. \"Bragernes\",\n\"Sj\u00f8vegan\") -- the API only supports server-side filtering by\nmunicipality, not by area.\n\nBuilt for a local newsroom covering one town or neighbourhood: pass\nthe place name and get back matching incidents without needing to\nknow whether it's a \"municipality\" or an \"area\" in the API's terms.\n\nArgs:\n    location: Place name to search for, matched case-insensitively\n        as a substring against each message's municipality and area.\n    districts: Optionally narrow the scan to these police districts\n        (exact names, see search_messages). Improves hit rate for\n        scarce locations by scanning more relevant messages.\n    categories: Filter by category name. Call list_categories().\n    is_active: True for ongoing incidents only, False for closed.\n    date_from: ISO datetime lower bound, e.g. \"2026-06-01T00:00:00Z\".\n    date_to: ISO datetime upper bound.\n    take: How many matches to return, 1 to 50 (default 10).\n\nScans recent messages matching the other filters and returns the\nfirst `take` whose municipality or area contains `location`. May\nreturn fewer than `take` if the location is rare in the scanned\nwindow; narrow with `districts` or a date range to improve odds.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/politiloggen/search_by_location/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/politiloggen/search_by_location/?location={location}&districts={districts}&categories={categories}&is_active={is_active}&date_from={date_from}&date_to={date_to}&take=10&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/search_by_location","response_schema":{"type":"object","properties":{"messages":{"type":"object","properties":{"id":{"type":["string","null"]},"category":{"type":["string","null"]},"district":{"type":["string","null"]},"municipality":{"type":["string","null"]},"area":{"type":["string","null"]},"text":{"type":["string","null"]},"is_active":{"type":["boolean","null"]},"created_on":{"type":["string","null"],"format":"date-time"},"updated_on":{"type":["string","null"],"format":"date-time"},"image_url":{"type":["string","null"],"format":"uri"}},"additionalProperties":false}},"additionalProperties":false},"response_schema_status":{"status":"inferred","codegen_safe":true,"description":"Safe for code generation from the currently published fields. The contract is statically inferred rather than independently maintained, so clients should tolerate additional fields."},"entity_projection":{"status":"projected","entity_types":["police_incident"],"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/politiloggen/search_by_location/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/search_by_location","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/search_by_location?location={location}&districts={districts}&categories={categories}&is_active={is_active}&date_from={date_from}&date_to={date_to}&take=10&limit=25&offset=0"},{"name":"get_message","description":"Get a single police log message by its id (e.g. \"26k3hb-2\").","parameters":[{"name":"id","type":"string","schema":{"type":"string"},"display_type":"string","required":true,"default":null,"description":""},{"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)."},{"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."}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/get_message?id={id}&limit=25&offset=0","output_fields":["id","category","district","municipality","area","text","is_active","created_on","updated_on","image_url"],"output_fields_truncated":false,"canonical_field_aliases":{"identifier":["id"],"timestamp":["created_on","updated_on"]},"description_language":"en","documentation":"Get a single police log message by its id (e.g. \"26k3hb-2\").\n\nReturns the full message including text, category, district,\nmunicipality, area, timestamps and any image URL.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/politiloggen/get_message/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/politiloggen/get_message/?id={id}&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/get_message","response_schema":{"type":"object","properties":{"id":{"type":["string","null"]},"category":{"type":["string","null"]},"district":{"type":["string","null"]},"municipality":{"type":["string","null"]},"area":{"type":["string","null"]},"text":{"type":["string","null"]},"is_active":{"type":["boolean","null"]},"created_on":{"type":["string","null"],"format":"date-time"},"updated_on":{"type":["string","null"],"format":"date-time"},"image_url":{"type":["string","null"],"format":"uri"}},"additionalProperties":false},"response_schema_status":{"status":"declared","codegen_safe":true,"description":"Maintained response contract."},"entity_projection":{"status":"projected","entity_types":["police_incident"],"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/politiloggen/get_message/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/get_message","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/get_message?id={id}&limit=25&offset=0","response_example":{"source":"politiloggen","operation":"get_message","parameters":{"id":"example-id"},"data":{"id":"example-id","category":"example value","district":"example value","municipality":"example value","area":"example value","text":"example value","is_active":true,"created_on":"2026-01-15T12:00:00Z","updated_on":"2026-01-15T12:00:00Z","image_url":"https://example.invalid/resource"},"entities":[],"_meta":{"retrieved_at":"2026-01-15T12:00:00Z","language":"en","content_languages":["en"],"sources":[{"id":"politiloggen","name":"Norwegian Police Log","description":"Official operational messages about traffic, fires, public order, missing persons and other incidents.","cache_ttl_seconds":60,"documentation":"https://api.politiloggen.politiet.no/swagger/index.html"}]},"_provenance":{"data":{"source":"politiloggen","source_api":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen"},"entities":{"source":"politiloggen","source_api":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen","derived_from":"#/data","description":"Normalized projection of data."}},"_links":{"self":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/get_message","source":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen","wiki":"https://allemannsdata.com/wiki/kilder/politiloggen/get_message/"}}},{"name":"list_categories","description":"List the message categories, with their names and ids.","parameters":[{"name":"language","type":"string","schema":{"type":"string"},"display_type":"string","required":false,"default":"nb","description":"\"nb\" (Bokm\u00e5l, default) or \"nn\" (Nynorsk)."},{"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)."},{"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."}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/list_categories?language=nb&limit=25&offset=0","output_fields":["[].id","[].name"],"output_fields_truncated":false,"canonical_field_aliases":{"identifier":["[].id"],"name":["[].name"]},"description_language":"en","documentation":"List the message categories, with their names and ids.\n\nThe `name` values are what you pass to search_messages(categories=...).\n\nArgs:\n    language: \"nb\" (Bokm\u00e5l, default) or \"nn\" (Nynorsk).","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/politiloggen/list_categories/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/politiloggen/list_categories/?language=nb&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/list_categories","response_schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":["string","null"]}},"additionalProperties":false}},"response_schema_status":{"status":"declared","codegen_safe":true,"description":"Maintained response contract."},"entity_projection":{"status":"projected","entity_types":["police_incident"],"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/politiloggen/list_categories/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/list_categories","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/list_categories?language=nb&limit=25&offset=0","response_example":{"source":"politiloggen","operation":"list_categories","parameters":{"language":"nb"},"data":[{"id":"example-id","name":"Example"}],"entities":[],"_meta":{"retrieved_at":"2026-01-15T12:00:00Z","language":"en","content_languages":["en"],"sources":[{"id":"politiloggen","name":"Norwegian Police Log","description":"Official operational messages about traffic, fires, public order, missing persons and other incidents.","cache_ttl_seconds":60,"documentation":"https://api.politiloggen.politiet.no/swagger/index.html"}]},"_provenance":{"data":{"source":"politiloggen","source_api":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen"},"entities":{"source":"politiloggen","source_api":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen","derived_from":"#/data","description":"Normalized projection of data."}},"_links":{"self":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/list_categories","source":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen","wiki":"https://allemannsdata.com/wiki/kilder/politiloggen/list_categories/"}}}],"operation_schema_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen/{operation}/schema","related_sources":[{"id":"nyheter","name":"Norwegian news events","reason":"Geolocated news events that can be combined with official police messages.","api":"https://allemannsdata.com/wiki/api/v1/kilder/nyheter","wiki":"https://allemannsdata.com/wiki/kilder/nyheter/"}],"_meta":{"retrieved_at":"2026-08-02T14:58:30Z","language":"en","content_languages":["en"],"sources":[{"id":"politiloggen","name":"Norwegian Police Log","description":"Official operational messages about traffic, fires, public order, missing persons and other incidents.","documentation":"https://api.politiloggen.politiet.no/swagger/index.html","cache_ttl_seconds":60}]},"_links":{"self":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen","names":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen?view=names","compact":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen?view=compact","full":"https://allemannsdata.com/wiki/api/v1/kilder/politiloggen","wiki":"https://allemannsdata.com/wiki/kilder/politiloggen/"}}
