# npm Download Stats API
> How popular is that npm package? Get download counts and trends for any npm package straight from npm's public download API. Pull the total downloads over a period (last day, week, month, year or any custom YYYY-MM-DD:YYYY-MM-DD range), the full per-day download time series, the monthly totals over the last year to spot growth or decline, and compare several packages side by side ranked by downloads (up to 128 at once, scoped @org/name packages supported). Every call is live (no cache). 5 endpoints. Built for popularity dashboards, package-comparison pages, trend charts, dependency-health scoring and "which library won" analyses. Distinct from an npm registry-metadata lookup — this is the download time series. No upstream key, no cache.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/npmstats-api/..."
```

## Pricing
- **Free** (Free) — 1,950 calls/Mo, 2 req/s
- **Starter** ($8/Mo) — 43,000 calls/Mo, 8 req/s
- **Pro** ($25/Mo) — 225,000 calls/Mo, 20 req/s
- **Mega** ($59/Mo) — 1,100,000 calls/Mo, 50 req/s

## Endpoints

### Downloads

#### `GET /v1/compare` — Compare packages by downloads

**Parameters:**
- `packages` (query, required, string) — Comma-separated package names Example: `react,vue,svelte`
- `period` (query, optional, string) — last-day|last-week|last-month|last-year or YYYY-MM-DD:YYYY-MM-DD

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/npmstats-api/v1/compare?packages=react%2Cvue%2Csvelte"
```

**Response:**
```json
{
    "data": {
        "count": 3,
        "period": "last-month",
        "results": [
            {
                "package": "react",
                "downloads": 545807989
            },
            {
                "package": "vue",
                "downloads": 51037804
            },
            {
                "package": "svelte",
                "downloads": 19593106
            }
        ]
    },
    "meta": {
        "timestamp": "2026-06-02T16:52:06.695Z",
        "request_id": "f36a5032-4863-453a-a88a-e2034b88d60d"
    },
    "status": "ok",
    "message": "Compare packages",
    "success": true
}
```

#### `GET /v1/downloads` — Total downloads for a package

**Parameters:**
- `package` (query, required, string) — npm package name Example: `react`
- `period` (query, optional, string) — last-day|last-week|last-month|last-year or YYYY-MM-DD:YYYY-MM-DD

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/npmstats-api/v1/downloads?package=react"
```

**Response:**
```json
{
    "data": {
        "end": "2026-05-31",
        "start": "2026-05-02",
        "period": "last-month",
        "package": "react",
        "downloads": 545807989
    },
    "meta": {
        "timestamp": "2026-06-02T16:52:06.863Z",
        "request_id": "16447a10-1986-4b28-b1d9-fb71958766a7"
    },
    "status": "ok",
    "message": "Total downloads for a package",
    "success": true
}
```

#### `GET /v1/range` — Per-day download series

**Parameters:**
- `package` (query, required, string) — npm package name Example: `express`
- `period` (query, optional, string) — last-day|last-week|last-month|last-year or YYYY-MM-DD:YYYY-MM-DD

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/npmstats-api/v1/range?package=express"
```

**Response:**
```json
{
    "data": {
        "end": "2026-05-31",
        "days": [
            {
                "day": "2026-05-02",
                "downloads": 6889123
            },
            {
                "day": "2026-05-03",
                "downloads": 6697229
            },
            {
                "day": "2026-05-04",
                "downloads": 15115107
            },
            {
                "day": "2026-05-05",
                "downloads": 17064818
            },
            {
                "day": "2026-05-06",
                "downloads": 17198625
            },
            {
                "day": "2026-05-07",
                "downloads": 17414056
            },
            {
                "day": "2026-05-08",
                "downloads": 15834962
            },
            {
                "day": "2026-05-09",
                "downloads": 7553803
            },
            {
                "day": "2026-05-10",
                "downloads": 7182718
            },
            {
                "day": "2026-05-11",
                "downloads": 17429221
            },
            {
                "day": "2026-05-12",
                "downloads": 19141509
            },
            {
                "day": "2026-05-13",
                "downloads": 18945793
            },
            {
                "day": "2026-05-14",
                "downloads": 17371495
            },
            {
                "day": "2026-05-15",
                "downloads": 16305565

…(truncated, see openapi.json for full schema)
```

#### `GET /v1/trends` — Monthly totals over last year

**Parameters:**
- `package` (query, required, string) — npm package name Example: `lodash`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/npmstats-api/v1/trends?package=lodash"
```

**Response:**
```json
{
    "data": {
        "end": "2026-05-31",
        "start": "2025-06-01",
        "trend": [
            {
                "month": "2025-06",
                "downloads": 356457248
            },
            {
                "month": "2025-07",
                "downloads": 364610072
            },
            {
                "month": "2025-08",
                "downloads": 309842258
            },
            {
                "month": "2025-09",
                "downloads": 320201476
            },
            {
                "month": "2025-10",
                "downloads": 331719356
            },
            {
                "month": "2025-11",
                "downloads": 327817574
            },
            {
                "month": "2025-12",
                "downloads": 314407327
            },
            {
                "month": "2026-01",
                "downloads": 353210463
            },
            {
                "month": "2026-02",
                "downloads": 429693946
            },
            {
                "month": "2026-03",
                "downloads": 564629262
            },
            {
                "month": "2026-04",
                "downloads": 612434806
            },
            {
                "month": "2026-05",
                "downloads": 650155115
            }
        ],
        "months": 12,
        "package": "lodash"
    },
    "meta": {
        "timestamp": "2026-06-02T16:52:07.996Z",
        "request_id": "6f37
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Spec

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/npmstats-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "auth": "none upstream; this gateway requires x-api-key",
        "name": "npm Download Stats API",
        "note": "Download counts and trends for any npm package. /v1/downloads?package=react&period=last-month (periods: last-day|last-week|last-month|last-year or YYYY-MM-DD:YYYY-MM-DD), /v1/range for the per-day series, /v1/compare?packages=react,vue,svelte to rank several, /v1/trends for monthly totals over the last year. Live, no cache.",
        "source": "npm downloads API (api.npmjs.org/downloads) — public, no key",
        "endpoints": 5
    },
    "meta": {
        "timestamp": "2026-06-02T16:52:08.087Z",
        "request_id": "e595c296-64db-4211-9b06-5989e4a2fd87"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/npmstats-api
OpenAPI spec: https://www.oanor.com/api/npmstats-api/openapi.json
