---
title: "oauthlib Breaking Changes on PyPI | Since.dev"
description: "What each oauthlib release removed, renamed or changed: 8 breaking changes in 1 version on PyPI, each with its source."
canonical_url: https://since.dev/packages/pypi/oauthlib
last_updated: 2026-09-28
---

# oauthlib breaking changes

Every breaking API change we have recorded in oauthlib on PyPI: 8 breaking changes in 1 version. Below are its newest version, removals and renames first, each with its source.

Newest change September 28, 2026

## 4.0.0

8 breaking changes, first published September 28, 2026.

- **Removed**  

The token revocation endpoint no longer supports JSONP responses. Code that relies on JSONP must switch to standard handling. [github.com](https://github.com/oauthlib/oauthlib/releases/tag/v4.0.0)
- **Removed**  

Python 3.8 is no longer tested by the project. Users on Python 3.8 should upgrade their interpreter. [github.com](https://github.com/oauthlib/oauthlib/releases/tag/v4.0.0)
- **Removed** `oauthlib.oauth2.RevocationEndpoint.enable_jsonp`  

RevocationEndpoint.enable_jsonp was removed in oauthlib 4.0.0 [pypi.org](https://pypi.org/project/oauthlib/4.0.0/)
- **Behavior changed**  

The grant_type parameter is now checked before client authentication. Code that depends on the previous error order may see different failures. [github.com](https://github.com/oauthlib/oauthlib/releases/tag/v4.0.0)
- **Signature changed** `oauthlib.oauth2.Client.prepare_token_revocation_request`  

Was def prepare_token_revocation_request(self, revocation_url, token, token_type_hint='access_token', body='', callback=None, \*\*kwargs); now def prepare_token_revocation_request(self, revocation_url, token, token_type_hint='access_token'... [pypi.org](https://pypi.org/project/oauthlib/4.0.0/)
- **Signature changed** `oauthlib.oauth2.RevocationEndpoint.__init__`  

Was def \_\_init\_\_(self, request_validator, supported_token_types=None, enable_jsonp=False); now def \_\_init\_\_(self, request_validator, supported_token_types=None). [pypi.org](https://pypi.org/project/oauthlib/4.0.0/)
- **Signature changed** `oauthlib.oauth2.rfc6749.clients.base.prepare_token_revocation_request`  

Was def prepare_token_revocation_request(url, token, token_type_hint='access_token', callback=None, body='', \*\*kwargs); now def prepare_token_revocation_request(url, token, token_type_hint='access_token', body='', \*\*kwargs). [pypi.org](https://pypi.org/project/oauthlib/4.0.0/)
- **Signature changed** `oauthlib.oauth2.rfc6749.parameters.prepare_token_revocation_request`  

Was def prepare_token_revocation_request(url, token, token_type_hint='access_token', callback=None, body='', \*\*kwargs); now def prepare_token_revocation_request(url, token, token_type_hint='access_token', body='', \*\*kwargs). [pypi.org](https://pypi.org/project/oauthlib/4.0.0/)

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous management.

Scan a public repository now, or give your agent one line.

### See how out of date your code is.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
