Changelog entries between two versions of a package (upgrade intelligence)
Given a package and a from/to version, returns the ordered release entries in the half-open range (from, to] — from exclusive (you have it), to inclusive — with summaries, breaking-change verdicts (#1696), and migration notes. One call instead of N changelog pages.
Reads already-ingested releases only (no live fetch). Resolution is read-only: an exact catalog source-slug match, then a non-materializing GitHub owner/repo coordinate match. An unresolvable package returns status: "unknown" with HTTP 200 — a valid answer, not an error; npm/PyPI names absent from the catalog resolve to unknown until the name→source map (#1345) lands. Wide ranges are truncated to a token budget (newest entries kept), flagged via truncated.
bearerAuthAuthorizationBearer <relk_… | relu_… | OAuth JWT>Machine/operator tokens use the relk_ prefix; self-serve read-only user keys use relu_; Sign in with Releases supplies an OAuth access token. Required scope depends on the endpoint.
package*stringPackage identifier — a catalog source slug or a GitHub "owner/repo" coordinate.
from*stringVersion you're upgrading FROM (exclusive).
to*stringVersion you're upgrading TO (inclusive).
ecosystem?stringOptional resolution hint. github enables the coordinate match for a bare owner/repo.
"npm""pypi""github"Upgrade range (resolved or unknown — both are 200)
application/json- response
status*string"resolved""unknown"package*stringecosystem*|nullfrom*stringto*stringsource*|nullentries*array<>count*numbertruncated*booleantruncatedAtTokens?numbercurl -X GET 'https://api.releases.sh/v1/whats-changed?package=string&from=string&to=string'{ "status": "resolved", "package": "string", "ecosystem": "npm", "from": "string", "to": "string", "source": { "sourceId": "string", "sourceSlug": "string", "orgSlug": "string" }, "entries": [ { "version": "string", "publishedAt": "string", "title": "string", "summary": "string", "breaking": "unknown", "migrationNotes": "string", "url": "string", "webUrl": "string" } ], "count": 0, "truncated": true, "truncatedAtTokens": 0}