> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appdna.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Reddit Ads

> Connect a Reddit Ads account to manage campaigns, ad groups, ads, and promoted posts, upload media, pull reports, and run multi-ad-group creative experiments from the dashboard.

## Overview

Connecting Reddit Ads lets the dashboard:

* Create, update, pause, resume, and delete **campaigns** and **ad groups**.
* Upload **image** and **video** media into the connected ad account.
* Create **ads** (including promoted-post format) that reference an uploaded post and media.
* Pull spend, impressions, clicks, conversions, and conversion value from Reddit's reporting endpoint.
* Run creative experiments by rotating multiple ad groups under one campaign with shared targeting.

The integration uses the **Reddit Ads API v3** with OAuth 2.0 authentication.

## Prerequisites

Before connecting, make sure you have:

1. An active Reddit Ads account in good standing.
2. An OAuth-enabled Reddit application configured for the dashboard's redirect URI, with OAuth credentials configured by your administrator.

## OAuth scopes

The connection requests the following scopes:

```
ads_read
ads_manage
```

`ads_read` covers list and report operations; `ads_manage` covers all create / update / delete writes.

## Connect

1. Open the **Paid UA → Integrations** page in the dashboard.
2. Click **Connect** on the Reddit Ads tile.
3. Sign in with the Reddit account that has access to your ads accounts.
4. Approve the requested scopes.
5. After redirect, the dashboard probes `/me/accounts` to confirm access and stores the connected account id.

The dashboard stores the OAuth refresh token; access tokens are rotated automatically before expiry using HTTP Basic auth on `https://www.reddit.com/api/v1/access_token`.

## What happens behind the scenes

| Operation                                 | API endpoint                                            |
| ----------------------------------------- | ------------------------------------------------------- |
| List ad accounts the user can access      | `GET /me/accounts`                                      |
| Create / list campaigns                   | `POST` / `GET /accounts/{id}/campaigns`                 |
| Update / pause / resume / delete campaign | `PUT` / `DELETE /campaigns/{id}`                        |
| Create / update ad groups                 | `POST /accounts/{id}/ad_groups`, `PUT /ad_groups/{id}`  |
| Create / update ads                       | `POST /accounts/{id}/ads`, `PUT /ads/{id}`              |
| Upload media (image / video)              | `POST /accounts/{id}/media`                             |
| Create a post (for promoted-post ads)     | `POST /accounts/{id}/posts`                             |
| Pull insights                             | `GET /accounts/{id}/reports?breakdowns=...&metrics=...` |

Every write request carries an `Idempotency-Key` HTTP header so retries do not produce duplicate resources, even if the platform connection drops mid-request.

## Rate limiting

Requests are rate limited. If the platform reports HTTP 429, the request is automatically retried with exponential backoff.

## Reporting

Metrics are pulled hourly (or on demand) from Reddit's reports endpoint. Default breakdown is `date,campaign_id`; default metrics are `spend,impressions,clicks,conversions,conversion_value`.

Spend is converted from native currency to USD on ingestion. The native currency, the FX rate used, and the local-currency spend are kept alongside the USD value for downstream analytics.

## Experiments (multi-ad-group rotation)

Reddit does not expose a native experiment primitive. The dashboard maps experiment variants onto **multiple ad groups** under a single campaign that share targeting, with each variant carrying its own creative. The control variant ships **active**; treatments ship **paused** until the experiment runner toggles them. Per-variant performance is read back from the reports endpoint with `breakdowns=ad_group_id`.

## Live write access

Live write access is enabled by AppDNA for your account. Until it is enabled, write operations are not sent to Reddit.

## Disconnect

Click **Disconnect** on the integration tile. The OAuth refresh token is removed from the dashboard. To fully revoke access, also remove the third-party app authorisation from your Reddit account preferences.

## Troubleshooting

* **"Reddit Ads /me/accounts returned 401"** — the OAuth token has been revoked or has expired without a valid refresh token. Re-connect the integration.
* **"Reddit Ads create\_campaign: 429 — ..."** — your account's per-minute API quota was breached. The dashboard backs off automatically; if the error persists, lower campaign-mutation frequency.
* **"webhooks not supported on reddit\_ads"** — Reddit Ads has no webhook surface. State changes are detected via the hourly metrics-sync job instead.
* **Writes are not reaching Reddit** — live write access is enabled by AppDNA for your account. Contact AppDNA support if writes are not taking effect.
