BYTETOOLS

PyPI JSON API

Free PyPI JSON API with no key: Python package metadata, versions, dependencies, licence and download URLs. Tested curl example and live response.

No API key requiredCORS enabledHTTPSFree tier

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

What is the PyPI JSON API?

The PyPI JSON API is a free, key-free endpoint returning metadata for any package on the Python Package Index — current version, summary, author, licence, project URLs, requirements and downloadable release files.

PyPI exposes a JSON document for every package at `https://pypi.org/pypi/<package>/json`. It needs no authentication and is the same data the PyPI website renders, making it the authoritative source for Python package information.

A useful detail is the `urls` array, which lists the actual downloadable artefacts for the current release — wheels and source distributions, each with size, upload time and hashes. That makes it practical for building mirrors, installers or supply-chain verification tooling.

Quick facts

Base URL
https://pypi.org/pypi
Authentication
No key required for reading package metadata.
Rate limit
No published hard limit; PyPI asks that you cache and avoid aggressive polling.
Pricing
Free.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the PyPI JSON API

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

1. Fetch metadata for a Python package

GET https://pypi.org/pypi/requests/json

curl
curl 'https://pypi.org/pypi/requests/json'
JavaScript (fetch)
const res = await fetch("https://pypi.org/pypi/requests/json");
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://pypi.org/pypi/requests/json", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "info": {
    "author": null,
    "author_email": "Kenneth Reitz <me@kennethreitz.org>",
    "bugtrack_url": null,
    "classifiers": [
      "Development Status :: 5 - Production/Stable",
      "Environment :: Web Environment",
      "Intended Audience :: Developers",
      "License :: OSI Approved :: Apache Software License",
      "Natural Language :: English",
      "Operating System :: OS Independent",
      "Programming Language :: Python",
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3 :: Only",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "Programming Language :: Python :: 3.13",
      "Programming Language :: Python :: 3.14",
      "Programming Language :: Python :: 3.15",
      "Programming Language :: Python :: Free Threading :: 2 - Beta",
      "Programming Language :: Python :: Implementation :: CPython",
      "Programming Language :: Python :: Implementation :: PyPy",
      "Topic :: Internet :: WWW/HTTP",
      "Topic :: Software Development :: Libraries"
    ],
    "description": "# Requests\n\n[![Version](https://img.shields.io/pypi/v/requests.svg?maxAge=86400)](https://pypi.org/project/requests/)\n[![Supported Versions](https://img.shields.io/pypi/pyversions/requests.svg)](https://pypi.org/project/requests)\n[![Downloads](https://static.pepy.tech/badge/requests/month)](https://pepy.tech/project/requests)\n[![Contributors](https://img.shields.io/github/contributors/psf/requests.svg)](https://github.com/psf/re

Parameters

ParameterTypeRequiredDescription
<package>pathRequiredPackage name as published on PyPI. requests
<version>pathOptionalSpecific version; omit for the latest. 2.31.0

Response fields

info.versionstring
Latest released version.
info.summarystring
One-line package description.
info.requires_distarray
Declared dependencies with version specifiers.
info.license / authorstring
Licence and author metadata.
urlsarray
Downloadable files for this release, with size, upload time and digests.
releasesobject
Every version ever published, keyed by version string.

What you can build with the PyPI JSON API

  • Display the current version of a Python package in docs or a README badge
  • Check whether a dependency has a newer release available
  • Audit licences and dependencies for compliance
  • Verify package artefact hashes for supply-chain security checks

Common errors and how to fix them

404

Package name not found.

Fix: PyPI names are case-insensitive but normalise underscores and hyphens; try both forms if unsure.

Large response

The `releases` object includes every historical version.

Fix: Request a specific version path when you only need one release.

PyPI JSON API — frequently asked questions

Is the PyPI JSON API free and open?

Yes, it requires no API key or authentication for reading package metadata, and serves the same data shown on the PyPI website.

How do I check the latest version of a Python package?

Request `https://pypi.org/pypi/<package>/json` and read `info.version`, which always reflects the most recent published release.

Does the API list package dependencies?

Yes, in `info.requires_dist`, which contains dependency specifiers including version constraints and environment markers.

Can I get download counts from the PyPI API?

No. Download statistics are not in the JSON API; they are published separately through the BigQuery public dataset and third-party services such as pypistats.

Tools that pair with this API

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