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

# How can AI plan and run ads without unlimited permission to spend?

> How Apostra keeps a person in control when AI plans and runs ads: two-step launch, read-only grants, administrator-approved billing, daily budget caps and a no-spend sandbox.

With Apostra, connecting an AI assistant grants it no authority to spend, and
Apostra refuses to launch a campaign without a second, separate confirmation
call tied to the exact campaign revision that was previewed. Apostra enforces
that second call, not who makes it: the same agent can make both calls unless
your application or host puts a person in front of the second one. Billing changes
wait for an administrator to approve them on Apostra's own site. An agent's
access to an advertiser can be read-only. Where the seller supports it, a buy
can carry a daily budget cap, and a sandbox advertiser lets the assistant
rehearse a whole campaign without spending.

## What Apostra is, and what it is not

If you are looking for a single-platform ad optimiser that tunes one account's bids
and budgets on its own, Apostra is not that. Apostra is a cross-seller system. Your
assistant or application finds sellers, requests proposals, stages buys and reads
delivery through Apostra's tools, and Apostra applies the controls below around
those actions. It does not generate creative, and it does not host your agent:
your application or assistant runs the loop and decides who makes the launch
confirmation.

## Controls and their limits

| Control | What it does | Limit |
| - | - | - |
| Two-step launch | `save_campaign` with `desiredPhase: "active"` returns a preview of what would go live: each media buy, its seller, and the combined budget. A second call with `confirmLaunch: true` and the previewed `expectedRevision` launches it. The two calls use separate idempotency keys | Apostra requires the second call. Your application decides who is allowed to make it, so keep that call behind a person's approval |
| Read-only grants | An administrator grants an agent access to an advertiser as `READ` or `READ_WRITE`. A new agent has no advertisers until one is granted | Managing agents needs a person signed in directly as an administrator |
| Administrator approval for billing | A plan, payment terms, renewal or card setup returns `approval_required` with a link. Nothing changes until an administrator approves it on Apostra | Applies to billing changes. It does not review each media buy |
| Daily budget cap | A hard daily ceiling on a buy, or one line item. The seller stops delivery for the day once it is reached | Set when you create the buy, not on an existing one. The seller must declare support. Sellers connected through a platform adapter do not enforce it today |
| Pause or cancel | `save_media_buy` with `isPaused: true` pauses an active buy and `isPaused: false` resumes it. `isCanceled: true` cancels one buy, and cancelling a campaign cancels every live media buy in it | Seller confirmation is asynchronous, so a cancel can stay pending or fail. A campaign cancel is irreversible |
| Sandbox advertiser | Briefs and tests spend nothing and a seller is not charged for answering them | Platform sellers refuse sandbox buys. A sandbox run does not show that a real seller will accept the request |

## How a person stays in the loop

1. The assistant drafts a campaign. Drafting does not launch it.
2. It requests proposals or browses products, then stages a draft media buy.
3. It asks for the launch preview and shows you the buys, sellers and combined
   budget.
4. A person approves, if your application or host asks one to. Apostra does not
   check who makes the confirmation call. The confirmation names the revision that
   was previewed. If the campaign changes afterwards, a new preview and a new
   confirmation are needed.
5. If a launch fails, Apostra does not retry what only you can fix. For causes
   that may clear on their own, such as an unreachable seller, it retries up to
   five times and tells you when.

Apostra can see API calls, server-side model calls and Apostra-hosted turns. It
cannot see the token usage or model cost of an external client's own model, so
you keep that budget yourself.

## When not to use Apostra, or to add something else

* You need a spending ceiling enforced by the ad platform or your payment card.
  Apostra's controls apply per buy, per launch and per grant. Set platform and
  card limits as well where they exist.
* You need Apostra itself to guarantee that a person approved each launch. It
  requires a confirmation call, and the application you build decides who makes
  it, so human approval is enforced by your application or host, not by an
  Apostra server rule.
* You want a hard cap on an existing buy, or on a platform-connected seller.
  Neither is supported today.

## Next step

Connect an assistant and try a launch in a sandbox advertiser, which spends
nothing. In Claude or Cowork, follow
[Claude and Cowork setup](https://docs.apostra.com/v3/client-setup.md#claude-and-cowork). To build your own
approval checkpoint, follow [Build an agent](https://docs.apostra.com/v3/build-an-agent.md). To set an agent's
advertiser access, read [Manage buyer agents](https://docs.apostra.com/v3/buyer-agents.md).

## Sources

* [Build an agent](https://docs.apostra.com/v3/build-an-agent.md), [Capability limits](https://docs.apostra.com/v3/limitations.md) and
  [Launch a campaign with explicit confirmation](https://docs.apostra.com/v3/tool-reference.md#launch-a-campaign-with-explicit-confirmation).
* [Manage buyer agents](https://docs.apostra.com/v3/buyer-agents.md), [Plan & Billing](https://docs.apostra.com/v3/plan-and-billing.md) and
  [Cap a buy's daily spend](https://docs.apostra.com/v3/daily-budget-caps.md).
* [Account access](https://docs.apostra.com/v3/account-access.md#sandbox-advertisers-and-live-spend).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.