{"id":"kystdatahuset","name":"Kystdatahuset","description":"Norwegian ports, quays, maritime locations and reported port connections from the Coastal Administration.","documentation":null,"operations":[{"name":"search_ports","description":"Search for a port, quay or other Kystdatahuset location.","parameters":[{"name":"query","type":"string","schema":{"type":"string"},"display_type":"string","required":true,"default":null,"description":""},{"name":"limit","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":30,"description":""},{"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/kystdatahuset/search_ports?query={query}&limit=30&offset=0","output_fields":["[].havn_id","[].navn","[].kode","[].type","[].kommune","[].fylke","[].lat","[].lon"],"output_fields_truncated":false,"canonical_field_aliases":{"name":["[].navn"],"identifier":["[].kode"],"latitude":["[].lat"],"longitude":["[].lon"]},"description_language":"en","documentation":"Search for a port, quay or other Kystdatahuset location.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/kystdatahuset/search_ports/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/kystdatahuset/search_ports/?query={query}&limit=30&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/search_ports","response_schema":{"type":"array","items":{"type":"object","properties":{"havn_id":{"type":"boolean"},"navn":{"type":"boolean"},"kode":{"type":"boolean"},"type":{"type":"boolean"},"kommune":{"type":"boolean"},"fylke":{"type":"boolean"},"lat":{"type":["number","null"]},"lon":{"type":["number","null"]}},"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":["port"],"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/kystdatahuset/search_ports/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/search_ports","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/search_ports?query={query}&limit=30&offset=0"},{"name":"get_port","description":"Fetch information about one port or maritime location.","parameters":[{"name":"location_id","type":"integer","schema":{"type":"integer"},"display_type":"integer","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/kystdatahuset/get_port?location_id={location_id}&limit=25&offset=0","output_fields":["havn_id","navn","kode","type","kommune","fylke","lat","lon"],"output_fields_truncated":false,"canonical_field_aliases":{"name":["navn"],"identifier":["kode"],"latitude":["lat"],"longitude":["lon"]},"description_language":"en","documentation":"Fetch information about one port or maritime location.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_port/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_port/?location_id={location_id}&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_port","response_schema":{"anyOf":[{"type":"object","properties":{"havn_id":{"type":"boolean"},"navn":{"type":"boolean"},"kode":{"type":"boolean"},"type":{"type":"boolean"},"kommune":{"type":"boolean"},"fylke":{"type":"boolean"},"lat":{"type":["number","null"]},"lon":{"type":["number","null"]}},"additionalProperties":false},{"type":"null"}]},"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":["port"],"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/kystdatahuset/get_port/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_port","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_port?location_id={location_id}&limit=25&offset=0"},{"name":"find_ports_nearby","description":"Find ports, quays and maritime locations near a coordinate.","parameters":[{"name":"lat","type":"number","schema":{"type":"number"},"display_type":"decimal number","required":true,"default":null,"description":""},{"name":"lon","type":"number","schema":{"type":"number"},"display_type":"decimal number","required":true,"default":null,"description":""},{"name":"radius_km","type":"number","schema":{"type":"number"},"display_type":"decimal number","required":false,"default":20,"description":""},{"name":"limit","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":30,"description":""},{"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/kystdatahuset/find_ports_nearby?lat={lat}&lon={lon}&radius_km=20&limit=30&offset=0","output_fields":["havner","havner.avstand_km","radius_km"],"output_fields_truncated":false,"canonical_field_aliases":{},"description_language":"en","documentation":"Find ports, quays and maritime locations near a coordinate.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/kystdatahuset/find_ports_nearby/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/kystdatahuset/find_ports_nearby/?lat={lat}&lon={lon}&radius_km=20&limit=30&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/find_ports_nearby","response_schema":{"type":"object","properties":{"havner":{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"object","properties":{"avstand_km":{"type":"number"}},"additionalProperties":false}]},"radius_km":{"type":["number","null"]}},"additionalProperties":false},"response_schema_status":{"status":"incomplete","codegen_safe":false,"description":"Not suitable for typed model generation: the container shape and field names are useful, but unresolved values accept any JSON value."},"entity_projection":{"status":"projected","entity_types":["port","place"],"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/kystdatahuset/find_ports_nearby/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/find_ports_nearby","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/find_ports_nearby?lat={lat}&lon={lon}&radius_km=20&limit=30&offset=0"},{"name":"get_port_connections","description":"Fetch reported arrival and departure connections for a port.","parameters":[{"name":"location_id","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":true,"default":null,"description":""},{"name":"from_year","type":"integer","schema":{"anyOf":[{"type":"integer"},{"type":"null"}]},"display_type":"integer","required":false,"default":null,"description":""},{"name":"to_year","type":"integer","schema":{"anyOf":[{"type":"integer"},{"type":"null"}]},"display_type":"integer","required":false,"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/kystdatahuset/get_port_connections?location_id={location_id}&from_year={from_year}&to_year={to_year}&limit=25&offset=0","output_fields":[],"output_fields_truncated":false,"canonical_field_aliases":{},"description_language":"en","documentation":"Fetch reported arrival and departure connections for a port.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_port_connections/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_port_connections/?location_id={location_id}&from_year={from_year}&to_year={to_year}&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_port_connections","response_schema":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"response_schema_status":{"status":"incomplete","codegen_safe":false,"description":"Not suitable for typed model generation: the container shape and field names are useful, but unresolved values accept any JSON value."},"entity_projection":{"status":"projected","entity_types":["port"],"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/kystdatahuset/get_port_connections/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_port_connections","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_port_connections?location_id={location_id}&from_year={from_year}&to_year={to_year}&limit=25&offset=0"},{"name":"search_ships","description":"Search Kystverket's combined ship registry by free text (ship name, and\nidentifiers where indexed).","parameters":[{"name":"query","type":"string","schema":{"type":"string"},"display_type":"string","required":true,"default":null,"description":"Free-text term, e.g. a ship name (\"color fantasy\") or fragment."},{"name":"limit","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":20,"description":"Max ships to return, 1-100 (default 20)."},{"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/kystdatahuset/search_ships?query={query}&limit=20&offset=0","output_fields":["count","returned","ships","ships.shipname","ships.mmsi","ships.imo","ships.callsign","ships.shiptype","ships.flag","ships.loa","ships.breadth","ships.gt","ships.dwt","ships.teu","ships.yearofbuild","ships.speedservice"],"output_fields_truncated":false,"canonical_field_aliases":{"identifier":["ships.mmsi"]},"description_language":"en","documentation":"Search Kystverket's combined ship registry by free text (ship name, and\nidentifiers where indexed).\n\nThe \"combined\" table merges the Norwegian Ship Register (NSR), AIS-derived\ndata, Fairplay and Fiskeridirektoratet, so one hit may carry several MMSI\nor IMO numbers (returned as a list when more than one).\n\nArgs:\n    query: Free-text term, e.g. a ship name (\"color fantasy\") or fragment.\n    limit: Max ships to return, 1-100 (default 20).\n\nReturns a dict with `count`, `returned` and `ships`: each with shipname,\nmmsi, imo, callsign, shiptype, flag (3-letter country), loa, breadth, gt,\ndwt, teu, yearofbuild and speedservice. Pass an mmsi/imo to get_ship for a\nsingle detailed record, or to the voyage / AIS tools.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/kystdatahuset/search_ships/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/kystdatahuset/search_ships/?query={query}&limit=20&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/search_ships","response_schema":{"type":"object","properties":{"count":{"type":"integer"},"returned":{"type":["integer","null"]},"ships":{"type":"object","properties":{"shipname":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"mmsi":{"anyOf":[{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"boolean"}]},{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."}]},"imo":{"anyOf":[{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"boolean"}]},{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."}]},"callsign":{"anyOf":[{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"boolean"}]},{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."}]},"shiptype":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"flag":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"loa":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"breadth":{"type":"boolean"},"gt":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"dwt":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"teu":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"yearofbuild":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"speedservice":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."}},"additionalProperties":false}},"additionalProperties":false},"response_schema_status":{"status":"incomplete","codegen_safe":false,"description":"Not suitable for typed model generation: the container shape and field names are useful, but unresolved values accept any JSON value."},"entity_projection":{"status":"projected","entity_types":["port"],"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/kystdatahuset/search_ships/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/search_ships","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/search_ships?query={query}&limit=20&offset=0"},{"name":"get_ship","description":"Full record for one ship from Kystverket's combined registry, by MMSI or IMO.","parameters":[{"name":"mmsi","type":"integer","schema":{"anyOf":[{"type":"integer"},{"type":"null"}]},"display_type":"integer","required":false,"default":null,"description":""},{"name":"imo","type":"integer","schema":{"anyOf":[{"type":"integer"},{"type":"null"}]},"display_type":"integer","required":false,"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/kystdatahuset/get_ship?mmsi={mmsi}&imo={imo}&limit=25&offset=0","output_fields":["found","note","ship"],"output_fields_truncated":false,"canonical_field_aliases":{},"description_language":"en","documentation":"Full record for one ship from Kystverket's combined registry, by MMSI or IMO.\n\nProvide exactly one of `mmsi` or `imo` (get either from search_ships).\n\nReturns the ship's shipname, callsign, mmsi, imo, shiptype, flag (cc3),\nloa, breadth, draught, gt, dwt, height, yearofbuild and the source-registry\nids, or a not-found note if the identifier is unknown.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_ship/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_ship/?mmsi={mmsi}&imo={imo}&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_ship","response_schema":{"type":"object","properties":{"found":{"type":"boolean"},"note":{"type":"string"},"ship":{"type":["object","null"],"properties":{},"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":["port"],"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/kystdatahuset/get_ship/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_ship","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_ship?mmsi={mmsi}&imo={imo}&limit=25&offset=0"},{"name":"get_ship_voyages","description":"Voyages (port-call legs) reported to SafeSeaNet for one ship, newest first.","parameters":[{"name":"mmsi","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":true,"default":null,"description":"The ship's MMSI (from search_ships / get_ship)."},{"name":"start_date","type":"string","schema":{"type":"string"},"display_type":"string","required":true,"default":null,"description":"ISO date or datetime, inclusive lower bound (e.g. \"2025-01-01\")."},{"name":"end_date","type":"string","schema":{"type":"string"},"display_type":"string","required":true,"default":null,"description":"ISO date or datetime, exclusive upper bound."},{"name":"limit","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":50,"description":"Max voyages to return, 1-200 (default 50). Sorted by ETA descending; `count` is the true total."},{"name":"offset","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":0,"description":"Skip this many voyages (for pagination)."}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_ship_voyages?mmsi={mmsi}&start_date={start_date}&end_date={end_date}&limit=50&offset=0","output_fields":["mmsi","ship","ship.shipname","ship.shiptype","ship.gt","ship.length","ship.breadth","count","returned","offset","voyages","voyages[].origin","voyages[].destination","voyages[].etd","voyages[].eta","voyages[].direction","voyages[].hazmat","voyages[].draft","voyages[].cargo_gross","voyages[].cargo_net"],"output_fields_truncated":false,"canonical_field_aliases":{"identifier":["mmsi"]},"description_language":"en","documentation":"Voyages (port-call legs) reported to SafeSeaNet for one ship, newest first.\n\nEach voyage is one reported leg: origin -> destination with ETD/ETA, plus\ncargo and draught where reported. Only ships required to report to\nSafeSeaNet appear (larger cargo/passenger vessels); small craft and pure\nAIS-only tracks do not - for those use get_ais_positions or the\nBarentsWatch AIS server.\n\nArgs:\n    mmsi: The ship's MMSI (from search_ships / get_ship).\n    start_date: ISO date or datetime, inclusive lower bound (e.g. \"2025-01-01\").\n    end_date: ISO date or datetime, exclusive upper bound.\n    limit: Max voyages to return, 1-200 (default 50). Sorted by ETA\n        descending; `count` is the true total.\n    offset: Skip this many voyages (for pagination).\n\nReturns a dict with `mmsi`, `ship` (name, type, dimensions - constant\nacross legs so reported once), `count`, `returned`, `offset` and\n`voyages`: each with origin, destination, etd, eta, hazmat, draft and\ncargo quantities where reported.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_ship_voyages/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_ship_voyages/?mmsi={mmsi}&start_date={start_date}&end_date={end_date}&limit=50&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_ship_voyages","response_schema":{"type":"object","properties":{"mmsi":{"type":["integer","null"]},"ship":{"type":"object","properties":{"shipname":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"shiptype":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"gt":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"length":{"anyOf":[{"type":"number"},{"type":"null"}]},"breadth":{"anyOf":[{"type":"number"},{"type":"null"}]}},"additionalProperties":false},"count":{"type":"integer"},"returned":{"type":"integer"},"offset":{"type":["integer","null"]},"voyages":{"type":"array","items":{"type":"object","properties":{"origin":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"destination":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"etd":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"eta":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"direction":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"hazmat":{"type":"boolean"},"draft":{"anyOf":[{"type":"number"},{"type":"null"}]},"cargo_gross":{"type":"boolean"},"cargo_net":{"type":"boolean"}},"additionalProperties":false}}},"additionalProperties":false},"response_schema_status":{"status":"incomplete","codegen_safe":false,"description":"Not suitable for typed model generation: the container shape and field names are useful, but unresolved values accept any JSON value."},"entity_projection":{"status":"projected","entity_types":["port"],"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/kystdatahuset/get_ship_voyages/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_ship_voyages","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_ship_voyages?mmsi={mmsi}&start_date={start_date}&end_date={end_date}&limit=50&offset=0"},{"name":"get_port_calls","description":"Arrivals to, or departures from, one or more Norwegian ports (SafeSeaNet),\nfor a span of whole years, newest first.","parameters":[{"name":"location_ids","type":"array","schema":{"items":{"type":"integer"},"type":"array"},"display_type":"list of integer (comma-separated)","required":true,"default":null,"description":"One or more port/location ids from search_ports."},{"name":"from_year","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":true,"default":null,"description":"First year (inclusive), e.g. 2025."},{"name":"to_year","type":"integer","schema":{"anyOf":[{"type":"integer"},{"type":"null"}]},"display_type":"integer","required":false,"default":null,"description":"Last year (inclusive). Defaults to from_year."},{"name":"direction","type":"string","schema":{"type":"string"},"display_type":"string","required":false,"default":"arrivals","description":"\"arrivals\" (default) or \"departures\"."},{"name":"limit","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":50,"description":"Max calls to return, 1-200 (default 50). Sorted by ETA (arrivals) or ETD (departures) descending."},{"name":"offset","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":0,"description":"Skip this many calls (for pagination)."}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_port_calls?location_ids={location_ids}&from_year={from_year}&to_year={to_year}&direction=arrivals&limit=50&offset=0","output_fields":["direction","location_ids","from_year","to_year","count","returned","offset","calls","calls[].shipname","calls[].mmsi","calls[].imo","calls[].callsign","calls[].shiptype","calls[].gt","calls[].length","calls[].eta","calls[].etd","calls[].hazmat","calls[].draft","calls[].cargo_gross","calls[].cargo_net"],"output_fields_truncated":false,"canonical_field_aliases":{"identifier":["calls[].mmsi"]},"description_language":"en","documentation":"Arrivals to, or departures from, one or more Norwegian ports (SafeSeaNet),\nfor a span of whole years, newest first.\n\nBusy ports produce thousands of calls per year (Oslo ~2,600 arrivals/year),\nso this trims to `limit` and reports the true total in `count`. Page\nthrough with `offset`, or narrow the year span.\n\nArgs:\n    location_ids: One or more port/location ids from search_ports.\n    from_year: First year (inclusive), e.g. 2025.\n    to_year: Last year (inclusive). Defaults to from_year.\n    direction: \"arrivals\" (default) or \"departures\".\n    limit: Max calls to return, 1-200 (default 50). Sorted by ETA\n        (arrivals) or ETD (departures) descending.\n    offset: Skip this many calls (for pagination).\n\nReturns a dict with `direction`, `location_ids`, `from_year`, `to_year`,\n`count`, `returned`, `offset` and `calls`: each with shipname, mmsi, imo,\ncallsign, shiptype, gt, length, eta, etd, the other end of the leg\n(from_* for arrivals, to_* for departures), hazmat, draft and cargo.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_port_calls/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_port_calls/?location_ids={location_ids}&from_year={from_year}&to_year={to_year}&direction=arrivals&limit=50&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_port_calls","response_schema":{"type":"object","properties":{"direction":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"location_ids":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"from_year":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"to_year":{"type":"boolean"},"count":{"type":"integer"},"returned":{"type":"integer"},"offset":{"type":["integer","null"]},"calls":{"type":"array","items":{"type":"object","properties":{"shipname":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"mmsi":{"type":["integer","null"]},"imo":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"callsign":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"shiptype":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"gt":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"length":{"anyOf":[{"type":"number"},{"type":"null"}]},"eta":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"etd":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"hazmat":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"draft":{"anyOf":[{"type":"number"},{"type":"null"}]},"cargo_gross":{"type":"boolean"},"cargo_net":{"type":"boolean"}},"additionalProperties":false}}},"additionalProperties":false},"response_schema_status":{"status":"incomplete","codegen_safe":false,"description":"Not suitable for typed model generation: the container shape and field names are useful, but unresolved values accept any JSON value."},"entity_projection":{"status":"projected","entity_types":["port"],"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/kystdatahuset/get_port_calls/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_port_calls","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_port_calls?location_ids={location_ids}&from_year={from_year}&to_year={to_year}&direction=arrivals&limit=50&offset=0"},{"name":"get_ais_positions","description":"Historical AIS positions for one ship on a single UTC day, from Kystverket's\nAIS archive.","parameters":[{"name":"mmsi","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":true,"default":null,"description":"The ship's MMSI (from search_ships / get_ship)."},{"name":"date","type":"string","schema":{"type":"string"},"display_type":"string","required":true,"default":null,"description":"The UTC calendar day, ISO date (\"2026-06-01\")."},{"name":"max_points","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":500,"description":"Max positions to return, 10-5000 (default 500)."},{"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/kystdatahuset/get_ais_positions?mmsi={mmsi}&date={date}&max_points=500&limit=25&offset=0","output_fields":["mmsi","date","count","returned","downsampled","positions","positions[].time","positions[].lat","positions[].lon","positions[].sog","positions[].cog","positions[].heading","positions[].nav_status"],"output_fields_truncated":false,"canonical_field_aliases":{"identifier":["mmsi"],"date":["date"],"timestamp":["positions[].time"],"latitude":["positions[].lat"],"longitude":["positions[].lon"],"name":["positions[].heading"]},"description_language":"en","documentation":"Historical AIS positions for one ship on a single UTC day, from Kystverket's\nAIS archive.\n\nA busy day can hold thousands of position messages; if there are more than\n`max_points` the track is evenly downsampled (stride-sampled) to preserve\nits shape, and `downsampled` is set.\n\nArgs:\n    mmsi: The ship's MMSI (from search_ships / get_ship).\n    date: The UTC calendar day, ISO date (\"2026-06-01\").\n    max_points: Max positions to return, 10-5000 (default 500).\n\nReturns a dict with `mmsi`, `date`, `count` (raw messages that day),\n`returned`, `downsampled` and `positions`: each with time (UTC), lat, lon,\nsog (knots), cog, heading and nav_status (text). Positions are time-ordered.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_ais_positions/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/kystdatahuset/get_ais_positions/?mmsi={mmsi}&date={date}&max_points=500&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_ais_positions","response_schema":{"type":"object","properties":{"mmsi":{"type":["integer","null"]},"date":{"type":["string","null"],"format":"date"},"count":{"type":"integer"},"returned":{"type":"integer"},"downsampled":{"type":"boolean"},"positions":{"type":"array","items":{"type":"object","properties":{"time":{"type":["string","null"],"format":"date-time"},"lat":{"type":["number","null"]},"lon":{"type":["number","null"]},"sog":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"cog":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"heading":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"nav_status":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."}},"additionalProperties":false}}},"additionalProperties":false},"response_schema_status":{"status":"incomplete","codegen_safe":false,"description":"Not suitable for typed model generation: the container shape and field names are useful, but unresolved values accept any JSON value."},"entity_projection":{"status":"projected","entity_types":["port"],"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/kystdatahuset/get_ais_positions/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_ais_positions","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/get_ais_positions?mmsi={mmsi}&date={date}&max_points=500&limit=25&offset=0"}],"operation_schema_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset/{operation}/schema","related_sources":[{"id":"ais","name":"AIS and vessels","reason":"Latest positions and tracks for vessels calling at the ports.","api":"https://allemannsdata.com/wiki/api/v1/kilder/ais","wiki":"https://allemannsdata.com/wiki/kilder/ais/"},{"id":"fiskeridir","name":"Fiskeridirektoratet \u2013 vessel register","reason":"Owner and registration details for Norwegian fishing vessels.","api":"https://allemannsdata.com/wiki/api/v1/kilder/fiskeridir","wiki":"https://allemannsdata.com/wiki/kilder/fiskeridir/"}],"_meta":{"retrieved_at":"2026-08-02T14:01:39Z","language":"en","content_languages":["en"],"sources":[{"id":"kystdatahuset","name":"Kystdatahuset","description":"Norwegian ports, quays, maritime locations and reported port connections from the Coastal Administration.","cache_ttl_seconds":60}]},"_links":{"self":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset","names":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset?view=names","compact":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset?view=compact","full":"https://allemannsdata.com/wiki/api/v1/kilder/kystdatahuset","wiki":"https://allemannsdata.com/wiki/kilder/kystdatahuset/"}}
