The first decisions are final
The bidding type cannot be changed after a campaign is created, and archiving cannot be undone. A wrong first click costs a whole new campaign, not an edit.
Valkiria connects a ChatGPT Ads account with an API key from ads.openai.com, reads campaigns, ad groups, ads and Insights performance, and builds new campaigns as a chain. Everything lands paused: launching and archiving both go through an explicit spend confirmation.
The bidding type cannot be changed after a campaign is created, and archiving cannot be undone. A wrong first click costs a whole new campaign, not an edit.
The API carries budgets in micros: one extra zero turns 10 into 10,000,000. Inside a plain Ads Manager form that typo is nearly impossible to spot.
OpenAI issues a separate Bearer key for every ad account. The keys scatter across chats and spreadsheets, and nobody remembers which one belongs to which client.
The client creates an API key in ads.openai.com → Settings. Valkiria verifies it against the ad account and stores it encrypted: one key, one account.
Campaigns, ad groups, ads and daily impressions, clicks, spend and conversions from Insights land in the shared tables, with micros converted to plain money.
Campaign → ad group → ad are created paused. The server accepts a launch or an archive only with an explicit spend confirmation attached.
No application waiting on approval and no redirect URI: the client hands over the key from their account and the channel runs the same day.
It is never shown in the interface and never reused between accounts — one key is bound to exactly one advertiser account.
Campaign, ad group and ad are built in sequence, and every object appears paused, waiting for a person.
Activating starts spending and archiving is irreversible, so both require an explicit spend confirmation — without it the server refuses the request.
Validation mode runs every check without touching the provider: minimum budget, bidding type, and the length limits on the ad title and body.
Server-side events carry the same event id as the OAIQ pixel, so one conversion is never counted twice.
Spend and results use the same metrics as Meta, Google and TikTok, so the new channel is readable on day one.
No. Unlike Meta or Google, OpenAI does not use OAuth for its advertising API: each ad account issues its own Bearer key. There is no app to submit and no redirect URI — the client's key is enough, and Valkiria verifies it directly against the API before storing it.
In the ad account at ads.openai.com, under Settings. The account owner creates it and it works only for that account. With several clients you will have several keys — each is connected in Valkiria separately and stored encrypted.
No. Everything it creates lands paused, and the server accepts an activation only with an explicit spend confirmation. In the interface that is a separate dialog naming the campaign and its budget, so a stray click in a table never starts delivery.
The OpenAI advertising API carries every monetary value in micros: one million micros equals one unit of the account currency. Valkiria converts them on the way in and out, so you work with normal amounts and a stray zero never becomes a million-unit budget.
No, the provider does not allow the bidding type to change after creation. The decision is therefore made once, before anything is sent, and Valkiria checks it up front. If a campaign should optimise for conversions, the conversion event settings must exist before the campaign is created, not after.
No — on the provider side archiving is irreversible. That is why it sits behind the same confirmation as a launch: the server refuses the request without an explicit operator approval. Archived campaigns show no buttons that would only produce errors.
All you need is the key from your client's account. Connecting takes a minute, and everything created stays paused until you confirm the spend.