<!DOCTYPE html><html lang="en"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Free API | TierDiff</title><meta name="description" content="TierDiff's free-tier data for developer services, AI tools and work apps, as static JSON files, rebuilt with the site."><link rel="canonical" href="https://tierdiff.com/api/"><meta property="og:title" content="Free API | TierDiff"><meta property="og:description" content="TierDiff's free-tier data for developer services, AI tools and work apps, as static JSON files, rebuilt with the site."><meta property="og:type" content="website"><meta property="og:site_name" content="TierDiff"><meta property="og:locale" content="en_US"><meta property="og:url" content="https://tierdiff.com/api/"><meta property="og:image" content="https://tierdiff.com/og/og-en.png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="TierDiff: free-tier limits of developer services, AI tools and work apps"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Free API | TierDiff"><meta name="twitter:description" content="TierDiff's free-tier data for developer services, AI tools and work apps, as static JSON files, rebuilt with the site."><meta name="twitter:image" content="https://tierdiff.com/og/og-en.png"><meta name="twitter:image:alt" content="TierDiff: free-tier limits of developer services, AI tools and work apps"><link rel="icon" href="/favicon.ico"><link rel="icon" href="/favicon.svg" type="image/svg+xml"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="alternate" type="application/rss+xml" title="TierDiff: free-tier changes" href="/changes/feed.xml"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://tierdiff.com/#organization","name":"TierDiff","url":"https://tierdiff.com/","sameAs":["https://x.com/tierdiff"]},{"@type":"WebSite","@id":"https://tierdiff.com/#website","name":"TierDiff","url":"https://tierdiff.com/","inLanguage":"en","publisher":{"@id":"https://tierdiff.com/#organization"}}]}</script><script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent','default',{ad_storage:'denied',ad_user_data:'denied',ad_personalization:'denied',analytics_storage:'denied',wait_for_update:500,region:["AT","BE","BG","HR","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","IS","LI","NO","GB","CH","GP","GF","MQ","RE","YT","MF","AX"]});
gtag('consent','default',{ad_storage:'denied',ad_user_data:'denied',ad_personalization:'denied',analytics_storage:'granted'});
try{var c=localStorage.getItem("td-consent");if(c==='granted'||c==='denied'){gtag('consent','update',{analytics_storage:c});}}catch(e){}
</script>
<script>if(/(^|\.)tierdiff\.com$/.test(location.hostname))(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-T2K86ZSX');</script><link rel="stylesheet" href="/_astro/index.DnHDBAWh.css"></head> <body> <a class="skip" href="#main">Skip to content</a> <header class="site-head"><div class="wrap"> <a class="brand" href="/"><svg viewBox="0 0 32 32" aria-hidden="true"><rect x="1" y="1" width="30" height="30" rx="10" fill="#ffcb47"></rect><path d="M8 21h6v-5h4v-5h6" fill="none" stroke="#1d2b4f" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"></path><circle cx="24" cy="11" r="2.6" fill="#1d2b4f"></circle></svg>TierDiff</a> <nav class="site-nav" aria-label="Main"> <a href="/">Find a free tier</a> <a href="/#lines">Compare</a> <a href="/samples/">Samples</a> <a href="/changes/">Changes</a> <a href="/#how">How we check</a>  </nav> </div></header> <main id="main">   <div class="wrap prose"> <h1>Free API</h1> <p class="lead">TierDiff&#39;s free-tier data for developer services, AI tools and work apps, as static JSON files, rebuilt with the site. No key and no sign-up; any origin can fetch them.</p> <h2>Endpoints</h2> <ul> <li><a href="/api/v1/products.json"><code>/api/v1/products.json</code></a> — every service: id, name, category, pricing URL, whether it has a free plan, last check</li><li><a href="/api/v1/products/neon.json"><code>/api/v1/products/neon.json</code></a> — one service: current values per plan and metric, with source URL and check time, plus its change history</li><li><a href="/api/v1/changes.json"><code>/api/v1/changes.json</code></a> — every reviewed change, newest first</li><li><a href="/api/v1/metrics.json"><code>/api/v1/metrics.json</code></a> — the metric vocabulary: key, name, unit, period</li> </ul> <h2>Example</h2> <pre>curl https://tierdiff.com/api/v1/products/neon.json</pre> <pre>const res = await fetch(&quot;https://tierdiff.com/api/v1/changes.json&quot;);
const { changes } = await res.json();</pre> <h2>Feeds and badges</h2> <ul> <li><a href="/changes/feed.xml"><code>/changes/feed.xml</code></a> — RSS of reviewed changes, newest 50</li> <li><code>/p/&lt;id&gt;/feed.xml</code> — RSS for one service</li> <li><code>/badge/&lt;id&gt;.svg</code>, <code>/badge/&lt;id&gt;/&lt;metric&gt;.svg</code> — SVG badges with a service&#39;s free-tier value</li> </ul> <p>Every value comes from the vendor&#39;s own official page. Use the values freely; a link back to TierDiff (tierdiff.com) is appreciated.</p> </div>   </main> <footer class="site-foot"><div class="wrap"> <p class="foot-lead">TierDiff tracks developer services, AI tools and work apps. It reads each service&#39;s own pricing page once a day and keeps the sentence every number came from. Data last checked Oct 23, 2026.</p> <ul class="foot-links"> <li><a href="/#how"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/><path d="m9 12 2 2 4-4"/></svg>How we check</a></li> <li><a href="/methodology/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M12 3v18"/><rect width="18" height="18" x="3" y="3" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/></svg>Methodology</a></li> <li><a href="mailto:hello@tierdiff.com?subject=Wrong%20number"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"/><path d="M4 22v-7"/></svg>Report a wrong number</a></li> <li><a href="/bot/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M12 8V4H8"/><rect width="16" height="12" x="4" y="8" rx="2"/><path d="M2 14h2"/><path d="M20 14h2"/><path d="M15 13v2"/><path d="M9 13v2"/></svg>About our bot</a></li> <li><a href="/changes/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M3 12h.01"/><path d="M3 18h.01"/><path d="M3 6h.01"/><path d="M8 12h13"/><path d="M8 18h13"/><path d="M8 6h13"/></svg>All changes</a></li> <li><a href="https://x.com/tierdiff" rel="me noopener"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M15 3h6v6"/><path d="M10 14 21 3"/><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg>TierDiff on X</a></li> <li><a href="/about/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/></svg>About</a></li> <li><a href="/privacy/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/><path d="m9 12 2 2 4-4"/></svg>Privacy</a></li>  <li><a href="/disclosure/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M15 3h6v6"/><path d="M10 14 21 3"/><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg>Disclosure</a></li> <li hidden><button type="button" class="foot-btn" data-cookie-settings hidden>Cookie settings</button></li> </ul> <p class="foot-small">Logos load from the Simple Icons CDN, belong to their owners and are shown to identify each service. <a href="mailto:hello@tierdiff.com">hello@tierdiff.com</a></p> </div></footer> <div class="consent" id="consent" role="region" aria-label="Cookie consent" hidden> <p class="consent-text">TierDiff uses Google Analytics cookies to count visits. <a href="/privacy/">Privacy</a></p> <div class="consent-actions"> <button type="button" class="btn" data-consent="denied">Decline</button> <button type="button" class="btn" data-consent="granted">Accept</button> </div> </div> <script>(function(){const KEY = "td-consent";
const regions = ["AT","BE","BG","HR","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","IS","LI","NO","GB","CH","GP","GF","MQ","RE","YT","MF","AX"];
const zones = ["Atlantic/Reykjavik","Asia/Nicosia","Asia/Famagusta","Atlantic/Canary","Atlantic/Madeira","Atlantic/Azores","Africa/Ceuta","America/Guadeloupe","America/Cayenne","America/Martinique","Indian/Reunion","Indian/Mayotte","America/Marigot"];
const zonePrefix = "Europe/";

(function () {
  var box = document.getElementById("consent");
  if (!box) return;
  var opener = null;
  var observer = null;

  var openers = document.querySelectorAll("[data-cookie-settings]");
  for (var i = 0; i < openers.length; i++) {
    openers[i].hidden = false;
    var item = openers[i].closest("li");
    if (item) item.hidden = false;
  }

  function stored() { try { var v = localStorage.getItem(KEY); return v === "granted" || v === "denied" ? v : null; } catch (e) { return null; } }
  function save(v) { try { localStorage.setItem(KEY, v); } catch (e) {} }

  function expireGaCookies() {
    try {
      var host = location.hostname.replace(/^www\./, "");
      var names = document.cookie.split(";").map(function (c) { return c.split("=")[0].trim(); });
      names.forEach(function (n) {
        if (!/^_ga(_|$)/.test(n)) return;
        var dead = n + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; max-age=0; path=/";
        document.cookie = dead;
        document.cookie = dead + "; domain=." + host;
      });
    } catch (e) {}
  }

  function pad() { document.documentElement.style.setProperty("--consent-h", box.offsetHeight + "px"); }
  function show() {
    box.hidden = false;
    document.body.classList.add("has-consent");
    pad();
    if (window.ResizeObserver && !observer) { observer = new ResizeObserver(pad); observer.observe(box); }
  }
  function hide() {
    box.hidden = true;
    document.body.classList.remove("has-consent");
    if (observer) { observer.disconnect(); observer = null; }
  }

  function inRegion() {
    return fetch("/cdn-cgi/trace", { cache: "no-store" })
      .then(function (r) { if (!r.ok) throw new Error("trace"); return r.text(); })
      .then(function (txt) {
        var m = /^loc=([A-Z]{2})$/m.exec(txt);
        if (!m) throw new Error("no loc");
        return regions.indexOf(m[1]) !== -1;
      })
      .catch(function () {
        try {
          var tz = Intl.DateTimeFormat().resolvedOptions().timeZone || "";
          return tz.indexOf(zonePrefix) === 0 || zones.indexOf(tz) !== -1;
        } catch (e) { return false; }
      });
  }

  var choice = stored();
  if (choice === "denied") expireGaCookies();
  if (!choice) {
    inRegion().then(function (yes) { if (yes && !stored()) show(); });
  }

  box.addEventListener("click", function (e) {
    var b = e.target.closest && e.target.closest("[data-consent]");
    if (!b) return;
    var v = b.getAttribute("data-consent");
    save(v);
    if (window.gtag) window.gtag("consent", "update", { analytics_storage: v });
    if (v === "granted" && window.dataLayer) window.dataLayer.push({ event: "consent_granted" });
    if (v === "denied") expireGaCookies();
    hide();
    if (opener && document.contains(opener)) opener.focus();
    opener = null;
  });

  document.addEventListener("click", function (e) {
    var b = e.target.closest && e.target.closest("[data-cookie-settings]");
    if (!b) return;
    opener = b;
    show();
    var first = box.querySelector("button");
    if (first) first.focus();
  });
})();
})();</script> </body></html>