{"id":515,"date":"2026-02-20T12:05:43","date_gmt":"2026-02-20T12:05:43","guid":{"rendered":"https:\/\/helsinki-tallinn.com\/nl\/?page_id=515"},"modified":"2026-02-23T13:08:00","modified_gmt":"2026-02-23T13:08:00","slug":"dienstregeling","status":"publish","type":"page","link":"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/","title":{"rendered":"Live Dienstregeling"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"515\" class=\"elementor elementor-515\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-637c806 e-flex e-con-boxed e-con e-parent\" data-id=\"637c806\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;shape_divider_bottom&quot;:&quot;tilt&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-shape elementor-shape-bottom\" aria-hidden=\"true\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" d=\"M0,6V0h1000v100L0,6z\"\/>\n<\/svg>\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1be39f2 e-con-full e-flex e-con e-child\" data-id=\"1be39f2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-995f7ac elementor-widget elementor-widget-breadcrumbs\" data-id=\"995f7ac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"breadcrumbs.default\">\n\t\t\t\t\t<p id=\"breadcrumbs\"><span><span><a href=\"https:\/\/helsinki-tallinn.com\/nl\/\">Helsinki Tallinn<\/a><\/span><\/span><\/p>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-54dc93d6 elementor-widget elementor-widget-heading\" data-id=\"54dc93d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Live Dienstregeling<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d74f203 elementor-widget elementor-widget-text-editor\" data-id=\"2d74f203\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Actuele dienstregeling van de ferry tussen Helsinki en Tallinn.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cdb769f e-flex e-con-boxed e-con e-parent\" data-id=\"cdb769f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-40339d6 e-con-full e-flex e-con e-child\" data-id=\"40339d6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8ac24f0 elementor-widget elementor-widget-text-editor\" data-id=\"8ac24f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>De complete (live) dienstregeling van de overtocht tussen Helsinki en Tallinn van alle drie de operators: <strong>Viking Line, Tallink Silja en Ecker\u00f6 Line. Standaardselectie is 3 dagen.<\/strong><\/p>\n<h2 id=\"helsinkitallinn\" class=\"wp-block-heading\">Helsinki naar Tallinn tijden<\/h2>\n<p>Ps. Als je klikt op de schepen krijg je in Engels meer informatie over de schepen met oa. livetrackers.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db057c9 elementor-widget elementor-widget-shortcode\" data-id=\"db057c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/nl\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;route&quot;:161,&quot;days&quot;:3,&quot;autoload&quot;:true,&quot;label&quot;:&quot;Helsinki - Talinn&quot;,&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Date&quot;,&quot;ui_days&quot;:&quot;Days&quot;,&quot;ui_button&quot;:&quot;Show sailings&quot;,&quot;status_idle&quot;:&quot;Pick a date and click Show sailings&quot;,&quot;status_loading&quot;:&quot;Loading...&quot;,&quot;status_empty&quot;:&quot;No sailings found&quot;,&quot;status_found&quot;:&quot;%d sailings found&quot;,&quot;th_date&quot;:&quot;Date&quot;,&quot;th_dep&quot;:&quot;Departure&quot;,&quot;th_arr&quot;:&quot;Arrival&quot;,&quot;th_dur&quot;:&quot;Duration&quot;,&quot;th_ship&quot;:&quot;Ship&quot;,&quot;th_op&quot;:&quot;Operator&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SUN&quot;,&quot;wd_mon&quot;:&quot;MON&quot;,&quot;wd_tue&quot;:&quot;TUE&quot;,&quot;wd_wed&quot;:&quot;WED&quot;,&quot;wd_thu&quot;:&quot;THU&quot;,&quot;wd_fri&quot;:&quot;FRI&quot;,&quot;wd_sat&quot;:&quot;SAT&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Check all %s departures on our timetable&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Check more %1$s and %2$s departures on our timetable&quot;,&quot;summary_footer_generic&quot;:&quot;Check our timetable for more sailings&quot;,&quot;summary_header&quot;:&quot;The next two departures:&quot;,&quot;summary_no_upcoming&quot;:&quot;No upcoming departures found&quot;,&quot;more_link&quot;:&quot;More sailings&quot;},&quot;showLogo&quot;:true,&quot;shipMap&quot;:{&quot;fi&quot;:&quot;Finlandia&quot;},&quot;shipLinks&quot;:{&quot;fi&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/finlandia\\\/&quot;,&quot;viking xprs&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/viking-xprs\\\/&quot;,&quot;mystar&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/mystar\\\/&quot;,&quot;victoria i&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/victoria\\\/&quot;,&quot;megastar&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/megastar\\\/&quot;},&quot;showShip&quot;:true}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date\">Date<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Date\">\n    <\/div>\n    <div>\n      <label for=\"tp-range\">Days<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Days\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">Show sailings<\/button><\/div>\n  <\/div>\n\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">Pick a date and click Show sailings<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Loading...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n\n  dateEl.valueAsDate = new Date();\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip || routeName) {\n        html +=\n        \/\/ Row 2: Ship & Route (no prefixes)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\">'+routeName+'<\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      const rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      if(rows.length===0){ status.textContent = L.status_empty; out.innerHTML=''; return; }\n      status.textContent = (cfg.label? (cfg.label+': '):'') + (L.status_found||'%d sailings found').replace('%d', rows.length);\n      out.innerHTML = renderTable(rows) + renderCards(rows);\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  btn.addEventListener('click', load);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b19fe46 elementor-widget elementor-widget-text-editor\" data-id=\"b19fe46\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>De bovenstaande interactieve dienstregeling toont de actuele vertrektijden vanuit Helsinki richting Tallinn. De tijden worden automatisch bijgewerkt op basis van de meest recente planning van de rederijen<strong>. Per afvaart zie je de geplande vertrektijd, aankomsttijd en de uitvoerende maatschappij.<\/strong> Let op dat vertrektijden kunnen wijzigen door weersomstandigheden op de Golf van Finland of operationele aanpassingen. <strong>Controleer vlak voor vertrek altijd de definitieve tijd bij de vervoerder.<\/strong><\/p>\n<h2 id=\"tallinnhelsinki\" class=\"wp-block-heading\">Dienstregeling Tallinn naar Helsinki<\/h2>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a35890c elementor-widget elementor-widget-shortcode\" data-id=\"a35890c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/nl\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;route&quot;:162,&quot;days&quot;:3,&quot;autoload&quot;:true,&quot;label&quot;:&quot;Talinn - Helsinki&quot;,&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Date&quot;,&quot;ui_days&quot;:&quot;Days&quot;,&quot;ui_button&quot;:&quot;Show sailings&quot;,&quot;status_idle&quot;:&quot;Pick a date and click Show sailings&quot;,&quot;status_loading&quot;:&quot;Loading...&quot;,&quot;status_empty&quot;:&quot;No sailings found&quot;,&quot;status_found&quot;:&quot;%d sailings found&quot;,&quot;th_date&quot;:&quot;Date&quot;,&quot;th_dep&quot;:&quot;Departure&quot;,&quot;th_arr&quot;:&quot;Arrival&quot;,&quot;th_dur&quot;:&quot;Duration&quot;,&quot;th_ship&quot;:&quot;Ship&quot;,&quot;th_op&quot;:&quot;Operator&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SUN&quot;,&quot;wd_mon&quot;:&quot;MON&quot;,&quot;wd_tue&quot;:&quot;TUE&quot;,&quot;wd_wed&quot;:&quot;WED&quot;,&quot;wd_thu&quot;:&quot;THU&quot;,&quot;wd_fri&quot;:&quot;FRI&quot;,&quot;wd_sat&quot;:&quot;SAT&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Check all %s departures on our timetable&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Check more %1$s and %2$s departures on our timetable&quot;,&quot;summary_footer_generic&quot;:&quot;Check our timetable for more sailings&quot;,&quot;summary_header&quot;:&quot;The next two departures:&quot;,&quot;summary_no_upcoming&quot;:&quot;No upcoming departures found&quot;,&quot;more_link&quot;:&quot;More sailings&quot;},&quot;showLogo&quot;:true,&quot;shipMap&quot;:{&quot;fi&quot;:&quot;Finlandia&quot;},&quot;shipLinks&quot;:{&quot;fi&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/finlandia\\\/&quot;,&quot;viking xprs&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/viking-xprs\\\/&quot;,&quot;mystar&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/mystar\\\/&quot;,&quot;victoria i&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/victoria\\\/&quot;,&quot;megastar&quot;:&quot;https:\\\/\\\/helsinki-tallinn.com\\\/megastar\\\/&quot;},&quot;showShip&quot;:true}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date\">Date<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Date\">\n    <\/div>\n    <div>\n      <label for=\"tp-range\">Days<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Days\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">Show sailings<\/button><\/div>\n  <\/div>\n\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">Pick a date and click Show sailings<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Loading...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n\n  dateEl.valueAsDate = new Date();\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip || routeName) {\n        html +=\n        \/\/ Row 2: Ship & Route (no prefixes)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\">'+routeName+'<\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      const rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      if(rows.length===0){ status.textContent = L.status_empty; out.innerHTML=''; return; }\n      status.textContent = (cfg.label? (cfg.label+': '):'') + (L.status_found||'%d sailings found').replace('%d', rows.length);\n      out.innerHTML = renderTable(rows) + renderCards(rows);\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  btn.addEventListener('click', load);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-168c0c8 elementor-widget elementor-widget-text-editor\" data-id=\"168c0c8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>De dienstregelingen hierboven geven een actueel overzicht van de afvaarten tussen Tallinn en Helsinki in beide richtingen<\/strong>. Omdat deze route tot de drukste internationale verbindingen in Noord Europa behoort, kunnen vertrektijden gedurende de dag worden aangepast. Controleer daarom altijd kort voor vertrek de definitieve tijden, incheckinformatie en eventuele wijzigingen bij de betreffende rederij.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c3ba9c4 e-con-full e-flex e-con e-child\" data-id=\"c3ba9c4\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_offset&quot;:20,&quot;sticky_parent&quot;:&quot;yes&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4850919 elementor-widget elementor-widget-html\" data-id=\"4850919\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<iframe\n  width=\"390\"\n  height=\"430\"\n  scrolling=\"yes\"\n  frameborder=\"0\"\n  src=\"https:\/\/ferrygogo.ferriesbook.com\/nl\/embed\/simple?aff_uid=fgogo&amp;options=noborder,nologo\">\n<\/iframe>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Live Dienstregeling Actuele dienstregeling van de ferry tussen Helsinki en Tallinn. De complete (live) dienstregeling van de overtocht tussen Helsinki [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":527,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-515","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Live Dienstregeling - Helsinki Tallinn Ferry Gids<\/title>\n<meta name=\"description\" content=\"Ontdek hier de complete ferry overtocht dienstregeling van de overtocht tussen Helsinki en Tallinn (Viking Line, Ecker\u00f6 Line en Tallink).\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Live Dienstregeling - Helsinki Tallinn Ferry Gids\" \/>\n<meta property=\"og:description\" content=\"Ontdek hier de complete ferry overtocht dienstregeling van de overtocht tussen Helsinki en Tallinn (Viking Line, Ecker\u00f6 Line en Tallink).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/\" \/>\n<meta property=\"og:site_name\" content=\"Helsinki Tallinn Ferry Gids\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-23T13:08:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/aankomst-in-helsinki.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/\",\"url\":\"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/\",\"name\":\"Live Dienstregeling - Helsinki Tallinn Ferry Gids\",\"isPartOf\":{\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/aankomst-in-helsinki.jpg\",\"datePublished\":\"2026-02-20T12:05:43+00:00\",\"dateModified\":\"2026-02-23T13:08:00+00:00\",\"description\":\"Ontdek hier de complete ferry overtocht dienstregeling van de overtocht tussen Helsinki en Tallinn (Viking Line, Ecker\u00f6 Line en Tallink).\",\"breadcrumb\":{\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/#primaryimage\",\"url\":\"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/aankomst-in-helsinki.jpg\",\"contentUrl\":\"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/aankomst-in-helsinki.jpg\",\"width\":1920,\"height\":500},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Helsinki Tallinn\",\"item\":\"https:\/\/helsinki-tallinn.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Live Dienstregeling\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/#website\",\"url\":\"https:\/\/helsinki-tallinn.com\/nl\/\",\"name\":\"Helsinki Tallinn Ferry Gids\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/helsinki-tallinn.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/#organization\",\"name\":\"Helsinki Tallinn Ferry Gids\",\"url\":\"https:\/\/helsinki-tallinn.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/Helsinki-Talinn-2.png\",\"contentUrl\":\"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/Helsinki-Talinn-2.png\",\"width\":700,\"height\":200,\"caption\":\"Helsinki Tallinn Ferry Gids\"},\"image\":{\"@id\":\"https:\/\/helsinki-tallinn.com\/nl\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Live Dienstregeling - Helsinki Tallinn Ferry Gids","description":"Ontdek hier de complete ferry overtocht dienstregeling van de overtocht tussen Helsinki en Tallinn (Viking Line, Ecker\u00f6 Line en Tallink).","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/","og_locale":"nl_NL","og_type":"article","og_title":"Live Dienstregeling - Helsinki Tallinn Ferry Gids","og_description":"Ontdek hier de complete ferry overtocht dienstregeling van de overtocht tussen Helsinki en Tallinn (Viking Line, Ecker\u00f6 Line en Tallink).","og_url":"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/","og_site_name":"Helsinki Tallinn Ferry Gids","article_modified_time":"2026-02-23T13:08:00+00:00","og_image":[{"width":1920,"height":500,"url":"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/aankomst-in-helsinki.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"2 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/","url":"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/","name":"Live Dienstregeling - Helsinki Tallinn Ferry Gids","isPartOf":{"@id":"https:\/\/helsinki-tallinn.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/#primaryimage"},"image":{"@id":"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/#primaryimage"},"thumbnailUrl":"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/aankomst-in-helsinki.jpg","datePublished":"2026-02-20T12:05:43+00:00","dateModified":"2026-02-23T13:08:00+00:00","description":"Ontdek hier de complete ferry overtocht dienstregeling van de overtocht tussen Helsinki en Tallinn (Viking Line, Ecker\u00f6 Line en Tallink).","breadcrumb":{"@id":"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/#primaryimage","url":"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/aankomst-in-helsinki.jpg","contentUrl":"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/aankomst-in-helsinki.jpg","width":1920,"height":500},{"@type":"BreadcrumbList","@id":"https:\/\/helsinki-tallinn.com\/nl\/dienstregeling\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Helsinki Tallinn","item":"https:\/\/helsinki-tallinn.com\/nl\/"},{"@type":"ListItem","position":2,"name":"Live Dienstregeling"}]},{"@type":"WebSite","@id":"https:\/\/helsinki-tallinn.com\/nl\/#website","url":"https:\/\/helsinki-tallinn.com\/nl\/","name":"Helsinki Tallinn Ferry Gids","description":"","publisher":{"@id":"https:\/\/helsinki-tallinn.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/helsinki-tallinn.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/helsinki-tallinn.com\/nl\/#organization","name":"Helsinki Tallinn Ferry Gids","url":"https:\/\/helsinki-tallinn.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/helsinki-tallinn.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/Helsinki-Talinn-2.png","contentUrl":"https:\/\/helsinki-tallinn.com\/nl\/wp-content\/uploads\/sites\/3\/2026\/02\/Helsinki-Talinn-2.png","width":700,"height":200,"caption":"Helsinki Tallinn Ferry Gids"},"image":{"@id":"https:\/\/helsinki-tallinn.com\/nl\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/helsinki-tallinn.com\/nl\/wp-json\/wp\/v2\/pages\/515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helsinki-tallinn.com\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/helsinki-tallinn.com\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/helsinki-tallinn.com\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/helsinki-tallinn.com\/nl\/wp-json\/wp\/v2\/comments?post=515"}],"version-history":[{"count":52,"href":"https:\/\/helsinki-tallinn.com\/nl\/wp-json\/wp\/v2\/pages\/515\/revisions"}],"predecessor-version":[{"id":695,"href":"https:\/\/helsinki-tallinn.com\/nl\/wp-json\/wp\/v2\/pages\/515\/revisions\/695"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helsinki-tallinn.com\/nl\/wp-json\/wp\/v2\/media\/527"}],"wp:attachment":[{"href":"https:\/\/helsinki-tallinn.com\/nl\/wp-json\/wp\/v2\/media?parent=515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}