Accessing OAuth2 APIs with Python Requests

Feb 3, 2024 ยท 2 min read

When building an application that needs to access user data from an API that uses OAuth2 authentication, Python's Requests library provides an easy way to handle the OAuth2 flow. In this guide, I'll walk through a simple example of using Requests to access a protected resource from an OAuth2 API.

Understanding the OAuth2 Flow

At a high level, the OAuth2 authentication flow has three main steps:

  1. Get an access token from the OAuth2 server by authenticating your application
  2. Include the access token in requests to the API
  3. Refresh the access token before it expires

The Requests library handles step 2 automatically. We just need to get the initial access token and refresh it when needed.

Getting an Initial Access Token

To retrieve an initial access token, we make a POST request to the OAuth2 server's token endpoint with our application's client ID, client secret, and the grant type. Here's an example:

import requests

url = ""

data = {
  "grant_type": "client_credentials",
  "client_id": "my_client_id",
  "client_secret": "my_client_secret"

response =, data=data)
access_token = response.json()["access_token"]

This gives us an access token we can use to access protected resources.

Making Authenticated API Requests

To call an API endpoint using our access token, we simply pass the token in the Authorization header:

headers = {
  "Authorization": f"Bearer {access_token}"  

response = requests.get("", headers=headers)

The API will validate our access token and return the protected resource if valid.

Refreshing Expired Tokens

Access tokens eventually expire. To get a fresh access token using a refresh token, make another POST request to the token endpoint. The main difference is passing the refresh_token instead of the client credentials.

Handling the token refresh logic allows us to keep accessing the API without interruptions.

This covers the basics of using Requests to access OAuth2 APIs. The key is obtaining and refreshing access tokens programmatically. Requests then handles including the token in API requests under the hood.

Browse by tags:

Browse by language:

The easiest way to do Web Scraping

Get HTML from any page with a simple API call. We handle proxy rotation, browser identities, automatic retries, CAPTCHAs, JavaScript rendering, etc automatically for you

Try ProxiesAPI for free

curl ""

<!doctype html>
    <title>Example Domain</title>
    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />


Don't leave just yet!

Enter your email below to claim your free API key: