{"id":44288,"date":"2026-11-01T13:07:03","date_gmt":"2026-11-01T13:07:03","guid":{"rendered":"https:\/\/epiccarry.com\/blogs\/?p=44288"},"modified":"2026-11-01T13:07:03","modified_gmt":"2026-11-01T13:07:03","slug":"wow-forever-leveling-time","status":"publish","type":"post","link":"https:\/\/epiccarry.com\/blogs\/wow-forever-leveling-time\/","title":{"rendered":"How Long to Level 60 in WoW Forever? Calculate Your Date"},"content":{"rendered":"<p><em>Updated November 1, 2026.<\/em><\/p>\n<p>Estimates put reaching level 60 in WoW Forever at about <strong>100\u2013150 hours<\/strong> of play; a player new to Classic can need about 200. The one official number: Blizzard says players average 20.5 hours to reach level 20. At a 150-hour pace the rest goes roughly 40 hours to level 30, 70 to level 40 and 100 to level 50, so the last ten levels take longer than the first thirty put together. Nobody has a measured full run yet, so treat these as estimates.<\/p>\n<h2 id=\"wow-forever-leveling-time-calculator\">WoW Forever leveling time calculator<\/h2>\n<p>Enter the hours you can play a week and your level, and this calculator gives the date you reach level 60. We sell leveling, so it also shows what changes if one of our players takes part of the road. It works just as well if you want to play every level.<\/p>\n\n<style>\n.rd{--card:#191925;--raise:#222232;--sink:#101019;--line:rgba(231,234,249,.14);--hair:rgba(231,234,249,.08);--text:#e7eaf9;--muted:#a6abc4;--white:#fff;--you:#5b8def;--ours:#ff5900;--alone:#8a8fa8;--done:#3a3b4f;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:28px;margin:24px 0;color:var(--text);font-size:16px;line-height:1.5}\n.rd,.rd *{box-sizing:border-box}\n.rd [hidden]{display:none!important}\n#rd-box p{margin:0 0 12px;color:inherit;font-size:inherit;line-height:inherit}\n#rd-box strong{color:var(--white);font-weight:700}\n#rd-box a{color:var(--white)}\n.rd .rd-title{color:var(--muted);font-size:13px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;line-height:1.2;margin:0 0 18px}\n.rd button:focus-visible,.rd input:focus-visible,.rd a:focus-visible,.rd-plot svg:focus-visible{outline:2px solid var(--white);outline-offset:2px}\n\n.rd-pace{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);grid-template-areas:\"in out\" \"how how\";gap:14px 24px;align-items:stretch}\n.rd-in{grid-area:in}\n.rd-how{grid-area:how}\n.rd-field{margin-bottom:8px}\n.rd-label{display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:14px;color:var(--muted);margin-bottom:2px}\n.rd-label output{color:var(--white);font-weight:700;font-size:20px;line-height:1.2;font-variant-numeric:tabular-nums}\n.rd-range{--fill:30%;-webkit-appearance:none;appearance:none;display:block;width:100%;height:32px;margin:0;background:transparent;cursor:pointer;touch-action:pan-y}\n.rd-range::-webkit-slider-runnable-track{height:6px;border-radius:3px;background:linear-gradient(90deg,var(--you) var(--fill),var(--line) var(--fill))}\n.rd-range::-moz-range-track{height:6px;border-radius:3px;background:var(--line)}\n.rd-range::-moz-range-progress{height:6px;border-radius:3px;background:var(--you)}\n.rd-range::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;margin-top:-8px;border:0;border-radius:50%;background:var(--white);box-shadow:0 0 0 4px rgba(91,141,239,.28)}\n.rd-range::-moz-range-thumb{width:22px;height:22px;border:0;border-radius:50%;background:var(--white);box-shadow:0 0 0 4px rgba(91,141,239,.28)}\n.rd-seg{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}\n.rd-seg button{background:transparent;border:1px solid var(--line);border-radius:6px;color:var(--text);font:inherit;font-size:14px;line-height:1.25;padding:8px 4px;cursor:pointer}\n.rd-seg button small{display:block;color:var(--muted);font-size:12px;margin-top:1px}\n.rd-seg button[aria-pressed=true]{background:rgba(91,141,239,.16);border-color:var(--you);color:var(--white)}\n.rd-seg button[aria-pressed=true] small{color:var(--text)}\n\n.rd-alone{grid-area:out;display:flex;flex-direction:column;justify-content:center;background:var(--sink);border-radius:10px;padding:18px 20px}\n.rd-name{font-size:14px;color:var(--muted);line-height:1.3}\n.rd-name i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:7px;vertical-align:-1px}\n.rd-big{color:var(--white);font-size:50px;font-weight:700;line-height:1.1;letter-spacing:-.02em;margin:4px 0 6px;white-space:nowrap}\n.rd-big small{font-size:.4em;font-weight:500;letter-spacing:0;color:var(--muted);margin-left:.3em}\n.rd-sub{font-size:14px;line-height:1.4;color:var(--text)}\n.rd-dim{color:var(--muted)}\n\n.rd-step{border-top:1px solid var(--hair);margin:22px 0 0;padding-top:20px}\n.rd-q{color:var(--white);font-size:18px;font-weight:700;line-height:1.3}\n.rd-qsub{color:var(--muted);font-size:14px;margin-bottom:12px}\n.rd-road{position:relative;height:74px}\n.rd-trough{position:absolute;top:8px;left:12px;right:12px;height:26px;border-radius:6px;background:var(--sink);box-shadow:inset 0 0 0 1px var(--line)}\n.rd-bar{position:absolute;top:11px;left:15px;right:15px;height:20px;display:flex;gap:2px;clip-path:inset(0 100% 0 0);transition:clip-path .9s cubic-bezier(.2,.7,.2,1)}\n.rd-go .rd-bar{clip-path:inset(0)}\n.rd-bar i{display:block;height:100%;min-width:0}\n.rd-bar i:first-child{border-radius:4px 0 0 4px}\n.rd-bar i:last-child{border-radius:0 4px 4px 0}\n.rd-bar i:only-child{border-radius:4px}\n.rd-bar .c-you{background:linear-gradient(180deg,#7aa5f4,#4a7de0)}\n.rd-bar .c-ours{background:repeating-linear-gradient(135deg,#ff6a14 0 7px,#e54f00 7px 14px)}\n.rd-notches{position:absolute;top:11px;left:15px;right:15px;height:20px;pointer-events:none}\n.rd-notches b{position:absolute;top:0;width:1px;height:100%;background:rgba(16,16,25,.55)}\n.rd-cut{position:absolute;left:0;top:0;width:100%;height:42px;margin:0;-webkit-appearance:none;appearance:none;background:transparent;cursor:ew-resize;touch-action:pan-y}\n.rd-cut::-webkit-slider-runnable-track{height:42px;background:transparent}\n.rd-cut::-moz-range-track{height:42px;background:transparent}\n.rd-cut::-webkit-slider-thumb{-webkit-appearance:none;width:24px;height:42px;background:transparent;border:0}\n.rd-cut::-moz-range-thumb{width:24px;height:42px;background:transparent;border:0}\n.rd-knob{position:absolute;top:21px;width:38px;height:38px;margin:-19px 0 0 -19px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--white);color:#0f1c2a;font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;box-shadow:0 0 0 3px var(--card),0 2px 10px rgba(0,0,0,.55);pointer-events:none}\n.rd-cut:focus-visible{outline:0}\n.rd-cut:focus-visible + .rd-knob{box-shadow:0 0 0 3px var(--card),0 0 0 5px var(--white)}\n.rd-ticks{position:absolute;left:15px;right:15px;top:50px;height:18px}\n.rd-ticks span{position:absolute;transform:translateX(-50%);font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}\n.rd-ticks span:first-child{transform:none}\n.rd-ticks span:last-child{transform:translateX(-100%)}\n.c-you{background:var(--you)}\n.c-ours{background:var(--ours)}\n.c-alone{background:var(--alone)}\n.c-done{background:var(--done)}\n\n.rd-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.45fr);gap:12px;align-items:stretch}\n.rd-split.rd-two{grid-template-columns:minmax(0,1fr) minmax(0,1.45fr)}\n.rd-split.rd-one{display:block;font-size:16px;color:var(--text)}\n.rd-stat{background:var(--raise);border-radius:10px;padding:14px 16px}\n.rd-val{color:var(--white);font-size:24px;font-weight:700;line-height:1.2;margin:4px 0 4px;white-space:nowrap}\n.rd-end{box-shadow:inset 0 0 0 1px var(--ours)}\n.rd-end .rd-big{color:var(--white);font-size:38px;margin:2px 0 4px}\n.rd-gain{color:var(--white);font-weight:700}\n.rd-end .rd-dim{font-size:13px}\n.rd-hint{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;font-size:15px;color:var(--text)}\n.rd-hint button{flex:none;background:transparent;border:1px solid var(--line);border-radius:4px;color:var(--white);font:inherit;font-size:14px;padding:6px 12px;cursor:pointer}\n\n.rd-next{margin-top:16px;font-size:15px}\n#rd-box .rd-next p{margin:0 0 12px}\n#rd-box .rd-next p:last-child{margin-bottom:0}\n.rd-next strong{color:var(--white)}\n#rd-box .rd-next .rd-note{color:var(--muted)!important;font-size:14px;line-height:1.45;margin:10px 0 0}\n#rd-box a.rd-btn{display:block;background:var(--ours);color:var(--white);border-radius:4px;padding:15px 20px;font-size:18px;font-weight:700;line-height:1.25;text-align:center;text-decoration:none}\n#rd-box a.rd-btn:hover{background:#ff6f1f}\n.rd-link{background:none;border:0;padding:0;color:var(--white);font:inherit;text-decoration:underline;cursor:pointer}\n.rd-code{background:transparent;border:1px dashed var(--muted);border-radius:4px;color:var(--white);font:inherit;font-weight:700;letter-spacing:.02em;padding:1px 7px;cursor:pointer}\n\n.rd-chead{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:2px 16px;border-top:1px solid var(--hair);margin-top:22px;padding-top:18px}\n.rd-chead .rd-q{font-size:16px}\n.rd-key{display:flex;flex-wrap:wrap;gap:2px 14px;font-size:13px;color:var(--muted)}\n.rd-key i{display:inline-block;width:14px;height:3px;border-radius:2px;margin-right:6px;vertical-align:middle}\n.rd-plot{position:relative;margin-top:2px}\n.rd-plot svg{display:block;width:100%;touch-action:pan-y}\n.rd-plot text{font-family:inherit;font-size:12px;fill:var(--muted)}\n.rd-plot text.v{fill:var(--white);font-weight:700;font-size:13px}\n.rd-plot text.m{paint-order:stroke;stroke:var(--card);stroke-width:4px}\n.rd-tip{position:absolute;top:0;left:0;pointer-events:none;background:var(--raise);border:1px solid var(--line);border-radius:6px;padding:7px 10px;font-size:13px;line-height:1.4;white-space:nowrap;box-shadow:0 2px 10px rgba(0,0,0,.4)}\n.rd-tip b{color:var(--white)}\n.rd-tip div+div{display:flex;align-items:center;gap:6px}\n.rd-tip i{display:inline-block;width:12px;height:3px;border-radius:2px}\n.rd-tip span{color:var(--muted)}\n#rd-box p.rd-small{color:var(--muted)!important;font-size:13px;line-height:1.45;margin:12px 0 0}\n@media (max-width:560px){\n  .rd{padding:18px 16px}\n  .rd-pace{grid-template-columns:minmax(0,1fr);grid-template-areas:\"in\" \"how\" \"out\";gap:12px}\n  .rd-big{font-size:44px}\n  .rd-seg{gap:4px}\n  .rd-seg button{font-size:12.5px;padding:8px 0;letter-spacing:-.01em}\n  .rd-split,.rd-split.rd-two{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}\n  .rd-end{grid-column:1\/-1;order:-1}\n  .rd-stat{padding:12px 14px}\n  .rd-val{font-size:21px}\n  #rd-box a.rd-btn{font-size:17px;padding:14px 10px}\n}\n@media (prefers-reduced-motion:reduce){.rd-bar{transition:none}}\n<\/style>\n<div class=\"rd\" id=\"rd-box\" role=\"group\" aria-label=\"WoW Forever leveling time calculator\">\n  <div class=\"rd-title\">Your road to 60<\/div>\n\n  <div class=\"rd-pace\">\n    <div class=\"rd-in\">\n      <div class=\"rd-field\">\n        <label class=\"rd-label\" for=\"rd-hours\"><span>Hours you can play a week<\/span><output id=\"rd-hours-out\">20<\/output><\/label>\n        <input class=\"rd-range\" id=\"rd-hours\" type=\"range\" min=\"5\" max=\"60\" step=\"1\" value=\"20\">\n      <\/div>\n      <div class=\"rd-field\">\n        <label class=\"rd-label\" for=\"rd-level\"><span>Your level now<\/span><output id=\"rd-level-out\">1<\/output><\/label>\n        <input class=\"rd-range\" id=\"rd-level\" type=\"range\" min=\"1\" max=\"59\" step=\"1\" value=\"1\">\n      <\/div>\n    <\/div>\n    <div class=\"rd-alone\" id=\"rd-alone\" aria-live=\"polite\"><\/div>\n    <div class=\"rd-how\">\n      <div class=\"rd-seg\" role=\"group\" aria-label=\"How you level\">\n        <button type=\"button\" data-pace=\"route\" aria-pressed=\"false\">Know the route<small>about 115 h<\/small><\/button>\n        <button type=\"button\" data-pace=\"classic\" aria-pressed=\"true\">Played Classic<small>about 150 h<\/small><\/button>\n        <button type=\"button\" data-pace=\"fresh\" aria-pressed=\"false\">New to Classic<small>about 200 h<\/small><\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"rd-step\">\n    <div class=\"rd-q\">How far do you want to play it yourself?<\/div>\n    <div class=\"rd-qsub\">Your road, to scale by hours of play. Drag the level badge.<\/div>\n    <div class=\"rd-road\" id=\"rd-road\">\n      <div class=\"rd-trough\" aria-hidden=\"true\"><\/div>\n      <div class=\"rd-bar\" id=\"rd-bar\" aria-hidden=\"true\"><\/div>\n      <div class=\"rd-notches\" id=\"rd-notches\" aria-hidden=\"true\"><\/div>\n      <input class=\"rd-cut\" id=\"rd-cut\" type=\"range\" min=\"0\" max=\"1000\" step=\"1\" value=\"660\" aria-label=\"Level you play to\">\n      <div class=\"rd-knob\" id=\"rd-knob\" aria-hidden=\"true\">50<\/div>\n      <div class=\"rd-ticks\" id=\"rd-ticks\" aria-hidden=\"true\"><\/div>\n    <\/div>\n    <div class=\"rd-split\" id=\"rd-split\" aria-live=\"polite\"><\/div>\n    <div class=\"rd-hint\" id=\"rd-hint\" hidden><\/div>\n  <\/div>\n\n  <div class=\"rd-next\" id=\"rd-next\"><\/div>\n\n  <div class=\"rd-chead\">\n    <div class=\"rd-q\">Your level, day by day<\/div>\n    <div class=\"rd-key\" id=\"rd-legend\"><\/div>\n  <\/div>\n  <div class=\"rd-plot\" id=\"rd-plot\"><\/div>\n\n  <p class=\"rd-small\">All estimates. Hours come from route simulators and player reports, since the beta stopped at level 30; inside each ten levels they follow the game&#8217;s XP table. Our player&#8217;s days are the stretch&#8217;s share of the road, taken from the store&#8217;s up to 9 days on Super Express and up to 14 at Normal speed for a full 1\u201360. High demand can stretch them, above all at launch.<\/p>\n<\/div>\n<script nowprocket>\n(function () {\n  'use strict';\n  var DAY = 864e5;\n  var LAUNCH = Date.UTC(2026, 10, 4);\n  var RAIDS = Date.UTC(2026, 11, 9);\n  var PACE = { route: 115, classic: 150, fresh: 200 };\n  \/\/ XP to the next level, 1 to 59: Forever keeps Classic's table.\n  var XP = [400, 900, 1400, 2100, 2800, 3600, 4500, 5400, 6500, 7600, 8800, 10100, 11400, 12900, 14400, 16000, 17700, 19400, 21300, 23200,\n    25200, 27300, 29400, 31700, 34000, 36400, 38900, 41400, 44300, 47400, 50800, 54500, 58600, 62800, 67100, 71600, 76100, 80800, 85700, 90700,\n    95800, 101000, 106300, 111800, 117500, 123200, 129100, 135100, 141200, 147500, 153900, 160400, 167100, 173900, 180800, 187900, 195000, 202300, 209800];\n  \/\/ Share of the road in hours every ten levels: Blizzard's 20.5 h to level 20, the 20\/50\/80 h split, pace tables. Inside ten levels, time follows XP.\n  var ANCHOR = [[1, 0], [10, 0.04], [20, 0.135], [30, 0.28], [40, 0.47], [50, 0.66], [60, 1]];\n  var ROAD = [null, 0];\n  ANCHOR.slice(1).forEach(function (b, i) {\n    var a = ANCHOR[i], band = 0, got = 0, l;\n    for (l = a[0]; l < b[0]; l++) { band += XP[l - 1]; }\n    for (l = a[0]; l < b[0]; l++) { got += XP[l - 1]; ROAD[l + 1] = a[1] + (b[1] - a[1]) * got \/ band; }\n  });\n  \/\/ The store's speeds: up to 9 (Super Express) or 14 (Normal) days for 1-60, \"shorter\" for parts. A part gets its share of the road.\n  var FAST = 9, NORMAL = 14;\n  var STORE = 'https:\/\/epiccarry.com\/wow-forever\/boost\/leveling\/';\n  var RAID_PAGE = 'https:\/\/epiccarry.com\/blogs\/wow-forever-raid-unlock\/';\n  var COUPON = 'BLOG_LVL';\n  \/\/ The coupon expires at 00:00 on December 10, store time (UTC), so December 9 is its last day.\n  var COUPON_ENDS = Date.UTC(2026, 11, 10);\n\n  function share(level) {\n    var low = Math.floor(level);\n    return low >= 60 ? 1 : ROAD[low] + (ROAD[low + 1] - ROAD[low]) * (level - low);\n  }\n\n  function levelAt(done) {\n    for (var l = 1; l < 60; l++) {\n      if (done <= ROAD[l + 1]) { return l + (done - ROAD[l]) \/ (ROAD[l + 1] - ROAD[l]); }\n    }\n    return 60;\n  }\n\n  function clamp(n, low, high) { return Math.min(high, Math.max(low, n)); }\n  \/\/ WordPress prints an ampersand in a post's script as an entity, which breaks it, so this file has none.\n  function all() { return Array.prototype.every.call(arguments, Boolean); }\n\n  function ourDays(cut, full) { return full * (1 - share(cut)); }\n  function upTo(n) { return n > 0 ? Math.max(1, Math.ceil(n)) : 0; }\n\n  function plan(s) {\n    var road = PACE[s.pace];\n    var start = Math.max(s.today, LAUNCH);\n    var done = share(s.level);\n    var cut = clamp(s.cut, s.level, 60);\n    \/\/ Fractions add up first and are rounded once, so a stretch handed over can never land later for being rounded twice.\n    var whole = function (n) { return n > 0 ? Math.max(1, Math.round(n)) * DAY : 0; };\n    var span = function (hours) { return hours \/ s.hours * 7; };\n    var hoursTo = function (level) { return road * (share(level) - done); };\n    var reach = function (level) { return start + whole(span(hoursTo(level))); };\n    \/\/ A stretch takes at least a day, but never runs past the reader's own date.\n    var ends = function (level, full) {\n      return Math.max(start + whole(span(hoursTo(level)) + ourDays(level, full)), Math.min(alone, reach(level) + DAY));\n    };\n    var left = road * (1 - done);\n    var alone = start + whole(span(left));\n    var handAt = reach(cut);\n    var raidCut = null;\n    if (all(start < RAIDS, alone > RAIDS)) {\n      for (var c = 59; c >= s.level; c--) {\n        if (ends(c, FAST) <= RAIDS) { raidCut = c; break; }\n      }\n    }\n    return {\n      level: s.level, cut: cut, start: start,\n      left: Math.round(left), mine: Math.round(hoursTo(cut)), ours: Math.round(left) - Math.round(hoursTo(cut)),\n      behind: Math.round(road * done), alone: alone, handAt: handAt,\n      ourDays: upTo(ourDays(cut, FAST)), normalDays: upTo(ourDays(cut, NORMAL)),\n      handEnd: ends(cut, FAST), normalEnd: ends(cut, NORMAL), raidCut: raidCut,\n      mount: s.level < 40 ? reach(40) : null\n    };\n  }\n\n  function short(ms) {\n    var d = new Date(ms);\n    var o = { month: 'short', day: 'numeric', timeZone: 'UTC' };\n    if (d.getUTCFullYear() !== 2026) { o.year = 'numeric'; }\n    return d.toLocaleDateString('en-US', o);\n  }\n  function days(n) { return n + (n === 1 ? ' day' : ' days'); }\n  function el(id) { return document.getElementById(id); }\n\n  function raidWords(ms, start) {\n    if (start >= RAIDS) { return ''; }\n    var lag = Math.round((ms - RAIDS) \/ DAY);\n    return lag > 0 ? days(lag) + ' after raids open' : lag === 0 ? 'The day raids open' : days(-lag) + ' before raids open';\n  }\n\n  var state = { hours: 20, pace: 'classic', level: 1, cut: 50, today: Date.now() };\n\n  function flagText(p) {\n    if (p.cut >= 60) { return 'You play it all'; }\n    if (p.cut === p.level) { return p.level === 1 ? 'Our player takes it all' : 'Our player from here'; }\n    return 'You play to ' + p.cut;\n  }\n\n  function drawRoad(p) {\n    var parts = [];\n    if (p.behind > 0) { parts.push(['c-done', share(p.level)]); }\n    if (p.mine > 0) { parts.push(['c-you', share(p.cut) - share(p.level)]); }\n    if (p.ours > 0) { parts.push(['c-ours', 1 - share(p.cut)]); }\n    el('rd-bar').innerHTML = parts.map(function (x) {\n      return '<i class=\"' + x[0] + '\" style=\"flex:' + x[1].toFixed(4) + ' 1 0\"><\/i>';\n    }).join('');\n    var at = share(p.cut);\n    var knob = el('rd-knob');\n    knob.textContent = p.cut;\n    knob.style.left = 'calc(12px + (100% - 24px) * ' + at.toFixed(4) + ')';\n    var cut = el('rd-cut');\n    cut.value = Math.round(at * 1000);\n    cut.setAttribute('aria-valuetext', flagText(p));\n  }\n\n  \/\/ A date large: the year, where it is not this one, stays small.\n  function big(ms) {\n    var parts = short(ms).split(', ');\n    return parts[0] + (parts[1] ? '<small>' + parts[1] + '<\/small>' : '');\n  }\n\n  function drawAlone(p) {\n    var raid = raidWords(p.alone, p.start);\n    el('rd-alone').innerHTML = '<div class=\"rd-name\">Level 60 on your own<\/div><div class=\"rd-big\">' + big(p.alone) + '<\/div>' +\n      '<div class=\"rd-sub\">' + p.left + ' hours of play<\/div>' + (raid ? '<div class=\"rd-sub rd-dim\">' + raid + '<\/div>' : '');\n  }\n\n  function stat(key, label, value, sub) {\n    return '<div class=\"rd-stat\"><div class=\"rd-name\"><i class=\"' + key + '\"><\/i>' + label + '<\/div>' +\n      '<div class=\"rd-val\">' + value + '<\/div><div class=\"rd-sub rd-dim\">' + sub + '<\/div><\/div>';\n  }\n\n  function drawSplit(p) {\n    var box = el('rd-split');\n    var hint = el('rd-hint');\n    if (p.cut >= 60) {\n      box.className = 'rd-split rd-one';\n      box.textContent = 'You keep every level. Nothing to hand over.';\n      hint.hidden = true;\n      return;\n    }\n    var mine = p.cut > p.level;\n    var sooner = Math.round((p.alone - p.handEnd) \/ DAY);\n    var gain = sooner >= 2 ? days(sooner) + ' sooner' : sooner > -2 ? 'About the same date' : 'Later than on your own';\n    var inTime = all(p.start < RAIDS, p.handEnd <= RAIDS);\n    var speed = p.normalEnd === p.handEnd ? 'Super Express or Normal' : 'Super Express. Normal by ' + short(p.normalEnd);\n    box.className = mine ? 'rd-split' : 'rd-split rd-two';\n    box.innerHTML = (mine ? stat('c-you', 'You play', p.mine + ' hours', 'to level ' + p.cut + ', around ' + short(p.handAt)) : '') +\n      stat('c-ours', 'You skip', p.ours + ' hours', 'our player takes up to ' + days(p.ourDays)) +\n      '<div class=\"rd-stat rd-end\"><div class=\"rd-name\">Level 60 with our player<\/div><div class=\"rd-big\">' + big(p.handEnd) + '<\/div>' +\n      '<div class=\"rd-sub rd-gain\">' + gain + (inTime ? ', before raids open' : '') + '<\/div>' +\n      '<div class=\"rd-sub rd-dim\">' + speed + '<\/div><\/div>';\n    var show = all(p.raidCut !== null, p.raidCut !== p.cut, p.handEnd > RAIDS);\n    hint.hidden = !show;\n    if (show) {\n      hint.innerHTML = '<span>To be 60 when raids open on Super Express, play to level <strong>' + p.raidCut + '<\/strong>.<\/span><button type=\"button\" id=\"rd-hint-go\">Show that<\/button>';\n      el('rd-hint-go').addEventListener('click', function () { state.cut = p.raidCut; render(); });\n    }\n  }\n\n  function drawNext(p) {\n    var box = el('rd-next');\n    var live = state.today < COUPON_ENDS;\n    if (p.cut >= 60) {\n      box.innerHTML = '<p>Enjoy the road. When you are close, see <a href=\"' + RAID_PAGE + '\">what raid day needs<\/a>.<\/p>';\n      return;\n    }\n    var range = p.cut + '\u201360';\n    var note = p.cut === 1 ? '' : 'The page opens on the full 1\u201360 price. Set the level range to ' + range + ' to see yours.';\n    box.innerHTML = '<a class=\"rd-btn\" href=\"' + STORE + '\" target=\"_blank\" rel=\"noopener\">See the price for levels ' + range + '<\/a>' +\n      (note ? '<p class=\"rd-note\">' + note + '<\/p>' : '') +\n      '<p class=\"rd-note\">' + (live ? '10% off with code <button type=\"button\" class=\"rd-code\" data-code title=\"Copy the code\">' + COUPON + '<\/button> through December 9. ' : '') +\n      'Questions first? <button type=\"button\" class=\"rd-link\" data-chat>Ask us in chat<\/button>.<\/p>';\n  }\n\n  \/\/ What the page reports (app.analytics.traffic_sync, kinds tool, tool_use, tool_cta, tool_coupon, tool_chat): link_to has no\n  \/\/ slash, so the store's own click, which the blog's click snippet counts, is not counted twice.\n  function note(event, kind) {\n    window.dataLayer = window.dataLayer || [];\n    var gtag = window.gtag || function () { window.dataLayer.push(arguments); };\n    gtag('event', event, { link_kind: kind, link_to: 'road_to_60' });\n  }\n\n  \/\/ Line chart: level by date. Blue is you, orange our player, grey carrying on alone.\n  var view = null;\n\n  function points(fromLevel, toLevel, t0, t1) {\n    var out = [];\n    if (toLevel <= fromLevel) { return out; }\n    var a = share(fromLevel), b = share(toLevel);\n    for (var l = fromLevel; l <= toLevel; l++) {\n      out.push([t0 + (t1 - t0) * (share(l) - a) \/ (b - a), l]);\n    }\n    return out;\n  }\n\n  function ticks(from, to, X, left, right) {\n    var month = X(from + 30 * DAY) - X(from);\n    var every = month >= 52 ? 1 : month >= 26 ? 2 : 3;\n    var d = new Date(from), out = [];\n    var y = d.getUTCFullYear(), m = d.getUTCMonth();\n    for (var i = 0; i < 40; i++) {\n      var first = Date.UTC(y, m + i, 1);\n      if (first > to) { break; }\n      if (all(i % every === 0, first > from, X(first) > left + 54, X(first) < right - 8)) { out.push(first); }\n      var mid = Date.UTC(y, m + i, 15);\n      if (all(month >= 110, mid > from, mid < to, X(mid) > left + 54, X(mid) < right - 8)) { out.push(mid); }\n    }\n    return out;\n  }\n\n  function drawChart(p) {\n    var box = el('rd-plot');\n    var W = Math.max(280, Math.round(box.clientWidth)), H = 232;\n    var L = 26, R = 48, T = 24, B = 26;\n    var raidIn = p.start < RAIDS;\n    var from = p.start, to = Math.max(p.alone, p.handEnd, raidIn ? RAIDS : 0) + DAY;\n    var X = function (t) { return L + (t - from) \/ (to - from) * (W - L - R); };\n    var Y = function (level) { return H - B - (level - 1) \/ 59 * (H - T - B); };\n    var path = function (pts) {\n      return pts.map(function (q, i) { return (i ? 'L' : 'M') + X(q[0]).toFixed(1) + ' ' + Y(q[1]).toFixed(1); }).join(' ');\n    };\n    var line = function (pts, colour) {\n      return pts.length ? '<path d=\"' + path(pts) + '\" fill=\"none\" stroke=\"var(' + colour + ')\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path>' : '';\n    };\n    var dot = function (t, level, colour) {\n      return '<circle cx=\"' + X(t).toFixed(1) + '\" cy=\"' + Y(level).toFixed(1) + '\" r=\"5\" fill=\"var(' + colour + ')\" stroke=\"var(--card)\" stroke-width=\"2\"><\/circle>';\n    };\n    var out = '';\n    [1, 20, 40, 60].forEach(function (l) {\n      out += '<line x1=\"' + L + '\" x2=\"' + (W - R) + '\" y1=\"' + Y(l) + '\" y2=\"' + Y(l) + '\" stroke=\"var(--hair)\"><\/line>' +\n        '<text x=\"' + (L - 7) + '\" y=\"' + (Y(l) + 4) + '\" text-anchor=\"end\">' + l + '<\/text>';\n    });\n    ticks(from, to, X, L, W - R).forEach(function (t) {\n      out += '<text x=\"' + X(t).toFixed(1) + '\" y=\"' + (H - 7) + '\" text-anchor=\"middle\">' + short(t) + '<\/text>';\n    });\n    out += '<text x=\"' + L + '\" y=\"' + (H - 7) + '\">' + short(from) + '<\/text>';\n    if (raidIn) {\n      var rx = X(RAIDS), flip = rx > W * 0.68;\n      out += '<line x1=\"' + rx.toFixed(1) + '\" x2=\"' + rx.toFixed(1) + '\" y1=\"' + T + '\" y2=\"' + (H - B) + '\" stroke=\"var(--muted)\"><\/line>' +\n        '<text x=\"' + (rx + (flip ? -7 : 7)).toFixed(1) + '\" y=\"' + (H - B - 8) + '\" text-anchor=\"' + (flip ? 'end' : 'start') + '\">Raids open ' + short(RAIDS) + '<\/text>';\n    }\n    var hand = p.cut < 60;\n    el('rd-legend').innerHTML = !hand ? '' : (p.cut > p.level ? '<span><i class=\"c-you\"><\/i>You<\/span>' : '') +\n      '<span><i class=\"c-ours\"><\/i>Our player<\/span><span><i class=\"c-alone\"><\/i>Alone<\/span>';\n    if (hand) {\n      out += line(points(p.cut, 60, p.handAt, p.alone), '--alone');\n      out += line(points(p.cut, 60, p.handAt, p.handEnd), '--ours');\n    }\n    out += line(points(p.level, hand ? p.cut : 60, p.start, hand ? p.handAt : p.alone), '--you');\n    if (all(p.mount !== null, p.cut > 40)) {\n      \/\/ Above and to the left of a rising line nothing stands; a road too short for that takes the right.\n      var room = X(p.mount) > L + 120;\n      out += dot(p.mount, 40, '--you') + '<text class=\"m\" x=\"' + (X(p.mount) + (room ? -9 : 9)).toFixed(1) + '\" y=\"' + (Y(40) + (room ? -7 : 16)) + '\"' +\n        (room ? ' text-anchor=\"end\"' : '') + '>Mount at 40, ' + short(p.mount) + '<\/text>';\n    }\n    if (hand) {\n      if (p.cut > p.level) { out += dot(p.handAt, p.cut, '--you'); }\n      out += dot(p.alone, 60, '--alone') + dot(p.handEnd, 60, '--ours');\n      var last = Math.max(p.alone, p.handEnd), first = Math.min(p.alone, p.handEnd);\n      out += '<text class=\"v\" x=\"' + (X(last) + 9).toFixed(1) + '\" y=\"' + (Y(60) + 4) + '\">' + short(last) + '<\/text>';\n      if (last - first >= DAY) {\n        out += '<text class=\"v\" x=\"' + (X(first) - 8).toFixed(1) + '\" y=\"' + (Y(60) - 9) + '\" text-anchor=\"end\">' + short(first) + '<\/text>';\n      }\n    } else {\n      out += dot(p.alone, 60, '--you');\n      out += '<text class=\"v\" x=\"' + (X(p.alone) + 9).toFixed(1) + '\" y=\"' + (Y(60) + 4) + '\">' + short(p.alone) + '<\/text>';\n    }\n    box.innerHTML = '<svg viewBox=\"0 0 ' + W + ' ' + H + '\" height=\"' + H + '\" tabindex=\"0\" role=\"img\" aria-label=\"Your level by date. ' +\n      'Alone you reach 60 around ' + short(p.alone) + (hand ? ', with the hand-over on Super Express by ' + short(p.handEnd) : '') + '.\">' + out +\n      '<line id=\"rd-cross\" y1=\"' + T + '\" y2=\"' + (H - B) + '\" stroke=\"var(--white)\" visibility=\"hidden\"><\/line><\/svg>' +\n      '<div class=\"rd-tip\" id=\"rd-tip\" hidden><\/div>';\n    view = { p: p, W: W, L: L, R: R, T: T, from: from, to: to, X: X };\n  }\n\n  function levelOn(t, p, hand) {\n    var end = hand ? p.handEnd : p.alone;\n    if (t >= end) { return 60; }\n    if (t <= p.start) { return p.level; }\n    if (!hand || t <= p.handAt) {\n      return levelAt(share(p.level) + (t - p.start) \/ (p.alone - p.start) * (1 - share(p.level)));\n    }\n    return levelAt(share(p.cut) + (t - p.handAt) \/ (p.handEnd - p.handAt) * (1 - share(p.cut)));\n  }\n\n  function tipRow(colour, value, label) {\n    var row = document.createElement('div');\n    var key = document.createElement('i');\n    key.style.background = 'var(' + colour + ')';\n    var b = document.createElement('b');\n    b.textContent = value;\n    var s = document.createElement('span');\n    s.textContent = label;\n    row.appendChild(key); row.appendChild(b); row.appendChild(s);\n    return row;\n  }\n\n  function showTip(t) {\n    if (!view) { return; }\n    var p = view.p;\n    var day = view.from + Math.round((clamp(t, view.from, view.to) - view.from) \/ DAY) * DAY;\n    var x = view.X(day);\n    var cross = el('rd-cross');\n    cross.setAttribute('x1', x); cross.setAttribute('x2', x); cross.setAttribute('visibility', 'visible');\n    var tip = el('rd-tip');\n    tip.hidden = false;\n    tip.textContent = '';\n    var head = document.createElement('div');\n    head.textContent = short(day);\n    tip.appendChild(head);\n    var hand = p.cut < 60;\n    if (hand) { tip.appendChild(tipRow('--ours', 'Level ' + Math.floor(levelOn(day, p, true)), 'on Super Express')); }\n    tip.appendChild(tipRow(hand ? '--alone' : '--you', 'Level ' + Math.floor(levelOn(day, p, false)), 'on your own'));\n    var scale = el('rd-plot').clientWidth \/ view.W;\n    var left = x * scale + 12;\n    if (left + tip.offsetWidth > el('rd-plot').clientWidth) { left = x * scale - tip.offsetWidth - 12; }\n    tip.style.transform = 'translate(' + Math.max(0, left) + 'px,' + (view.T + 26) + 'px)';\n    view.day = day;\n  }\n\n  function hideTip() {\n    var cross = el('rd-cross'), tip = el('rd-tip');\n    if (cross) { cross.setAttribute('visibility', 'hidden'); }\n    if (tip) { tip.hidden = true; }\n    if (view) { view.day = null; }\n  }\n\n  function fill(id) {\n    var input = el(id);\n    input.style.setProperty('--fill', ((input.value - input.min) \/ (input.max - input.min) * 100).toFixed(1) + '%');\n  }\n\n  function render() {\n    var p = plan(state);\n    el('rd-hours-out').textContent = state.hours;\n    el('rd-level-out').textContent = state.level;\n    fill('rd-hours');\n    fill('rd-level');\n    drawRoad(p);\n    drawAlone(p);\n    drawSplit(p);\n    drawChart(p);\n    drawNext(p);\n  }\n\n  el('rd-hours').addEventListener('input', function (e) { state.hours = +e.target.value; render(); });\n  el('rd-level').addEventListener('input', function (e) { state.level = +e.target.value; render(); });\n  el('rd-cut').addEventListener('input', function (e) {\n    state.cut = clamp(Math.round(levelAt(+e.target.value \/ 1000)), state.level, 60);\n    render();\n  });\n  el('rd-cut').addEventListener('keydown', function (e) {\n    var step = { ArrowLeft: -1, ArrowDown: -1, ArrowRight: 1, ArrowUp: 1, PageDown: -10, PageUp: 10 }[e.key];\n    if (!step) { return; }\n    e.preventDefault();\n    state.cut = clamp(Math.max(state.cut, state.level) + step, state.level, 60);\n    render();\n  });\n  Array.prototype.forEach.call(document.querySelectorAll('.rd-seg button'), function (b) {\n    b.addEventListener('click', function () {\n      state.pace = b.getAttribute('data-pace');\n      Array.prototype.forEach.call(document.querySelectorAll('.rd-seg button'), function (o) {\n        o.setAttribute('aria-pressed', o === b ? 'true' : 'false');\n      });\n      render();\n    });\n  });\n\n  el('rd-next').addEventListener('click', function (e) {\n    if (e.target.closest('.rd-btn')) { note('blog_click', 'tool_cta'); }\n    if (e.target.hasAttribute('data-code')) {\n      note('blog_click', 'tool_coupon');\n      if (navigator.clipboard) { navigator.clipboard.writeText(COUPON); }\n      e.target.textContent = 'Copied';\n      setTimeout(function () { render(); }, 1400);\n    }\n    if (e.target.hasAttribute('data-chat')) {\n      note('blog_click', 'tool_chat');\n      if (window.Intercom) { window.Intercom('show'); } else { window.open(STORE, '_blank', 'noopener'); }\n    }\n  });\n\n  var plot = el('rd-plot');\n  plot.addEventListener('pointermove', function (e) {\n    if (!view) { return; }\n    var box = plot.getBoundingClientRect();\n    var x = (e.clientX - box.left) * view.W \/ box.width;\n    showTip(view.from + (x - view.L) \/ (view.W - view.L - view.R) * (view.to - view.from));\n  });\n  plot.addEventListener('pointerleave', hideTip);\n  plot.addEventListener('keydown', function (e) {\n    var step = { ArrowLeft: -DAY, ArrowRight: DAY }[e.key];\n    if (!step || !view) { return; }\n    e.preventDefault();\n    showTip((view.day === null || view.day === undefined ? view.from : view.day) + step);\n  });\n  plot.addEventListener('focusout', hideTip);\n  var wide = window.innerWidth;\n  window.addEventListener('resize', function () {\n    if (window.innerWidth !== wide) { wide = window.innerWidth; drawChart(plan(state)); }\n  });\n\n  var used = false;\n  function touched(e) {\n    if (!used) {\n      if (e.target.closest('input, button')) { used = true; note('blog_click', 'tool_use'); }\n    }\n  }\n  el('rd-box').addEventListener('input', touched);\n  el('rd-box').addEventListener('click', touched);\n  \/\/ The bar fills once, the first time the reader sees it; with no observer it is simply full.\n  function reveal() { el('rd-road').className = 'rd-road rd-go'; }\n  if ('IntersectionObserver' in window) {\n    var seen = new IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        if (entry.isIntersecting) { seen.disconnect(); note('blog_card_view', 'tool'); reveal(); }\n      });\n    }, { threshold: 0.1 });\n    seen.observe(el('rd-box'));\n  } else {\n    reveal();\n  }\n\n  el('rd-ticks').innerHTML = [1, 20, 30, 40, 50, 60].map(function (l) {\n    return '<span style=\"left:' + (share(l) * 100).toFixed(2) + '%\">' + l + '<\/span>';\n  }).join('');\n  el('rd-notches').innerHTML = [10, 20, 30, 40, 50].map(function (l) {\n    return '<b style=\"left:' + (share(l) * 100).toFixed(2) + '%\"><\/b>';\n  }).join('');\n  window.ecRoad = { plan: plan, share: share, levelAt: levelAt, ourDays: ourDays, short: short, state: state, render: render };\n  render();\n})();\n<\/script>\n\n<p>Some results from the calculator for a new character. At 20 hours a week you reach 60 in about 6 weeks if you know the route, about 8 weeks if you have played Classic and about 10 weeks if you are new to it. If you have played Classic, 40 hours a week gets you there in about 4 weeks and 10 hours a week in about 15 weeks.<\/p>\n<h2 id=\"why-the-last-levels-take-so-long\">Why the last levels take so long<\/h2>\n<p>Forever uses the classic experience table: 4,084,700 XP from level 1 to 60, and <strong>43.5%<\/strong> of it sits between 50 and 60. Going from 59 to 60 takes 209,800 XP, more than everything from level 1 to 21.<\/p>\n<p>Mobs and quests pay more as you climb, so the hours grow slower than the XP, but those ten levels are still about a third of the road.<\/p>\n\n\n<div class=\"blog-info\"><div class=\"blog-info-media\"><img decoding=\"async\" width=\"130\" height=\"130\" src=\"https:\/\/epiccarry.com\/wp-content\/uploads\/2026\/09\/wow-forever-leveling-4.webp\" alt=\"WoW Forever Leveling Boost\"><\/div><div class=\"blog-info-text\"><p class=\"main-text\" style=\"font-size:24px\"><strong>Buy WoW Forever Leveling Boost<\/strong><\/p><p class=\"subtext\" style=\"font-size:18px\">Leave the grind to us!<\/p><a href=\"https:\/\/epiccarry.com\/wow-forever\/boost\/leveling\/\" class=\"white-button\">Buy now!<\/a><\/div><\/div>\n\n\n<h2 id=\"how-to-get-there-faster\">How to get there faster<\/h2>\n<ul>\n<li>Log out in an inn or a capital: <strong>Rested XP<\/strong> doubles what you get from kills, though not from quest turn-ins. It builds 5% of a level every 8 hours, up to 150%.<\/li>\n<li>Eat before you pull: most cooked food in Forever adds <strong>5% kill XP<\/strong> for about 15 minutes. Cooking is a secondary profession, so it costs you neither of your two main ones.<\/li>\n<li>Get the <a href=\"#\" data-wowhead=\"item=211527&amp;domain=forever\">Cozy Sleeping Bag<\/a>: this quest chain reward gives up to 3% more XP that <strong>stays through death<\/strong>, and it lets you earn Rested XP anywhere.<\/li>\n<li>Save 100 gold for level 40: that is when riding opens, and it takes <strong>10% less<\/strong> at Honored with your home faction.<\/li>\n<li>Stay in the right zones: quests more than five levels below you lose 10\u201320% of their XP per extra level, and gray mobs give nothing.<\/li>\n<li>Use dungeons, but do not live in them: Blizzard changed <a href=\"https:\/\/epiccarry.com\/blogs\/wow-forever-dungeon-xp-buff\/\" target=\"_blank\" rel=\"noopener noreferrer\">dungeon XP<\/a> in its October updates, so a dungeon run is meant to match good questing, not beat it. Pick up the quests before you go in.<\/li>\n<\/ul>\n<h2 id=\"keep-the-part-you-came-for\">Keep the part you came for<\/h2>\n<p>Leveling is a big part of why people play Forever, and there is no reason to give away the part you enjoy. What wears people down is the end of the road, and that is how players use our service: on TBC Anniversary, 27 of our 35 leveling orders ran to the level cap, and 17 of those began after the player had already played part of the way.<\/p>\n<ol>\n<li>Set any range on the store page, from one level to another. Our player logs in and plays your character.<\/li>\n<li>A manager agrees a schedule with you, so sessions never overlap. You can play between them, and support pauses the run if you need to log in outside it.<\/li>\n<li>Watch it live on a personal Twitch or YouTube stream. Everything looted on the way stays on the character.<\/li>\n<\/ol>\n<p>We have run boosts since 2013, with more than 700,000 orders completed.<\/p>\n<h2 id=\"when-to-skip-it\">When to skip it<\/h2>\n<p>If you enjoy every level and no date is pulling you along, play it all. If the end of the road is the part you would rather skip, <a href=\"https:\/\/epiccarry.com\/wow-forever\/boost\/leveling\/\" target=\"_blank\" rel=\"noopener noreferrer\">see the price for your levels<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Estimates put how long to level 60 in WoW Forever at 100\u2013150 hours, or about 200 for players new to Classic.<\/p>\n","protected":false},"author":33680,"featured_media":44289,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1460,3],"tags":[1503],"post_kind":[97],"ppma_author":[127],"class_list":["post-44288","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wow-forever","category-all","tag-wow-forever","author-dina"],"acf":{"faq_header":"","faq_items":null,"wpwp_short_description":"Estimates put how long to level 60 in WoW Forever at 100\u2013150 hours, or about 200 for players new to Classic.","wpwp_plus_for_views":""},"authors":[{"term_id":127,"user_id":33680,"is_guest":0,"slug":"dina","display_name":"Dina","avatar_url":{"url":"https:\/\/epiccarry.com\/blogs\/wp-content\/uploads\/2025\/07\/Dina-avatar.webp","url2x":"https:\/\/epiccarry.com\/blogs\/wp-content\/uploads\/2025\/07\/Dina-avatar.webp"},"0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/posts\/44288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/users\/33680"}],"replies":[{"embeddable":true,"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/comments?post=44288"}],"version-history":[{"count":0,"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/posts\/44288\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/media\/44289"}],"wp:attachment":[{"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/media?parent=44288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/categories?post=44288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/tags?post=44288"},{"taxonomy":"post_kind","embeddable":true,"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/post_kind?post=44288"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/epiccarry.com\/blogs\/wp-json\/wp\/v2\/ppma_author?post=44288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}