Tempio connects Reddit Ads as accounts and raw requests. It holds the connection, lists the ad accounts the login can reach, and carries any request the Reddit Ads API accepts through the escape hatch. It reads no campaigns and no daily numbers from Reddit, so a raw read is how you see anything past the account itself, and a raw change is drafted and waits at the gate like every other change.
Connecting
A workspace owner or admin starts the connect from Connections. Tempio sends you to Reddit's consent screen, where you sign in with the Reddit account that has access to your advertiser business and approve Tempio's request.
Tempio asks for two scopes:
| Scope | Why Tempio asks for it |
|---|---|
adsread | To list your businesses and ad accounts, to check the connected account on every accounts check, and to send raw reads |
adsedit | To send a raw change once it has been approved. Nothing is sent with it before then |
The request is for a permanent grant, which is what makes Reddit issue a refresh token. Tempio keeps the refresh token sealed in its token vault and uses it to renew the access token before the expiry Reddit gives it, without asking you to sign in again.
After consent you land on the account picker. It lists every ad account under every Reddit business the login can reach, with its currency, time zone and status. An account Reddit reports without a currency, or with a time zone Tempio cannot count days in, is listed with its box disabled and the reason under its name, because Tempio stores an account only with both. Pick the accounts to connect; each becomes its own connection.
What Tempio reads
The ad accounts. For each connected account Tempio stores its name, its id, its currency, its time zone and its status, and checks them again on every scheduled accounts check. That check is the whole sync for a Reddit connection: one read of the connected account, which also keeps the grant exercised. If the account stops being connectable, for example because Reddit no longer reports its time zone, the check fails with that reason on the connection and the stored account keeps its last good values.
Every Ads API call Tempio makes carries the connection's access token in the
Authorization header and Tempio's own User-Agent. The sign-in calls, which
renew and revoke the token, carry Tempio's app credential in its place. Tempio
sets every header. A request never takes one from the caller.
Raw requests on Reddit
A raw request names the platform's own path, and Tempio adds the base. For
Reddit the base is https://ads-api.reddit.com/api/v3, so the path
/ad_accounts/{ad_account_id}/campaigns is sent to
https://ads-api.reddit.com/api/v3/ad_accounts/{ad_account_id}/campaigns. A
path that resolves anywhere else is refused before anything is sent.
On Reddit, any GET is a read and every other method is a change.
Raw requests start off. A workspace owner turns them on, and turns raw changes on separately, in Settings → Raw platform requests; the escape hatch page covers both switches and who can use them.
A read, end to end
An agent, over MCP or in the chat, asks for the campaigns on an ad account:
{
"entity": "platform_request",
"action": "get",
"params": {
"connectionId": "…",
"method": "GET",
"path": "/ad_accounts/a2_1234567/campaigns"
}
}- Tempio checks that you can view the connection, that raw requests are on, and that the connection is active rather than paused.
- It resolves the path under the Reddit base and classifies it: a
GET, so a read. - It sends the request with the connection's access token and the
User-Agentin its headers. The token is kept current by the renewal described under Reconnecting. - Reddit's answer comes back as the
dataof the response, exactly as Reddit wrote it. Money is in Reddit's units and ratios are Reddit's own; none of it enters Tempio's reports. - An audit row records who asked, the method, the host, the path, the status and the size of the answer. The body is never written to it.
A change, end to end
A change goes through mutate with a sentence that says what it does. The
example below shows the shape of a request, not a guaranteed Reddit endpoint:
the path and body are sent to Reddit as written, so check both against
Reddit's Ads API reference, because Tempio does not model this endpoint and
cannot correct them for you.
{
"entity": "platform_request",
"action": "mutate",
"params": {
"connectionId": "…",
"method": "PATCH",
"path": "/campaigns/{campaign_id}",
"body": { "data": { "configured_status": "PAUSED" } },
"description": "Pause the spring test campaign while the landing page is fixed."
}
}- Tempio checks that you can draft on the connection and that raw changes are on, then records one change request with your sentence, the method and the path. Nothing is sent to Reddit.
- The draft waits for a person with approval rights on the connection. No approval rule can clear a raw change, and the chat agent cannot approve one. When your workspace uses approval chains or separation of duties, they apply to it as to any change.
- On approval, Tempio checks the switches and the connection again, then sends the request once. A raw change that reached Reddit is never retried.
- Reddit's answer is stored on the change request, and the applied change carries a warning that Tempio did not verify it: there is no modelled row to read back.
- The connection's accounts are read again, so a change that renamed or closed the account shows on the connection.
How a request can end
| What happened | What Tempio answers |
|---|---|
| Reddit answered with a redirect | A refusal. Tempio never follows a redirect, because it would carry your token to another address |
| Reddit did not answer within 30 seconds | Tempio stops the request. On a change, the change request fails and is not retried |
| Reddit answered 429 | A refusal saying Reddit is limiting how often Tempio can call it. On the scheduled accounts check, Tempio waits as long as Reddit's answer asks before trying again |
| Reddit answered 401 | A refusal saying Reddit no longer accepts the connection's sign-in, and the reconnect it needs |
| Reddit answered 403 | A refusal saying the connected login has no access to what the path names |
| Reddit answered 404 | A refusal saying Reddit found nothing at that address |
What is not read
Campaigns, ad groups, ads, creatives and daily numbers. None of them is stored, so a Reddit connection adds nothing to Campaigns, Metrics or the account brief, and Tempio cannot draft a modelled change such as a budget or a status on Reddit. A raw request reaches all of it through Reddit's own API.
A raw request reaches whatever the connected login can reach on Reddit, not only the account its connection names.
Reconnecting
Tempio renews the access token when it has twenty minutes or less left. When Reddit refuses the renewal, because access was removed on Reddit's side or the grant ended, the connection moves to an error state with a reconnect action. The same happens when Reddit answers the accounts check with 401. Reconnecting runs the same consent screen; signing in with the same Reddit login returns its connections to active.
TikTok
What a TikTok draft can change, why every create lands disabled, how removing differs from pausing, the identity an ad posts as, and how TikTok counts money and time.
X Ads
How an X Ads account connects over OAuth 1.0a, which accounts the picker can take and why a funding source matters, what Tempio reads from X, and how a raw read and a raw change reach the X Ads API.