If an agent can fire the Meta Marketing API with no meter, you will wake up to a thousand ACTIVE ads. So the Effect, for machines, is a paid mailbox — not an open Graph token.
The mailbox lives on the same rail we already use for Liechtenstein legal packs: digihub-x402. Humans still pay Stripe Link when they incorporate. Agents pay USDC on Base (x402). Mock headers exist for smoke tests. They are not a charge.
Three tools, three rights
GET /v1/roas/effect → free. State + which act_ is sandbox. POST /v1/roas/effect/propose → 1 USDC (or X-MOCK-PAYMENT). Draft only. POST /v1/roas/effect/approve → operator header. Creates the ad PAUSED.
No activate in v0. AdManager.create in our stack already defaults to PAUSED. That is the demo you can see with your eyes in Ads Manager: filter [EFFECT], status paused, name v01.
The only test that counts
Propose → queue → approve → the creative is sitting in the named ROAS Capital (sandbox) ad account. If it lands in a leftover default act_, the routing table is wrong and we do not ship. Account slugs are explicit: sandbox first, brand child later, Fabrik [DIGIHUB] Brand after that.
Why pay per cycle
A week of v1→v40 is forty proposes. At a dollar of USDC each, the factory has a receipt of which intelligence improved which spawn. That is GDP for growth: not vanity impressions, paid mutations with a kill rule. Skin-in-game without giving an agent the keys to spend.
Spec for crawlers: effect.json. Until Graph is wired to a sandbox act_, approve may record a demo ad id — labelled as such. Seeing a live PAUSED ad in Ads Manager is the gate from POC to production.