{"uid":"cap_oCx3qcVrHZ4ka6lnxGY1R","slug":"pypi-breaking-changes-between-versions-3da8ead3","name":"PyPI Breaking Changes Between Versions","description":"PyPI breaking changes between two versions of a Python package, before a pip package upgrade: the documented breaking changes per version from the project's CHANGELOG, HISTORY or CHANGES file and GitHub release notes (alpha/beta/rc folded into the major), plus Requires-Python and required dependency changes, yanked versions, migration guide links and a verdict. PEP 440 versions ('1.10.13', '2.0') or a major ('1'); a source URL for every item.","url":"https://upgrade-brief.shopttyass-85f.workers.dev/pypi/breaking-changes?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'"},"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","verdict","summary","breaking"],"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"},"verdict":{"enum":["BREAKING_CHANGES_LIKELY","REVIEW_MANIFEST_CHANGES","NO_BREAKING_CHANGES_DOCUMENTED","UNKNOWN_INCOMPLETE_NOTES"],"type":"string"},"breaking":{"type":"array","items":{"type":"object","properties":{"bump":{"enum":["major","minor","patch","prerelease"],"type":"string"},"items":{"type":"array","items":{"type":"string"}},"source":{"type":["string","null"],"description":"Where the notes came from"},"version":{"type":"string"},"publishedAt":{"type":["string","null"],"description":"ISO date"}}},"description":"Documented breaking changes, newest version first"},"coverage":{"type":"object","properties":{"versionsWithNotes":{"type":"integer"},"versionsWithoutNotes":{"type":"array","items":{"type":"string"}}}},"degraded":{"type":"boolean","description":"true when GitHub was read without an API token (fewer release notes reachable)"},"majorBumps":{"type":"array","items":{"type":"string"}},"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"},"declaredChangelogLinks":{"type":"array","items":{"type":"string"},"description":"Changelog / release-notes URLs declared in the project's PyPI metadata"}}}}}}},"responseSchema":{"type":"json","example":{"to":"2.32.0","from":"2.31.0","latest":"2.34.2","package":"requests","summary":"requests 2.31.0 -> 2.32.0: 1 versions, 0 major bump(s), 2 documented breaking item(s) in 1 version(s); release notes found for 1/1 versions. Manifest: Python requirement changed: >=3.7 -> >=3.8.","verdict":"BREAKING_CHANGES_LIKELY","breaking":[{"bump":"minor","items":["Requests has officially dropped support for CPython 3.7","Requests has officially dropped support for PyPy 3.7 and 3.8"],"source":"https://github.com/psf/requests/blob/HEAD/HISTORY.md","version":"2.32.0","publishedAt":"2024-05-20T00:00:00Z"}],"coverage":{"versionsWithNotes":1,"versionsWithoutNotes":[]},"degraded":false,"ecosystem":"pypi","majorBumps":[],"repository":"https://github.com/psf/requests","manifestChanges":{"flags":["Python requirement changed: >=3.7 -> >=3.8"],"dependencies":{"added":{},"changed":{},"removed":[]},"requiresPython":{"to":">=3.8","from":">=3.7"}},"migrationGuides":[],"versionsInRange":1}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.005","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.005/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.005","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.005","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_AR7FUB8mYoxvoUVtUViiq","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.005","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Returns documented breaking changes, manifest diffs, and a compatibility verdict for a Python package upgrade between two PyPI versions","exampleAgentPrompt":"Before I upgrade pydantic from version 1.10.13 to 2.0, can you pull the documented breaking changes, any Python version requirement shifts, and an overall verdict on whether the upgrade is safe?","exampleUseCases":[{"title":"Django major version upgrade check","prompt":"I'm running Django 3.2 and want to upgrade to 4.2 — can you show me all the documented breaking changes between those versions, any Python version requirement changes, and whether there are migration guides I should read?"},{"title":"Automated dependency safety gate","prompt":"Before we merge this PR that bumps sqlalchemy from 1.4 to 2.0, pull the breaking changes between those versions and give me a verdict — flag anything that changes the Requires-Python or drops dependencies we rely on."},{"title":"Checking prerelease upgrade risk","prompt":"We're evaluating upgrading celery from 5.2 to the latest stable release — what breaking changes have been documented along the way, and are there any yanked versions in that range we should know about?"}],"resultDescription":"A JSON object containing: a verdict enum (BREAKING_CHANGES_LIKELY, REVIEW_MANIFEST_CHANGES, NO_BREAKING_CHANGES_DOCUMENTED, UNKNOWN_INCOMPLETE_NOTES), a human-readable summary, a list of breaking change items per version with source URLs and publish dates, manifest changes (Requires-Python diff, added/removed/changed dependencies), coverage stats showing which versions have release notes, migration guide links, yanked version warnings, the latest stable version, and the repository URL.","failureModes":["Package not found on PyPI — returns error or empty result","From or to version not resolvable — returns error if version prefix matches no stable release","No changelog or release notes found — verdict becomes UNKNOWN_INCOMPLETE_NOTES with degraded flag","Yanked versions in range flagged but may cause unexpected version resolution","Rate limiting or upstream GitHub/PyPI unavailability may degrade coverage","Invalid version string format returns a validation error"],"whenToPreferThis":"Use this endpoint when you need a structured, sourced summary of breaking changes for a Python package upgrade — especially for major version bumps where manual changelog review would be tedious. Prefer this over reading raw changelogs when you need a machine-readable verdict, manifest diffs (Requires-Python, dependency changes), and per-version sourcing in one call. Choose this over the sibling PyPI Changelog endpoint when you only care about breaking changes and compatibility, not the full release notes narrative.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-28T06:32:46.585Z","isFirstParty":false,"canonicalSlug":"pypi-breaking-changes-between-versions-3da8ead3"}