Skip to main content

Reddit Ads

Verified on 25 October 2026 against the Reddit Ads API v3.

The Reddit Ads connector reaches https://ads-api.reddit.com/api/v3, the Reddit Advertising API, for one advertiser account. It is good for the questions you would otherwise open Ads Manager to answer: what is running, what each ad group is spending and bidding, how the ads performed yesterday, which communities and keywords can be targeted. It can also create and change campaigns, ad groups, ads and the posts behind them, and every one of those ships switched off and asks a human before it runs, because each can start or change spend.

What you need​

A Reddit app that you register yourself, the same kind the Reddit connector uses, and a Reddit Ads account the signed-in Reddit user can manage.

1. Create the app. Signed in as a Reddit user with access to the ad account, open reddit.com/prefs/apps, choose create another app, pick web app, and set the redirect uri to your gateway's address followed by /oauth/callback (http://127.0.0.1:7376/oauth/callback on your own machine, https://<your-gateway-host>/oauth/callback otherwise). Reddit checks it byte for byte, and one app holds one redirect URI. The client id is the short string under the app's name; the secret is labeled secret.

One app can serve both this connector and the Reddit connector; each connection authorizes separately and holds its own tokens.

2. Know which ad account. Almost every action takes an ad_account_id (a2_…). businesses.list and ad_accounts.list find it, and profiles.list gives the profile (t2_…) posts are created under.

Add the connection​

In the console, open Access, Connections, Add connection, pick Reddit Ads from the catalog, and under the credential choose OAuth, then Gateway-held · your own app. Paste the client id and secret, check the redirect URI matches your Reddit app, and choose Add. Reddit's consent page opens in a new tab; approve it, and your browser lands on the gateway's "Connected" page once the tokens are sealed. The REST calls are the same as on the Reddit page with "preset_id": "reddit-ads".

Left alone, the gateway asks for the adsread and adsedit scopes. The access token lasts a day and the gateway refreshes it itself, two minutes before expiry, using the HTTP Basic authentication Reddit's token endpoint requires. Nothing reaches permaura.com.

What the agent can do​

ActionWhat it doesOn by default
me.readReads the advertiser account the connection acts asYes
businesses.list, businesses.readLists and reads the businesses the account belongs toYes
ad_accounts.list, ad_accounts.readLists and reads ad accountsYes
profiles.listLists the Reddit profiles an ad account can post fromYes
campaigns.list, campaigns.readLists and reads campaignsYes
ad_groups.list, ad_groups.readLists and reads ad groups, with budget, bid and targetingYes
ads.list, ads.readLists and reads adsYes
posts.listLists the promotable posts on a profileYes
pixels.listLists an ad account's pixelsYes
reports.runRuns a performance reportYes
history.readReads an ad account's change historyYes
forecast.estimateEstimates audience size and delivery for a targeting and budgetYes
targeting.communities.search, targeting.communities.readFinds communities that can be targetedYes
targeting.keywords.suggestSuggests keywords to targetYes
targeting.geolocations.listLists targetable locationsYes
campaigns.create, campaigns.updateCreates a campaign; pauses, activates or changes oneNo, and needs approval
ad_groups.create, ad_groups.updateCreates an ad group; changes its budget, bid, targeting or statusNo, and needs approval
ads.create, ads.updateCreates an ad from a post; pauses, activates or changes oneNo, and needs approval
posts.createCreates a promotable post on a profileNo, and needs approval

Good to know​

  • Reports, history, forecasts and keyword suggestions are POSTs, and that is fine. The Ads API takes their parameters in a JSON body, so Permaura's classifier would call them writes and switch them off. The manifest marks the four as reads at medium risk so the connector answers performance questions the moment it is connected. Nothing they do changes the account.
  • Every body is wrapped in data. The API expects {"data": {...}} on every create, update and report call, so each of those actions has one parameter, data, holding the object. reports.run takes data with breakdowns, fields, starts_at, ends_at and a filter; the API reference lists the field names.
  • Pausing is an update. A campaign, ad group or ad is paused or started by sending data: {"configured_status": "PAUSED"} or "ACTIVE" to its update action. Both directions ask for an approval, since the second one starts spending.
  • Paging. List responses carry pagination.next_page_token; pass it back as page.token, with page.size up to the API's cap, to get the next page.
  • A new ad group needs a start_time even though the reference lists it as optional, and ad groups created since July 2026 must name a pixel. Images are supplied as a public URL that Reddit copies to its own hosting.
  • Personal fields are redacted. The name, email address and phone number on me.read are blanked before the agent sees them, so the call confirms the connection works without handing over who you are.
  • The Reddit Ads API needs an enabled account. Reddit grants API access per advertiser; an account that has never run ads may need to request it in Ads Manager first. A 403 on me.read with a working token is that, not a Permaura refusal.