Published on

Connecting Make and Reddit: The Full OAuth 2.0 Tutorial

Authors

Introduction

Make has a large array of app modules at its disposal, and among those is the Reddit app module. While this module has a bunch of different functionality, such as watching a user's posts, or listing comments in a subreddit, it is also quite limited. For instance, while writing a tutorial for building a Reddit scraper in Make I spent a lot of time trying to figure out how to get posts from a subreddit.

The Make Reddit app module
The Make Reddit app module

As it turns out, the best way is to connect to the Reddit API manually, so that you get the full functionality of the API. However to do that, you will need to set up an OAuth 2.0 connection to Reddit! In this tutorial, we will walk you through setting up the connection, and how to use it to get access to the full Reddit API.

Table of Contents

Creating a Reddit App

In order to use the full API, we need more than just a user account. We need to create an "app". Apps in Reddit are commonly used for special tools, such as the bots or automoderator tools you occasionally see. Luckily for us, anyone can create a bot.

Log into your Reddit account, and head to the apps page.

Once there, click Create App, and you will be presented with a form to fill out. Make sure to choose script as the app type. There are a couple of other fields here, but the most important one is the redirect url. This is the URL that Reddit will use to redirect you back to Make, so use the following:

https://www.integromat.com/oauth/cb/oauth2

The rest of the fields can be filled out however you like. Give your app a descriptive name. If you have a URL for your project you can put that in the about url, but if you are just making a script, use https://make.com.

Setting up the Reddit App
Setting up the Reddit App

Once you are done, click Create App. What you should see next is your created app. From this page, we need two important pieces of information. Your Client ID and your Secret. See the labels on the image below to find these, and make a note of them somewhere safe as we will need them later.

Created app with Client ID and Secret
Created app with Client ID and Secret

We are now done with creating the Reddit app. If you made any mistakes, you can always correct them on this page by clicking update app.

Creating a Reddit OAuth 2.0 Connection

Now that we are done with creating our app on Reddit, we now need to configure Make to use this credential. Reddit uses an authorization protocol called OAuth 2.0 in order to allow you to connect and use their API. The specifics are somewhat technical, but roughly speaking you will use your Client ID and Secret to call Reddit and get an Access Token. This token can be temporary or permanent, but once you have it, you can use it to call the Reddit API.

Creating the OAuth 2.0 Request HTTP module

Let's start by creating a HTTP module in Make, and choosing the Make an OAuth 2.0 Request sub-type. In the pop up dialog, click the Create a Connection button.

Click this button to create a connection to the Reddit API
Click this button to create a connection to the Reddit API

Now we need to set up the connection. Pay close attention here, as it is important to get all of these fields right. For some of the more obscure ones, we will explain what their meaning is.

WARNING

Make has a bit of an annoying habit where if you get anything wrong in your connection configuration, it will fail to work, and promptly reset the whole form forcing you to fill in everything again. Therefore, we suggest taking care to get it right the first time!

We start by setting up the connection name, and the Authorize and Token URLs. You can choose any name you want (I just went with "Reddit Connection"), but the URLs must be the ones below. These will be used by Make to authorize your account, and to get an access token respectively. You should also keep the Flow type as Authorization Code.

Click this button to create a connection to the Reddit API
Click this button to create a connection to the Reddit API

Make sure to use the following for the URLs:

Authorize URI: https://www.reddit.com/api/v1/authorize
Token URI: https://www.reddit.com/api/v1/access_token

Next, we will set up the scopes. In OAuth 2.0, scopes represent what actions we want to take as a user once we have access. There are a variety of different actions such as reading data, creating posts, commenting, voting, etc. You can see the full list in the appendix below.

In our case, we just want the read scope, as we want to read the posts from the subreddit. Click the Add item under the Scope section, and add read to it. If you need more scopes, just add more items and add them one by one.

Adding the read scope
Adding the read scope

Now we need to add our Client ID and Secret. Grab the values from the Reddit app we created, and fill in the two fields.

Adding the Client ID and Secret
Adding the Client ID and Secret

We are not done yet. Now we need to add some more details to our connection. On the bottom left of the dialog, click the Show advanced settings slider to reveal more options

Click the slider to reveal more options
Click the slider to reveal more options

Under the Authorize Parameters we need to add in our redirection URL. This is the URL that make provides that Reddit will redirect to once we have logged in. We will use the same URL as before, and put it under the key redirect_uri. Click the Add item button to add an entry and fill it in.

https://www.integromat.com/oauth/cb/oauth2

We also can optionally add another parameter which will control how long our access token is valid for. If no duration is provided, the token will be valid for 1 hour. That means that every time your workflow runs, after an hour, you will need to refresh the token manually. Alternatively, you can choose a duration of permanent to make the access token permanent.

WARNING

Using a permanent access token does make life easier, but it can also be problematic if it falls into the wrong hands. Since it never expires, a malicious actor might gain permanent access to your app until you delete your app on Reddit!

To make your token permanent, add a duration key, with the value permanent.

Setting up the Authorize Parameters
Setting up the Authorize Parameters

Lastly, we need to set up our Custom Headers. These are additional headers that are required as part of the auth process. To start with, we need to add our User-Agent. This is a piece of text that represents who we are and what our app does. Reddit is quite strict about this if you read their API rules, so, in general, any request you make to Reddit should have this header, and it should be descriptive.

Our User-Agent needs to follow this format:

<platform>:<app ID>:<version string> (by /u/<reddit username>)

We will use the following for our connection, but you should customize your own:

script:make_connection:1.0 (by /u/molehill_io)

Click Add item under Custom Headers and fill in the header.

Adding a custom User Agent to the Custom Headers
Adding a custom User Agent to the Custom Headers

Lastly, we need to add our Authorization header. This part is a little bit complicated, so some care needs to be taken. Reddit requires adding an additional authorization header on certain requests. This header, however, is a value that is derived from both the Client ID and Secret, and is encoded in base64.

We need to add an Authorization header with the value:

Basic base64({clientID}:{secret})

There are two ways to do this. If you are familiar with Python, you can do this by running the steps below individually in the Python shell. This is assuming that your Client ID is clientid and your Secret is secret. Replace these as you need to:

import base64

"Basic " + base64.b64encode("clientid:secret".encode("ascii")).decode('ascii')

Alternatively, you can use Make itself. Open up your scenario in a new tab (don't use the same one, as otherwise you will lose your progress!). Add a new module to the scenario, and choose the Set Variable module.

Call the variable "Auth Token", and in the value put the following, replacing the Client ID and Secret with your own ones.

Basic base64(clientid:secret)
Creating a variable to derive our authorization token
Creating a variable to derive our authorization token

Right click on the module, and click Run this module only. This will generate your Authorization header, and you can copy paste it from the output.

Copy the authorization token from the variable
Copy the authorization token from the variable

CAUTION

There are websites online that can encode text to base64. In this case however, you should not use them! Never paste your client ID, secret, API key, etc into an unknown online tool. You have no idea who might see your secrets!

Once you have this token written down, you can delete the module as it is no longer needed, and switch back to the HTTP module. Take the value you calculated and add it as a custom header like so:

Adding the authorization header
Adding the authorization header

The remainder can stay as is. Double check everything, and when you are ready, click Save at the bottom. Assuming everything went well, you should see a small browser window pop up, asking you to allow the app. Review what it says, and click allow.

The Reddit OAuth request window
The Reddit OAuth request window

Once this is done, you should be redirected back to Make, where your Connection field should now show your reddit connection. If you got an error, check what it says (for instance, "Bad client ID", etc) and try and correct it. If nothing else helps, feel free to ping me on social media.

The newly added Reddit connection
The newly added Reddit connection

We have now successfully added the Reddit OAuth connection, and can proceed to actually making useful API calls.

Using the API

With our credentials set up, we can use the connection to call the Reddit API. To do that, we need to configure the actual HTTP Module. The Reddit API provides a wide range of routes that can be called to carry out various functions, and you can find the full list in their documentation.

As an example, we will use the API to get the posts from the r/news subreddit. To do this, we need to set the URL in the HTTP module. Keep the Method as GET, and set the URL to:

https://oauth.reddit.com/r/news

You might notice that the URL for the API is different from the regular Reddit URL (it has the oauth subdomain). It is important not to forget this; otherwise, you will get a rejection.

Setting the Reddit URL
Setting the Reddit URL

We mentioned earlier that we need to always provide the User-Agent header with every call, and this is no exception. Open the HTTP module dialog, click Add item on the Headers section, and add in the same User-Agent as last time.

Setting the User-Agent again
Setting the User-Agent again

Finally, we set up our HTTP module to parse the response, as it will be returned as JSON.

Make sure to parse the data as it is returned as JSON
Make sure to parse the data as it is returned as JSON

Once you are done, click Save, and run the workflow! You should see the result fetched successfully in the module output. Drill down into the JSON result to see the individual posts.

Individual posts returned from the subreddit
Individual posts returned from the subreddit

Conclusion

As you can see, setting up the Reddit connection and HTTP module is somewhat involved. However, once done it is relatively easy to use as long as you remember to add in the right headers!

I also want to credit some sources we used to piece together the full process:

Appendix: Reddit API Scopes

This is a list of scopes that we pulled from https://www.reddit.com/api/v1/scopes. This table was created in August 2025, so it may be out of date.

iddescription
credditsSpend my reddit gold creddits on giving gold to other users.
modnoteAccess mod notes for subreddits I moderate.
modcontributorsAdd/remove users to approved user lists and ban/unban or mute/unmute users from subreddits I moderate.
modmailAccess and manage modmail via mod.reddit.com.
modconfigManage the configuration, sidebar, and CSS of subreddits I moderate.
subscribeManage my subreddit subscriptions. Manage "friends" - users whose content I follow.
structuredstylesEdit structured styles for a subreddit I moderate.
voteSubmit and change my votes on comments and submissions.
wikieditEdit wiki pages on my behalf
mysubredditsAccess the list of subreddits I moderate, contribute to, and subscribe to.
submitSubmit links and comments from my account.
modlogAccess the moderation log in subreddits I moderate.
modpostsApprove, remove, mark nsfw, and distinguish content in subreddits I moderate.
modflairManage and assign flair in subreddits I moderate.
announcementsAccess to inbox announcements.
saveSave and unsave comments and submissions.
modothersInvite or remove other moderators from subreddits I moderate.
readAccess posts and comments through my account.
privatemessagesAccess my inbox and send private messages to other users.
reportReport content for rules violations. Hide & show individual submissions.
identityAccess my reddit username and signup date.
livemanageManage settings and contributors of live threads I contribute to.
accountUpdate preferences and related account information. Will not have access to your email or password.
modtrafficAccess traffic stats in subreddits I moderate.
wikireadRead wiki pages through my account
editEdit and delete my comments and submissions.
modwikiChange editors and visibility of wiki pages in subreddits I moderate.
modselfAccept invitations to moderate a subreddit. Remove myself as a moderator or contributor of subreddits I moderate or contribute to.
historyAccess my voting history and comments or submissions I've saved or hidden.
flairSelect my subreddit flair. Change link flair on my submissions.

Subscribe to the newsletter