{"uid":"cap_Xk3pozrfFVSZ9XtQDjf_9","slug":"pypi-changelog-between-versions-13ad5e7e","name":"PyPI Changelog Between Versions","description":"PyPI changelog between two versions of a Python package: the full release notes of every version in the range (newest first, up to 100) from the project's changelog file and GitHub releases, with publish dates, bump type, yanked flags, extracted breaking changes and Requires-Python / dependency changes. One call instead of reading a long HISTORY or CHANGES file before a Python package upgrade.","url":"https://upgrade-brief.shopttyass-85f.workers.dev/pypi/changelog?utm_source=zero.xyz","method":"GET","headers":{},"bodySchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["input"],"properties":{"input":{"type":"object","required":["type","method"],"properties":{"type":{"type":"string","const":"http"},"method":{"enum":["GET"],"type":"string"},"queryParams":{"type":"object","required":["package","from"],"properties":{"to":{"type":"string","default":"latest","description":"Target version: exact, or a major/minor prefix ('5', '5.1') resolved to the first stable release of that series (5.0.0). Default: the latest stable release ('latest')"},"from":{"type":"string","description":"Version you are on now: exact ('1.10.13', '2.0'), or a major/minor prefix ('1', '4.2') resolved to its newest stable release (PEP 440)"},"package":{"type":"string","description":"PyPI project name, e.g. 'pydantic', 'django' or 'flask'"},"maxVersions":{"type":"integer","default":30,"maximum":100,"minimum":1,"description":"Newest N versions of the range to return notes for"},"prereleases":{"enum":["true","false"],"type":"string","default":"false","description":"Include alpha/beta/rc/canary versions in the range"}},"additionalProperties":false}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object","required":["package","from","to","releases"],"properties":{"to":{"type":"string"},"asOf":{"type":"string"},"from":{"type":"string"},"notes":{"type":"array","items":{"type":"string"}},"latest":{"type":["string","null"],"description":"Latest stable version"},"package":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}},"summary":{"type":"string"},"degraded":{"type":"boolean","description":"true when GitHub was read without an API token (fewer release notes reachable)"},"releases":{"type":"array","items":{"type":"object","properties":{"bump":{"type":"string"},"notes":{"type":["string","null"],"description":"Release notes (markdown), up to 6,000 characters"},"source":{"type":["string","null"],"description":"changelog (npm package) | changelog (repository) | github-release"},"version":{"type":"string"},"breaking":{"type":"array","items":{"type":"string"}},"sourceUrl":{"type":["string","null"],"description":"URL"},"truncated":{"type":"boolean"},"deprecated":{"type":["string","null"],"description":"npm deprecation message"},"publishedAt":{"type":["string","null"],"description":"ISO date"}}},"description":"Newest first"},"repository":{"type":["string","null"],"description":"Source repository URL"},"attribution":{"type":"string"},"toPublishedAt":{"type":["string","null"],"description":"ISO date"},"fromPublishedAt":{"type":["string","null"],"description":"ISO date"},"manifestChanges":{"type":["object","null"],"properties":{"flags":{"type":"array","items":{"type":"string"}},"dependencies":{"type":"object"},"requiresPython":{"type":"object"}},"description":"Differences between the two versions' PyPI metadata (Requires-Python, required dependencies)"},"migrationGuides":{"type":"array","items":{"type":"string"},"description":"Migration / upgrade guide links found in the notes"},"versionsInRange":{"type":"integer","description":"Versions after 'from' up to and including 'to'"},"includesPrereleases":{"type":"boolean"}}}}}}},"responseSchema":{"type":"json","example":{"to":"3.0.0","from":"2.3.3","package":"flask","summary":"flask 2.3.3 -> 3.0.0: 1 versions; returning 1 newest first, 1 with release notes.","releases":[{"bump":"major","notes":"Released 2023-09-30\n\n-   Remove previously deprecated code. ...","source":"changelog (repository)","version":"3.0.0","breaking":["Remove previously deprecated code."],"sourceUrl":"https://github.com/pallets/flask/blob/HEAD/CHANGES.rst","truncated":false,"deprecated":null,"publishedAt":"2023-09-30T00:00:00Z"}],"ecosystem":"pypi","manifestChanges":{"flags":["Dependency range changed: werkzeug >=2.3.7 -> >=3.0.0"],"dependencies":{"added":{},"changed":{"werkzeug":{"to":">=3.0.0","from":">=2.3.7"}},"removed":[]},"requiresPython":{"to":">=3.8","from":">=3.8"}},"versionsInRange":1}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.01","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.01/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm__x-5p1XLPx-LTzCVHAJCu","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.01","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Returns full release notes, breaking changes, and dependency changes for every version of a Python package between two specified versions, newest first.","exampleAgentPrompt":"What changed in pydantic going from version 1.10.13 to 2.0? Show me the release notes, any breaking changes, and whether the Python version requirement or dependencies changed.","exampleUseCases":[{"title":"Pre-upgrade review for Django LTS jump","prompt":"I'm upgrading Django from 3.2 to 4.2 — can you pull the full changelog for every version in between, highlight the breaking changes, and tell me if any dependency requirements changed?"},{"title":"Checking NumPy 2.0 breaking changes","prompt":"We're planning to upgrade numpy from 1.24 to 2.0 in our data pipeline. What are the documented breaking changes across all intermediate releases, and did the Python version requirement change?"},{"title":"Auditing a FastAPI patch upgrade","prompt":"Can you fetch the release notes for fastapi between version 0.100.0 and 0.110.0, and flag anything that was yanked or marked as a major bump?"}],"resultDescription":"A JSON object containing: list of releases in the version range (newest first, up to 100), each with version, publish date, bump type (major/minor/patch), markdown release notes (up to 6,000 chars), breaking changes array, source URL, yanked flag, and truncated flag. Also includes a top-level summary string, ecosystem identifier, manifest changes (added/changed/removed dependencies and Requires-Python delta), total versionsInRange count, and a degraded flag if GitHub was accessed without an API token.","failureModes":["Package not found on PyPI — returns error with package name","Invalid version format — returns 400 with message about PEP 440 compliance","'from' version newer than 'to' version — returns empty releases array","No changelog found — releases returned with null notes fields","GitHub rate limiting without token — degraded:true flag set, fewer release notes available","Network timeout fetching upstream changelog — partial results or error response"],"whenToPreferThis":"Use this endpoint when you need the full release notes and structured breaking-change data for a Python package version range before performing or recommending an upgrade. It saves the agent from fetching and parsing long CHANGES/HISTORY files manually. Prefer it over the PyPI Breaking Changes endpoint when you want complete release notes in addition to just breaking changes, or when you need publish dates, bump types, yanked flags, and dependency diffs across multiple versions in one call.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-28T06:40:04.384Z","isFirstParty":false,"canonicalSlug":"pypi-changelog-between-versions-13ad5e7e"}