<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Open Data API: Milkweed, Monarchs and Range Data as JSON</title>
<meta name="description" content="Seven JSON endpoints: milkweed species, county range, state climate normals, suppliers, wildlife and monarch population counts. CC BY 4.0, no key, no rate limit.">
<link rel="canonical" href="https://milkweedusa.com/api/">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
<meta name="theme-color" content="#1F4032">
<meta name="color-scheme" content="light dark">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Milkweed USA">
<meta property="og:locale" content="en_US">
<meta property="og:url" content="https://milkweedusa.com/api/">
<meta property="og:title" content="Open data API">
<meta property="og:description" content="Seven JSON endpoints: milkweed species, county range, state climate normals, suppliers, wildlife and monarch population counts. CC BY 4.0, no key, no rate limit.">
<meta property="og:image" content="https://milkweedusa.com/img/social/api-docs.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Milkweed USA: The field guide to North America’s milkweeds">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Open data API">
<meta name="twitter:description" content="Seven JSON endpoints: milkweed species, county range, state climate normals, suppliers, wildlife and monarch population counts. CC BY 4.0, no key, no rate limit.">
<meta name="twitter:image" content="https://milkweedusa.com/img/social/api-docs.jpg">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="alternate" type="application/rss+xml" title="Milkweed USA guides" href="/feed.xml">
<link rel="sitemap" type="application/xml" href="/sitemap.xml">
<link rel="alternate" type="text/markdown" href="/api/index.md" title="Markdown version">
<link rel="stylesheet" href="/styles.82ee568c.css">

<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://milkweedusa.com/#website","url":"https://milkweedusa.com/","name":"Milkweed USA","description":"A free field guide to every milkweed species in the United States: identification, range maps, bloom times, seed germination and monarch habitat guidance.","inLanguage":"en-US","publisher":{"@id":"https://milkweedusa.com/#org"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://milkweedusa.com/search/?q={search_term_string}"},"query-input":"required name=search_term_string"}},{"@type":"Organization","@id":"https://milkweedusa.com/#org","name":"Milkweed USA","url":"https://milkweedusa.com/","description":"A free field guide to every milkweed species in the United States: identification, range maps, bloom times, seed germination and monarch habitat guidance.","logo":{"@type":"ImageObject","url":"https://milkweedusa.com/icon.svg","width":512,"height":512}},{"@type":"WebPage","@id":"https://milkweedusa.com/api/#webpage","url":"https://milkweedusa.com/api/","name":"Open Data API: Milkweed, Monarchs and Range Data as JSON","description":"Seven JSON endpoints: milkweed species, county range, state climate normals, suppliers, wildlife and monarch population counts. CC BY 4.0, no key, no rate limit.","isPartOf":{"@id":"https://milkweedusa.com/#website"},"inLanguage":"en-US","breadcrumb":{"@id":"https://milkweedusa.com/api/#breadcrumb"},"primaryImageOfPage":{"@type":"ImageObject","url":"https://milkweedusa.com/img/social/api-docs.jpg"}},{"@type":"BreadcrumbList","@id":"https://milkweedusa.com/api/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://milkweedusa.com/"},{"@type":"ListItem","position":2,"name":"Open data API"}]},{"@type":"WebAPI","name":"Milkweed USA open data API","description":"Milkweed species, county distribution, state climate normals, milkweed wildlife and monarch population counts as JSON.","documentation":"https://milkweedusa.com/api/","termsOfService":"https://milkweedusa.com/license/","provider":{"@id":"https://milkweedusa.com/#org"},"isAccessibleForFree":true,"license":"https://creativecommons.org/licenses/by/4.0/"}]}</script>
<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-GWKBLHDYSP"></script>
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','G-GWKBLHDYSP');</script>
<link rel="preconnect" href="https://watchtower.adamstoner.com" crossorigin>
<script defer src="https://watchtower.adamstoner.com/t.js" data-id="5zq2p4ef"></script>
</head>
<body class="">
<a class="skip" href="#main">Skip to content</a>
<header class="masthead">
  <div class="wrap masthead__in">
    <a class="brand" href="/"><span class="brand__name">Milkweed</span><span class="brand__sub">USA</span></a>
    <nav class="nav" aria-label="Primary"><a href="/species/">Species</a><a href="/states/">By State</a><a href="/guides/">Guides</a><a href="/monarchs/">Monarchs</a></nav>
  </div>
</header>


<main id="main">

<section class="section section--tight"><div class="wrap">
  <div class="hgroup">
    <h1>Open data API</h1>
    <p class="lede">Everything on this site as JSON, under CC BY 4.0. No key, no signup, no quota. Seven files, served from a CDN, with permissive CORS so you can fetch them straight from a browser.</p>
  </div>
</div></section>

<section class="section"><div class="wrap two-col">
  <div class="prose">
    <h2 id="start">Getting started</h2>
    <p>There is nothing to set up. Every endpoint is a plain GET.</p>
    <pre class="code"><code>curl https://milkweedusa.com/api/species.json</code></pre>
    <p>Or from a browser, from any origin:</p>
    <pre class="code"><code>const res = await fetch('https://milkweedusa.com/api/species.json');
const { species } = await res.json();

// Every milkweed native to Colorado, tallest first
const colorado = species
  .filter((s) =&gt; s.states.includes('CO') &amp;&amp; s.nativeToUS)
  .sort((a, b) =&gt; b.heightInches[1] - a.heightInches[1]);</code></pre>
    <p>Start at <a href="/api/index.json"><code>/api/index.json</code></a>, which lists every endpoint and the license terms in machine-readable form.</p>

    <h2 id="ratelimits">Rate limits, and why there are none</h2>
    <p>This is worth being straight about rather than inventing policy. <strong>The API is seven static files on Cloudflare's CDN.</strong> There is no database behind it, no application server, and no per-request cost that scales with you. Hammering it does not degrade anything for anybody else, so there is no quota, no key and no throttle.</p>
    <p>Two things follow from that:</p>
    <ul>
      <li><strong>Cache what you fetch.</strong> Every file is served with <code>Cache-Control: public, max-age=3600</code>. Respect it and you will be fetching once an hour rather than once a request, which is better for you as well.</li>
      <li><strong>The data changes at the pace of a rebuild</strong>, which is measured in weeks. Polling it every minute achieves nothing.</li>
    </ul>
    <p>If you are about to move serious volume, or you want to be told before a shape changes, say hello at <!--email_off--><a href="mailto:contact@milkweedusa.com">contact@milkweedusa.com</a><!--email_on-->. Not because permission is needed, but because it is nice to know who is using it.</p>

    <h2 id="endpoints">The endpoints</h2>
    <div class="endpoint" id="api-index-json">
    <h3>Service description</h3>
    <p class="endpoint__p"><code>GET /api/index.json</code></p>
    <p>Every endpoint, the license, and pointers to the <code>llms.txt</code> feeds. Start here if you are discovering the API programmatically.</p>
    <p><a href="/api/index.json">Open it →</a></p>
    
    
  </div>

    <div class="endpoint" id="api-species-json">
    <h3>All 72 species</h3>
    <p class="endpoint__p"><code>GET /api/species.json</code></p>
    <p>The full species record: names, authority, native status, height and spread, bloom months, flower colors, leaf arrangement and shape, sun and moisture, USDA zones, stratification, state range, editorial ratings, and resolved identifiers for POWO, GBIF, iNaturalist and Wikipedia.</p>
    <p><a href="/api/species.json">Open it →</a></p>
    <pre class="code"><code>{
  &quot;count&quot;: 72,
  &quot;species&quot;: [{
    &quot;slug&quot;: &quot;swamp-milkweed&quot;,
    &quot;scientificName&quot;: &quot;Asclepias incarnata&quot;,
    &quot;commonNames&quot;: [&quot;Swamp Milkweed&quot;, &quot;Rose Milkweed&quot;],
    &quot;nativeToUS&quot;: true,
    &quot;heightInches&quot;: [36, 60],
    &quot;bloomMonths&quot;: [6, 7, 8, 9],
    &quot;states&quot;: [&quot;AL&quot;, &quot;AR&quot;, &quot;...&quot;],
    &quot;references&quot;: { &quot;powo&quot;: {...}, &quot;gbif&quot;: {...} }
  }]
}</code></pre>
    
  </div>

    <div class="endpoint" id="api-states-json">
    <h3>All 51 states and DC</h3>
    <p class="endpoint__p"><code>GET /api/states.json</code></p>
    <p>Each state with its species list, USDA zones, monarch flyway and its full NOAA climate normals.</p>
    <p><a href="/api/states.json">Open it →</a></p>
    
    <p class="endpoint__eg">Useful for "what should I plant here" tools.</p>
  </div>

    <div class="endpoint" id="api-counties-json">
    <h3>County-level distribution</h3>
    <p class="endpoint__p"><code>GET /api/counties.json</code></p>
    <p>Every US county with a USDA PLANTS record, per species: 11,556 records in all. Counties are 5-digit FIPS codes, so they join straight onto Census boundary files.</p>
    <p><a href="/api/counties.json">Open it →</a></p>
    <pre class="code"><code>{
  &quot;species&quot;: {
    &quot;butterfly-weed&quot;: {
      &quot;scientificName&quot;: &quot;Asclepias tuberosa&quot;,
      &quot;nativeCounties&quot;: [&quot;01001&quot;, &quot;01003&quot;, &quot;...&quot;],
      &quot;introducedCounties&quot;: []
    }
  }
}</code></pre>
    <p class="endpoint__eg">A county with no record has not necessarily got no plants. Collection effort is uneven.</p>
  </div>

    <div class="endpoint" id="api-climate-json">
    <h3>Statewide climate normals</h3>
    <p class="endpoint__p"><code>GET /api/climate.json</code></p>
    <p>NOAA nClimDiv 1991 to 2020 monthly normals for every state: average daily high, average daily low and average monthly precipitation.</p>
    <p><a href="/api/climate.json">Open it →</a></p>
    
    
  </div>

    <div class="endpoint" id="api-wildlife-json">
    <h3>16 animals that use milkweed</h3>
    <p class="endpoint__p"><code>GET /api/wildlife.json</code></p>
    <p>The specialists, the pollinators, the predators and the birds, with what each does on the plant and when it appears.</p>
    <p><a href="/api/wildlife.json">Open it →</a></p>
    
    
  </div>

    <div class="endpoint" id="api-suppliers-json">
    <h3>86 nurseries and seed houses</h3>
    <p class="endpoint__p"><code>GET /api/suppliers.json</code></p>
    <p>Independent nurseries, non-profits and seed producers, with what they stock, where they are and whether they ship. Plus the 51 state native plant societies.</p>
    <p><a href="/api/suppliers.json">Open it →</a></p>
    
    <p class="endpoint__eg"><a href="/where-to-buy/">The same list, searchable by ZIP code</a>.</p>
  </div>

    <div class="endpoint" id="api-population-json">
    <h3>Monarch population counts</h3>
    <p class="endpoint__p"><code>GET /api/population.json</code></p>
    <p>Both long-running series: the eastern overwintering area in hectares since 1993, and the western Thanksgiving count since 1997, with methods and sources attached.</p>
    <p><a href="/api/population.json">Open it →</a></p>
    
    <p class="endpoint__eg"><a href="/monarch-population/">The same data, charted and explained</a>.</p>
  </div>

    <h2 id="license">License and attribution</h2>
    <p>Everything is <a href="https://creativecommons.org/licenses/by/4.0/" rel="license noopener" target="_blank">CC BY 4.0</a>. Use it commercially, build a product on it, train a model on it. The one condition is credit:</p>
    <pre class="code"><code>Milkweed USA (https://milkweedusa.com), CC BY 4.0</code></pre>
    <p>A link back from wherever you use it is the form of credit that helps most.</p>
    <p><strong>Two things are not ours to license.</strong> Photographs carry their own licenses and are credited per image, so the API returns counts and filenames rather than rights. And the underlying government data, USDA PLANTS and NOAA, is public domain in its own right and you can go to the source directly.</p>

    <h2 id="stability">Stability</h2>
    <ul>
      <li><strong>Fields get added, not removed.</strong> If a shape has to change in a breaking way it will go to a new path rather than mutating in place.</li>
      <li><strong>Slugs are stable.</strong> A species slug is the primary key and is not going to change under you.</li>
      <li><strong>There is no versioning yet</strong>, because nothing has needed it. If that changes it will be in the path.</li>
    </ul>

    <h2 id="other">Other machine-readable things</h2>
    <ul>
      <li><a href="/llms.txt"><code>/llms.txt</code></a> and <a href="/llms-full.txt"><code>/llms-full.txt</code></a>, the whole site as plain text for language models.</li>
      <li>Every page has a Markdown twin: add <code>index.md</code> to any path.</li>
      <li><a href="/sitemap.xml"><code>/sitemap.xml</code></a> includes the PDFs and the image manifest.</li>
      <li>Every page carries schema.org JSON-LD, including <code>Dataset</code> nodes on the climate and population pages.</li>
    </ul>

    <section class="cite" id="cite">
  <h2>Cite this page</h2>
  <p class="cite__note">This page is licensed <a href="/license/">CC BY 4.0</a>. Quote it, adapt it and reuse it, including commercially, as long as you credit Milkweed USA and link back.</p>
  <div class="cite__list">
    <div class="cite__row">
      <span class="cite__label">APA</span>
      <code class="cite__text" data-cite>Milkweed USA. (2026). Milkweed USA open data API. Retrieved DATE, from https://milkweedusa.com/api/</code>
      <button type="button" class="cite__copy" data-copy aria-label="Copy APA citation">Copy</button>
    </div><div class="cite__row">
      <span class="cite__label">MLA</span>
      <code class="cite__text" data-cite>&quot;Milkweed USA open data API.&quot; Milkweed USA, 2026, https://milkweedusa.com/api/. Accessed DATE.</code>
      <button type="button" class="cite__copy" data-copy aria-label="Copy MLA citation">Copy</button>
    </div><div class="cite__row">
      <span class="cite__label">Chicago</span>
      <code class="cite__text" data-cite>Milkweed USA. &quot;Milkweed USA open data API.&quot; Last modified 2026-08-01. Accessed DATE. https://milkweedusa.com/api/.</code>
      <button type="button" class="cite__copy" data-copy aria-label="Copy Chicago citation">Copy</button>
    </div><div class="cite__row">
      <span class="cite__label">BibTeX</span>
      <code class="cite__text" data-cite>@misc{milkweedusa_api,
  title  = {Milkweed USA open data API},
  author = {{Milkweed USA}},
  year   = {2026},
  url    = {https://milkweedusa.com/api/},
  note   = {Accessed DATE}
}</code>
      <button type="button" class="cite__copy" data-copy aria-label="Copy BibTeX citation">Copy</button>
    </div>
  </div>
</section>
  </div>
  <aside class="sidebar">
    <div class="aside-block">
      <h3>Quick links</h3>
      <ul class="tight">
        <li><a href="/api/index.json">index.json</a></li>
        <li><a href="/api/species.json">species.json</a></li>
        <li><a href="/api/states.json">states.json</a></li>
        <li><a href="/api/counties.json">counties.json</a></li>
        <li><a href="/api/climate.json">climate.json</a></li>
        <li><a href="/api/suppliers.json">suppliers.json</a></li>
        <li><a href="/api/wildlife.json">wildlife.json</a></li>
        <li><a href="/api/population.json">population.json</a></li>
      </ul>
    </div>
    <div class="aside-block">
      <h3>Are you counted?</h3>
      <p>Requests to these files are counted, because a JSON file cannot carry an analytics script. What is recorded is which file, and which client asked, and nothing else. No addresses are stored.</p>
      <p><a href="/privacy/">What is and is not recorded</a></p>
    </div>
    <div class="aside-block">
      <h3>Where the data comes from</h3>
      <p>Every database, flora and monograph behind this, cited per page.</p>
      <p><a href="/sources/">Sources and method</a></p>
    </div>
  </aside>
</div></section>

</main>
<footer class="foot">
  <div class="wrap">
    <div class="foot__grid foot__grid--5">
      <div>
        <a class="brand" href="/"><span class="brand__name">Milkweed</span><span class="brand__sub">USA</span></a>
        <p style="margin-top:.8rem;font-size:.92rem;opacity:.85;max-width:34ch">A free, independent field guide to the milkweeds of the United States.</p>
        <p style="margin-top:.9rem;font-size:.92rem"><!--email_off--><a href="mailto:contact@milkweedusa.com">contact@milkweedusa.com</a><!--email_on--></p>
      </div>
      <div>
        <h4>Identify</h4>
        <ul>
          <li><a href="/species/">All species</a></li>
          <li><a href="/identify/">Identification guide</a></li>
          <li><a href="/species/compare/">Compare species</a></li>
          <li><a href="/glossary/">Glossary</a></li>
          <li><a href="/wildlife/">What lives on milkweed</a></li>
          <li><a href="/print/milkweed-usa-field-guide.pdf">PDF field guide</a></li>
          <li><a href="/print/">Printable sheets</a></li>
        </ul>
      </div>
      <div>
        <h4>Grow</h4>
        <ul>
          <li><a href="/where-to-buy/">Where to buy milkweed</a></li>
          <li><a href="/guides/how-to-plant-milkweed-seeds/">Planting seed</a></li>
          <li><a href="/guides/when-to-plant-milkweed/">When to plant</a></li>
          <li><a href="/guides/collecting-milkweed-seed/">Collecting seed</a></li>
          <li><a href="/guides/milkweed-pests/">Pests &amp; problems</a></li>
        </ul>
      </div>
      <div>
        <h4>Reference</h4>
        <ul>
          <li><a href="/calendar/">Bloom calendar</a></li>
          <li><a href="/guides/milkweed-around-the-world/">Milkweed worldwide</a></li>
          <li><a href="/monarch-population/">Monarch population data</a></li>
          <li><a href="/research/">Recent research</a></li>
          <li><a href="/api/">Open data API</a></li>
          <li><a href="/learn/">Classroom lessons</a></li>
          <li><a href="/sources/">Sources &amp; data</a></li>
          <li><a href="/license/">License &amp; reuse</a></li>
          <li><a href="/brand/">Brand guide</a></li>
          <li><a href="/kids/">For kids</a></li>
        </ul>
      </div>
      <div>
        <h4>Regions</h4>
        <ul>
          <li><a href="/states/">Every state</a></li>
          <li><a href="/states/colorado/">Colorado</a></li>
          <li><a href="/states/texas/">Texas</a></li>
          <li><a href="/states/california/">California</a></li>
        </ul>
      </div>
    </div>
    <div class="foot__bot foot__license">
      <span>Text and data on this site are published under a
        <a href="https://creativecommons.org/licenses/by/4.0/" rel="license noopener" target="_blank">Creative Commons Attribution 4.0 International license (CC BY 4.0)</a>.
        Use it anywhere, including commercially, as long as you credit Milkweed USA and link back.
        <a href="/license/">What that means, and how to credit us</a>.</span>
      <span>Photographs stay under their own licenses and are credited individually. Ranges are generalized; confirm with a local flora before making management decisions.</span>
    </div>
    <div class="foot__bot">
      <a href="/about/">About &amp; sources</a>
      <a href="/privacy/">Privacy</a>
      <!--email_off--><a href="mailto:contact@milkweedusa.com">Contact</a><!--email_on-->
      <a href="/faq/">FAQ</a>
      <a href="/sitemap.xml">Sitemap</a>
    </div>
  </div>
</footer>
<script src="/cite.2c2d0e41.js" defer></script>
<script src="/events.88e03150.js" defer></script>
</body>
</html>