Skip to content
GreenSnippets

Parse the Link header for pagination

Extract next, prev, first and last page URLs from an RFC 8288 Link header like GitHub's API returns.

JavaScript
function parseLinkHeader(header) {
  const links = {};
  if (!header) return links;
  for (const part of header.split(/,\s*(?=<)/)) {
    const match = /^<([^>]+)>\s*;(.*)$/.exec(part.trim());
    if (!match) continue;
    const rel = /rel="?([^";]+)"?/.exec(match[2]);
    if (rel) links[rel[1]] = match[1];
  }
  return links;
}

Example / expected output

Output
parseLinkHeader('<https://api.x.io/items?page=2>; rel="next", <https://api.x.io/items?page=9>; rel="last"')
// { next: "https://api.x.io/items?page=2", last: "https://api.x.io/items?page=9" }

How it works

Many APIs (GitHub, GitLab, WordPress) return pagination links in a Link header instead of the body. Following the next URL is more robust than building page numbers yourself. This parser handles multiple comma-separated links and ignores malformed parts.