Guides · Setup

Connect Taboola Backstage / Realize API to Outloop

Last updated:

In short

Outloop connects Taboola Backstage to your AI agents using OAuth client credentials stored in your Mac's Keychain.

Agents run real campaign reads and writes under one mapped advertiser; the client secret is never shown to the agent, the chat, your project files or your logs. Each workspace is bounded to a single client account, and any other account is refused before Taboola is contacted.

Summarize this setup guide with AI ChatGPTClaudePerplexity

The two account IDs, and who translates them

Taboola gives every account two different identifiers for the same account, and knowing which is which explains both the setup step below and the single most confusing error this connector can produce.

Identifier Example shape Where it appears
numeric id 1234567 The Realize interface and the accountId= URL parameter
alphabetic account_id taboola-demo-advertiser Every Backstage account-scoped API path

Every account-scoped Backstage call is addressed by the alphabetic one, because the account is the first path segment of the request. The number you can see in Realize is not a valid substitute there — Backstage simply does not recognise it, and answers 404 api.action.resource_not_found with the message account, which reads like a permissions problem and is not one.

The good news is that Outloop resolves this for you. Find my Taboola accounts asks Taboola which accounts your credential may use and pins the one you choose, in its API form. The dashboard says so itself: picking from that list means you never have to translate between the two identifiers.

It still matters if you type the id by hand. The manual route — Enter an account id instead — takes the alphabetic account_id, and entering the numeric Realize ID there saves without any error or warning before failing on every call. If a connector that looked fine starts returning 404 api.action.resource_not_found, check the identifier shape before you contact Taboola about permissions.

What this connection gives you

Outloop lets an approved AI worker use the Taboola Backstage API without ever seeing the Taboola credential. The OAuth client ID and client secret sit in the macOS Keychain on the Mac that runs your agents. When an agent makes a request, Outloop mints the access token host-side, puts the credential on the wire, calls Taboola, and returns a redacted response.

Once a workspace is configured, approved work runs without a per-request approval. Reads and writes under the mapped advertiser execute directly. Outloop is the policy and runtime layer — not a queue somebody has to sit in front of.

What you need

1. Add Taboola Backstage in Outloop

In Outloop open API Keys & Access and add Taboola Backstage.

2. Enter the Client ID and Client Secret

Taboola Backstage uses OAuth 2.0 client credentials, so there are exactly two values: Client ID (not secret — it identifies the API client) and Client Secret. The secret goes straight to the macOS Keychain over loopback and is never displayed again.

There is no access token to paste. Backstage tokens expire after 12 hours and nothing would renew a pasted one, so Outloop mints them itself from the client pair on every use.

Adding Taboola Backstage in Outloop: the Server-to-server credentials explanation, the setup-details disclosure, and the empty Client ID and Client Secret fields.
Two values only — Client ID and Client Secret. The secret is written to the Keychain and never shown again.

The setup context on this screen is headed “Server-to-server credentials.” It explains that your Taboola account manager issues both values, that there is no browser sign-in and no refresh token, and that Outloop mints a short-lived token host-side on every use. Further detail sits behind “Setup details — where these credentials come from.”

No sub-account is needed at this stage. Setup states the agency model directly: after connecting, you assign each client workspace its own Taboola sub-account on the key row, and runtime access stays blocked for a workspace until its account is assigned.

3. Find your advertiser's API account id

You need to know which advertiser you mean. In Realize, use the account selector at the top left to open the right one. The numeric Account ID appears underneath the account name, and again in the URL as accountId=1234567.

You do not need to translate that number yourself. Outloop asks Taboola which accounts your credential may use and pins the one you pick, already in its API form — which is what the next step does.

If you would rather look it up yourself

The credential can authenticate and list accounts before any mapping exists, so you can read the listing directly. Every row carries both identifiers:

GET /backstage/api/1.0/users/current/allowed-accounts

{
  "results": [
    {
      "id": 1234567,                          <- the number Realize shows you
      "name": "Demo Advertiser",
      "account_id": "taboola-demo-advertiser" <- the value Outloop needs
    }
  ]
}

Find the row whose id matches the number you noted in Realize, and take that row's account_id. That is the value the manual field expects.

4. Map the sub-account to the workspace

Open Taboola account on the workspace's key row and click Find my Taboola accounts. Outloop asks Taboola which accounts this credential may use, and pins the one you pick — in the API form, so there is nothing to translate.

Mapping a Taboola sub-account to an Outloop workspace, showing the Find my Taboola accounts picker, the accounts mapped to the workspace, and the bounded-account confirmation, with identifiers redacted.
Find my Taboola accounts pins the account in its API form. Typing an id by hand is the fallback, behind “Enter an account id instead”.

Prefer to type it? Open Enter an account id instead and paste the alphabetic account_id from step 3 — for example taboola-demo-advertiser. Several accounts are comma-separated.

Either way, confirm what the row then reports: “This workspace is bounded to Taboola account <account_id>.” It goes on to state the mechanism — the account is the first path segment of every Backstage request, so any other account is blocked with RESOURCE_ID_NOT_ALLOWED before any backend call. While a workspace is still unmapped, every account-scoped call is blocked with CUSTOMER_RESOURCE_PIN_REQUIRED instead.

Do not map a workspace to the agency network account. It can reach every client underneath it, so pinning a workspace there would hand that workspace the whole agency. Outloop refuses it — and it recognises the network account under both of its identifiers, so the guard cannot be sidestepped by using the number instead of the name.

5. Set the access level

Access: Full API access is the default and covers GET, POST, PUT, DELETE. Read-only is an explicit downgrade to GET.

The Destructive actions row on an Outloop Taboola key, reading Enabled, with a Disable destructive actions button and the mapped account redacted.
The Destructive actions row is separate from the access level — and for Taboola it reads Enabled straight after setup.
A newly connected Taboola grant has destructive actions ENABLED. DELETE is part of this connector's declared baseline, so the add flow writes it and the destructive-intent check finds nothing added. The Destructive actions (delete / archive) row will read Enabled immediately. If you do not want agents deleting campaigns, turning it off is a deliberate act you have to perform — an operator who assumes deletion starts off will be wrong.

Pausing a campaign is not destructive. The classifier treats paused, running, frozen, stopped and similar as ordinary changes, so day-to-day pause and resume never needs that switch. With it off, a delete is refused with DESTRUCTIVE_ACTION_BLOCKED.

The first safe proof

Taboola requires a passing access check before runtime, so run the proof rather than assuming the mapping is live. Start with a Grant Preflight, which answers from local policy with no provider call and no credential read — expect PREFLIGHT_OK plus the allowed methods and the resource pin.

Then the real proof — an account-scoped read against the mapped advertiser:

GET /backstage/api/1.0/<your-account_id>/campaigns/base?page=1&page_size=1

decision:        allow
code:            OK
http_status:     200
secret_exposed:  false
Taboola list endpoints need page and page_size together. One without the other is ignored.

The isolation property is proven by the negative case, which costs nothing to run — naming the agency network account:

GET /backstage/api/1.0/<the-agency-network-account>/campaigns/base

decision:        deny
code:            RESOURCE_ID_NOT_ALLOWED
detail:          taboola_network_account_requires_network_capability
secret_exposed:  false

That refusal happens before the credential is read and before Taboola is contacted. Network-wide reach is a separate explicit capability that is off, and it should stay off unless you deliberately want network-scoped operations.

One read that looks like a proof and is not. GET /backstage/api/1.0/users/current/account is useful — it confirms the credential works — but it reports the credential's own account, which on an agency credential is the network account. It does not validate your advertiser mapping. Only the account-scoped read above does that.
An Outloop Taboola Backstage key row after a passing check, showing Runtime verified via API bridge, the pinned backstage.taboola.com host, allowed methods GET POST PUT DELETE, and Secret exposed false.
After a passing check the key row reads Runtime verified · API bridge, and shows the bounded host, the allowed methods, and Secret exposed: false.
Account-scoped access: Live verified through Outloop Audited Secret-safe Workspace-scoped

Full API capabilities and write actions

Operational facts you will meet early

What is verified vs what is not claimed

Tested here: everything in the verified list above, run end to end on a live agency account on 2026-08-29 — a paused campaign created, renamed, read back and deleted, with the network account and a foreign advertiser refused before any credential was read, and secret_exposed: false throughout.

Not claimed:

Backstage through Outloop vs the Taboola Realize MCP

For this workspace, the Backstage API through Outloop is the only Taboola path that is live and verified right now.
Area Backstage through OutloopOfficial Taboola Realize MCP
Provenance The Taboola Backstage connector in Outloop, verified here at 1.25.0. An official Taboola MCP server for the Realize API, published by Taboola.
Authentication OAuth client credentials issued to your agency. No person signs in; Outloop mints the short-lived token host-side. A person signs in, and the tools run as that signed-in session.
Per-client scoping Each workspace is pinned to one advertiser. Any other account is refused before the credential is read. Reach follows whoever authenticated. There is no per-workspace advertiser boundary.
Credential handling Client secret stays in the macOS Keychain and is read host-side at request time. The agent never sees it. Not applicable here — no credential of yours is held by Outloop on this path.
Destructive actions A named switch on the key row. For this connector it ships enabled — see the setup steps. Governed by the MCP server and the signed-in account, not by Outloop.
Audit trail One redacted line per attempt: workspace, service, action class, the resource addressed, and the capability that authorized it. Not applicable here.
Status here Live verified through Outloop Real read, write and boundary proof, 2026-08-29. Official MCP exists Not connected here; not verified in this guide.
Official MCP exists Not connected here Not verified in this guide
Honesty note. This comparison is intentionally conservative. The official Taboola MCP exposes a broad campaign and reporting toolset, and breadth is a real advantage for exploratory work by a person. It is not connected in this workspace, so nothing in its column is marked verified. What is live and verified here is the Outloop API-bridge path, and its distinguishing property is not breadth — it is that one agency credential can serve many client workspaces while each stays bounded to its own advertiser. The general mechanism is covered in credential broker vs MCP authentication.

When something is refused

What keeps one client separate

Replacing the credential pair starts on Taboola's side: your account manager issues a new Client ID and Client Secret. You then use Rotate key on the Outloop key row to enter the new pair. The workspace mapping, the access level and the destructive-actions setting are untouched.

Stage honesty. Outloop is at controlled design-partner prep. This guide describes what was actually run and what the connector actually enforces — it makes no compliance or certification claim of any kind.

Official documentation

Outloop is available with guided onboarding for agency teams. Outloop is an independent tool and is not affiliated with or endorsed by Taboola. See the security model for how credentials are stored and used, or the other connector setup guides.

Summarize this setup guide with AI ChatGPTClaudePerplexity

One agency credential. The right client account, every time.

Run Taboola work across client workspaces without handing an agent the client secret.

Frequently Asked Questions

Taboola Backstage API + Outloop — FAQ