BYTETOOLS

Ecosyste.ms API

Free Ecosyste.ms API with no key: package metadata, dependencies, repository data and usage statistics across 60+ package registries. Tested curl example.

No API key requiredHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-20

What is the Ecosyste.ms API?

Ecosyste.ms is a free, key-free API providing open source ecosystem data — package metadata, dependency relationships, repository information and usage statistics — aggregated across more than 60 package registries.

Ecosyste.ms is an openly funded infrastructure project mapping the open source ecosystem as a whole rather than one registry at a time. It covers registries most tools ignore entirely, including smaller language ecosystems.

Its distinguishing angle is dependent counts: knowing how many packages depend on a given library is a far better measure of its importance than downloads, and it is data that individual registries rarely expose.

Quick facts

Base URL
https://packages.ecosyste.ms/api/v1
Authentication
No API key required. A contact email in the User-Agent is appreciated.
Rate limit
No published hard limit; the project asks for reasonable use.
Pricing
Free, grant-funded open infrastructure.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the Ecosyste.ms API

Every request below was executed against the live API on 2026-08-20, and the response shown is the real body it returned — not an illustration.

1. List supported package registries

GET https://packages.ecosyste.ms/api/v1/registries

curl
curl 'https://packages.ecosyste.ms/api/v1/registries'
JavaScript (fetch)
const res = await fetch("https://packages.ecosyste.ms/api/v1/registries");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://packages.ecosyste.ms/api/v1/registries", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
[
  {
    "name": "npmjs.org",
    "url": "https://registry.npmjs.org",
    "ecosystem": "npm",
    "default": true,
    "packages_count": 5760001,
    "versions_count": 75555380,
    "maintainers_count": 1232642,
    "namespaces_count": 419110,
    "keywords_count": 877561,
    "downloads": 789575299535,
    "github": "npm",
    "metadata": {
      "funded_packages_count": 188204,
      "rate_limit": 2
    },
    "icon_url": "https://github.com/npm.png",
    "purl_type": "npm",
    "created_at": "2022-04-04T15:19:23.081Z",
    "updated_at": "2026-08-20T05:03:15.932Z",
    "packages_url": "https://packages.ecosyste.ms/api/v1/registries/npmjs.org/packages",
    "maintainers_url": "https://packages.ecosyste.ms/api/v1/registries/npmjs.org/maintainers",
    "namespaces_url": "https://packages.ecosyste.ms/api/v1/registries/npmjs.org/namespaces"
  },
  {
    "name": "proxy.golang.org",
    "url": "https://proxy.golang.org",
    "ecosystem": "go",
    "default": true,
    "packages_count": 2281813,
    "versions_count": 24309759,
    "maintainers_count": 0,
    "namespaces_count": 839441,
    "keywords_count": 124461,
    "downloads": 0,
    "github": "golang",
    "metadata": {
      "funded_packages_count": 67285,
      "sync_missing_packages_cursor": {
        "timestamp": "2026-08-17T00:00:58.969562Z",
        "path": "github.com/Tektoncd/operator",
        "version": "v0.78.0"
      },
      "rate_limit": 1
    },
    "icon_url": "https://github.com/golang.png",
    "purl_type": "golang",
    "created_at": "2022-04-04T15:19:22.939Z",
    "updated_at": "2026-08-20T05:01:26.475

Parameters

ParameterTypeRequiredDescription
registriespathOptionalAll supported registries with package counts. registries
registries/<name>/packages/<pkg>pathOptionalOne package in a registry. registries/npmjs.org/packages/react
page / per_pageintegerOptionalPagination controls. 1

Response fields

namestring
Registry hostname, e.g. npmjs.org.
ecosystemstring
Ecosystem identifier such as npm or pypi.
packages_countinteger
How many packages the registry holds.
defaultboolean
Whether this is the ecosystem's canonical registry.
(package) dependent_packages_countinteger
How many packages depend on it — a better importance signal than downloads.
(package) repository_urlstring
Source repository.

What you can build with the Ecosyste.ms API

  • Measure a library's importance by dependent count rather than downloads
  • Research open source ecosystem structure across languages
  • Find packages in registries other tools do not cover
  • Support open source sustainability and funding research

Common errors and how to fix them

Registry name is a hostname

Registries are identified by domain.

Fix: Use npmjs.org, pypi.org, rubygems.org rather than short ecosystem names.

Slow on large queries

It aggregates a great deal of data.

Fix: Paginate and cache; this is grant-funded infrastructure, not a commercial CDN.

Package not found

Coverage varies by registry.

Fix: Smaller registries are indexed less completely than npm or PyPI.

Ecosyste.ms API — frequently asked questions

Is Ecosyste.ms free?

Yes, free with no API key. It is grant-funded open infrastructure, so please include a contact email in your User-Agent and cache responses.

How many registries does it cover?

More than 60, including many smaller language ecosystems that mainstream tooling ignores entirely.

What is dependent_packages_count useful for?

It measures how many other packages depend on a library, which is a much better signal of ecosystem importance than raw download counts — and something individual registries rarely expose.

How do I identify a registry?

By hostname — npmjs.org, pypi.org, rubygems.org — rather than by short ecosystem name.

Tools that pair with this API

Ecosyste.ms is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-20; always check the official documentation before relying on this API in production, as terms and limits can change.