What Is the ChatGPT Ads API in 2026?
The ChatGPT Ads API, which OpenAI calls the Advertiser API, is the programmatic interface for creating and managing ads that appear inside ChatGPT. It handles campaigns, ad groups, ads, product feeds, conversion tracking and reporting. Requests go to https://api.ads.openai.com with a bearer token, and you create that key in the Settings page of Ads Manager at ads.openai.com.
This is a full ad platform rather than a placement you buy through someone else. It has objectives, bid strategies, budget types, geographic and platform targeting, audience inclusion and exclusion, creative review, spend limits, audit logs and an insights endpoint. If you buy media for a living, the useful question is not whether it works but which decisions it leaves you and which it takes away. This guide answers that, using only OpenAI's own documentation.
How Is a ChatGPT Ads Account Structured in 2026?
Four levels, each owning different settings. An ad account contains campaigns, each campaign contains ad groups, and each ad group contains ads. OpenAI's guidance is to configure each setting at the level that owns it, use separate campaigns when you need separate budgets, objectives or targeting, and use ad groups for different bid configurations, context hints or product sets.
Ad account
└── Campaign
└── Ad group
└── Ad
| Level | What you configure here | What this means for a media buyer |
|---|---|---|
| Ad account | Advertiser branding, currency, timezone, account access, spend limits | Currency and timezone are creation-time choices and cannot be edited later. |
| Campaign | Objective, budget, schedule, geographic and platform targeting, audience inclusion and exclusion, conversion events | Targeting lives here, not on the ad group. One budget is shared across all its ad groups. |
| Ad group | Bid strategy, context hints, audience bid multipliers, product set | This is your bidding and relevance layer. |
| Ad | Creative, image or product template, destination URL | An ad cannot be moved to another ad group after creation. |
One structural constraint is worth planning around in 2026: targeting is a campaign-level setting. If you want two different geographies or two different audience definitions, that is two campaigns, and therefore two budgets. Teams used to building one campaign with many differently-targeted ad sets will need to restructure.
What Campaign Objectives Does ChatGPT Ads Support in 2026?
Three objectives, set as bidding_type on the campaign: impressions, clicks and conversions. The objective determines what delivery optimises for. A separate setting on the ad group, billing_event_type, determines what you actually pay for. Those two are not the same field and not always the same thing, which is the single most useful mechanic to understand before you build anything.
| Objective | Best for | How you pay | What delivery optimises for |
|---|---|---|---|
impressions (CPM) | Reach and awareness | Per 1,000 impressions | Broad delivery at scale |
clicks (CPC) | Engagement and traffic | Per valid click | Clicks from people likely to engage |
conversions (oCPC) | A tracked action after a click | Per valid click, not per conversion | Clicks more likely to lead to your selected conversion event |
The third row is the unusual one. A conversions campaign optimises toward a conversion event but bills on valid clicks, so the bid you set is a CPA bid used as an optimisation input rather than a price you pay per conversion. We cover that billing shape separately in the conversion-optimised campaigns guide.
How Do Bid Strategies Work in ChatGPT Ads in 2026?
Three strategies, set as bidding_config.strategy on the ad group. fixed_bid means you supply the bid. maximize_clicks and maximize_conversions let OpenAI adjust bids within your daily budget, and OpenAI brands those two jointly as Maximize Results. The documentation states both are available for standard and product-feed campaigns.
| Strategy | Use when | Compatible objectives | Budget | Bid amount |
|---|---|---|---|---|
fixed_bid | You want to set and adjust the bid yourself | Impressions, clicks, conversions | Daily or lifetime | Provide max_bid_micros |
maximize_clicks | You want OpenAI to seek more clicks from your budget | Clicks | Daily only | Omit max_bid_micros |
maximize_conversions | You want OpenAI to seek more conversions from your budget | Conversions | Daily only | Omit max_bid_micros |
Only five combinations of objective, billing event and strategy are valid, and the documentation lists them explicitly. Memorise this table and most of your 400-level errors disappear.
Campaign bidding_type | Ad group billing_event_type | Ad group strategy |
|---|---|---|
impressions | impression | fixed_bid |
clicks | click | fixed_bid |
clicks | click | maximize_clicks |
conversions | click | fixed_bid |
conversions | click | maximize_conversions |
The Maximize Results prerequisites people miss
- Daily budget required. Maximize Results does not work with a lifetime budget.
- Click billing required. Both strategies use
billing_event_type: "click". - Omit the bid. Sending
max_bid_microswith a Maximize strategy is a configuration error. - No audience bid multipliers. Those work only with
fixed_bid. - An
Idempotency-Keyis required when creating a Maximize Results ad group. It is optional elsewhere on create endpoints and mandatory here. - For conversions, the campaign needs exactly one active standard conversion event setting.
How Do Budgets and Micros Work in 2026?
Budgets sit on the campaign and are expressed in micros, where one million micros equals one major unit of the account currency. You provide exactly one budget field: either daily_spend_limit_micros or lifetime_spend_limit_micros. A campaign cannot have both. Daily minimums depend on the account currency, and a request below the minimum returns an error stating the required amount.
| Amount in a USD account | Value to send |
|---|---|
| 1.00 USD | 1000000 |
| 2.50 USD | 2500000 |
| 50.00 USD | 50000000 |
| 500.00 USD lifetime | 500000000 |
Two behaviours matter operationally. A budget update sets the new amount rather than adding to the old one, so sending 75000000 makes the daily budget 75 USD and does not add 75 USD. And you cannot reduce a lifetime budget below what the campaign has already spent.
The budget switch that only works one way
You can switch a lifetime-budget campaign to a daily budget through a campaign update. You cannot switch a daily budget back to lifetime; OpenAI's documentation says to create a new campaign if you need a lifetime budget instead. That matters because Maximize Results requires a daily budget, so moving a lifetime campaign onto automated bidding is a one-way door for that campaign.
How Do You Set a Bid Correctly, Including CPM?
max_bid_micros uses the same micros scaling as budgets, so a 2.50 USD click bid is 2500000. Impression bidding is where teams get this wrong. The API expects a bid per impression, not per thousand impressions. OpenAI's own worked example: a 60 USD CPM is 0.06 USD per impression, so you send 60000 micros, calculated as 60 divided by 1,000 multiplied by 1,000,000.
Getting this backwards by a factor of 1,000 in either direction is the most expensive arithmetic error available on this platform in 2026, so it is worth a second pair of eyes on the first impressions campaign you build.
OpenAI's documentation states that new resources are created paused so you can finish setup before enabling delivery. Nothing you create through the API starts spending on its own. Activation is a separate, explicit call on each level, and you activate from the bottom up: the ad, then the ad group, then the campaign.
How Do You Launch a First Campaign Through the API in 2026?
Five creates and three activations. The sequence below follows OpenAI's own quickstart: a paused clicks campaign with a fixed bid, then an ad group, then an uploaded image, then a chat-card ad, then preview and activate. Budget and bid values in the documentation are illustrative USD amounts.
1. Create the campaign
curl -X POST "https://api.ads.openai.com/v1/campaigns" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" -H "Idempotency-Key: first-campaign-001" -H "Content-Type: application/json" -d '{
"name": "Spring launch",
"status": "paused",
"bidding_type": "clicks",
"budget": { "daily_spend_limit_micros": 50000000 },
"targeting": { "locations": { "countries": ["US"] } }
}'
2. Create the ad group with a bid and context hints
curl -X POST "https://api.ads.openai.com/v1/ad_groups" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" -H "Idempotency-Key: first-ad-group-001" -H "Content-Type: application/json" -d '{
"campaign_id": "cmpn_123",
"name": "Trail running",
"status": "paused",
"context_hints": ["Trail running shoes for rocky terrain"],
"bidding_config": {
"billing_event_type": "click",
"strategy": "fixed_bid",
"max_bid_micros": 2000000
}
}'
3. Upload the creative image
curl -X POST "https://api.ads.openai.com/v1/upload" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" -F "file=@/path/to/product-image.png"
Use JPEG, PNG or WebP at a minimum of 640 by 640 pixels, and save the returned file_id.
4. Create the ad
curl -X POST "https://api.ads.openai.com/v1/ads" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" -H "Idempotency-Key: first-ad-001" -H "Content-Type: application/json" -d '{
"ad_group_id": "adgrp_123",
"name": "Trail shoe launch",
"status": "paused",
"creative": {
"type": "chat_card",
"title": "Find your next trail shoe",
"body": "Explore shoes made for your next outdoor run.",
"target_url": "https://example.com/trail-shoes",
"file_id": "file_123"
}
}'
Creating an ad submits its creative for review. Titles run 3 to 50 characters, bodies up to 100 characters, and the destination must be an HTTP or HTTPS URL no longer than 2,048 characters that is accessible to OpenAI's ad crawlers.
5. Preview, inspect, then activate bottom-up
curl -X POST "https://api.ads.openai.com/v1/ads/ad_123/preview" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}"
curl -X POST "https://api.ads.openai.com/v1/ads/ad_123/activate" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}"
curl -X POST "https://api.ads.openai.com/v1/ad_groups/adgrp_123/activate" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}"
curl -X POST "https://api.ads.openai.com/v1/campaigns/cmpn_123/activate" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}"
OpenAI is explicit that a preview shows appearance and does not confirm serving eligibility, and that activation enables delivery only when the remaining requirements are satisfied.
What Cannot You Change After Creation in 2026?
More than on most ad platforms, and this is the section worth reading before you build a naming convention. OpenAI documents several settings as fixed at creation, which means your structure has to anticipate them rather than correct them later.
| Setting | Changeable? | What to do instead |
|---|---|---|
Campaign objective (bidding_type) | No | Create a new campaign. |
| Selected conversion event on an oCPC campaign | No | Create a new campaign. |
| Daily budget back to lifetime | No | Create a new campaign. |
| Moving an ad to a different ad group | No | Create the ad in the target ad group. |
| Account currency and timezone | No | Set correctly at account creation. |
| Bid strategy within the same objective | Yes | Update bidding_config, respecting the budget rules. |
| Creative | Yes | Updating it creates a new submitted version and starts another review. |
How Do You Diagnose a Campaign That Is Not Delivering?
Two include parameters do most of the work. Request bid_too_low and serving_issues on the ad group, and serving_issues on the campaign. OpenAI is careful about what the first one means: bid_too_low: true indicates the bid may be too low for reliable delivery, and it is guidance rather than a serving restriction.
curl -G "https://api.ads.openai.com/v1/ad_groups/adgrp_123" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" --data-urlencode 'include[]=bid_too_low' --data-urlencode 'include[]=serving_issues'
Work through the layers in order, because each one can independently stop delivery: account status and account reviews, the account spend limit, the campaign budget and schedule, campaign targeting, the ad group bid, ad review status, and for product-feed campaigns whether any products match your filters. OpenAI states plainly that campaign budgets and account spend limits apply independently, so raising a campaign budget does not override an exhausted account limit. The account management guide covers that layer.
What Are the Rate Limits and Account Limits in 2026?
The Advertiser API enforces limits by both ad account and IP address, and a request has to stay within both. Bulk job creation has its own separate limit, covered in the Bulk API guide.
| Limit | Value |
|---|---|
| Per endpoint | 600 requests per minute |
| Overall | 1,200 requests per minute |
| Bulk job creation | 10 requests per 10 seconds per ad account |
| Self-serve campaigns per ad account | 5,000 non-archived |
| Self-serve ad groups per ad account | 5,000 non-archived |
| Self-serve ads per ad account | 5,000 active or paused |
| Location IDs per campaign | 2,500 |
| Context hints per ad group | 2,000 |
How Do You Add Tracking Parameters to ChatGPT Ads?
Through landing_page_configuration.query_string_template, which can be set at campaign, ad group or ad level. The template supports macros, and the one that matters for stitching platform data to your own analytics is {oppref}, the click identifier.
{
"landing_page_configuration": {
"query_string_template": "utm_source=openai&utm_campaign={campaign_id}&utm_content={ad_id}&click_id={oppref}"
}
}
Capture oppref on your landing page and pass it back on server-side conversions, because the Conversions API does not capture it automatically. That mechanic is the backbone of attribution on this platform and is covered in the Measurement Pixel and Conversions API guide.
How Should You Read ChatGPT Ads Reporting in 2026?
Through the Insights endpoints, and with patience about which numbers have settled. OpenAI documents three different processing speeds, and conflating them produces the classic false alarm on day one of a campaign.
| Metrics | Freshness | Reporting history available |
|---|---|---|
| Impressions, clicks, CTR | Can appear within minutes; recent values may change | Hourly: about 30 days |
| Spend, CPC, CPM | Reflect finalised activity and can update later | Non-hourly, excluding product: most recent 365 days |
| Conversions and purchase outcomes | Daily processing; allow at least one day to appear | Product reporting: about 30 days |
Two reading notes from the documentation. CTR is returned as a ratio, so 0.04 means 4 percent. And a null metric means unavailable or not calculable, not zero, which matters for ROAS when purchase value is missing or spend is zero. Because recent clicks can arrive before finalised spend, dividing the latest spend by the latest clicks can disagree with the returned CPC.
What Has Changed in the ChatGPT Ads API During 2026?
OpenAI publishes a changelog, and the cadence tells you how young this platform is. The initial version was published as v1, and the documented 2026 additions run through the year.
- 10 September 2026: granular web platform targeting with
desktop_web,ios_webandandroid_web. - 9 September 2026: daily account spending limits for accounts on postpaid invoice billing.
- 25 August 2026: custom audience Add, Remove, Replace and Merge operations, automatic identifier matching, and support for small and empty exclusion-only audiences.
- 16 July 2026: support for passing the Pixel browser reference as
events[].user.obrefin Conversions API requests. - 16 June 2026: conversion-optimised campaign bidding with
bidding_type: "conversions". - 11 June 2026: segmented insights for product, country and device breakdowns.
- 3 June 2026: location targeting including
/geo_lookup/search, plus conversion setup and reporting endpoints.
Practical consequence for an agency in 2026: pin nothing to a capability you have not re-checked this quarter, and read the changelog before you conclude a feature does not exist.
What Are the Common Mistakes With the ChatGPT Ads API in 2026?
- Sending a CPM bid per thousand instead of per impression. A 60 USD CPM is
60000micros, not 60000000. - Pairing Maximize Results with a lifetime budget. It requires a daily budget, and the switch back to lifetime is not available.
- Forgetting the mandatory
Idempotency-Keywhen creating a Maximize Results ad group. - Sending a partial targeting update. Geographic and audience updates can replace existing criteria, so retrieve the campaign and send the complete intended configuration.
- Assuming a budget update adds to the old budget. It replaces it.
- Treating activation as delivery. Account reviews, spend limits, creative review and targeting can each independently block serving.
- Judging a campaign on day-one conversion data. Conversions update through daily processing, so allow at least a day.
- Planning one campaign with several differently-targeted ad groups. Targeting is a campaign-level setting on this platform.
Key Takeaways for 2026
ChatGPT Ads in 2026 is a real auction platform with its own structural logic, and most of the early mistakes come from carrying Meta or Google habits across unchanged.
- Base URL
https://api.ads.openai.com, bearer auth, keys created in Ads Manager Settings, and one key per ad account. - Four levels: account, campaign, ad group, ad. Targeting sits on the campaign, bidding on the ad group.
- Three objectives and three bid strategies, but only five valid combinations of objective, billing event and strategy.
- Maximize Results needs a daily budget, click billing, no explicit bid, no audience multipliers and a mandatory idempotency key.
- Budgets and bids are in micros; impression bids are per impression, not per thousand.
- Everything is created paused, and you activate from the ad upward.
- Objective, oCPC event, daily-to-lifetime budget and an ad's parent ad group are all fixed after creation.
- Rate limits are 600 per endpoint and 1,200 overall per minute, enforced by both account and IP.
- Conversion reporting needs at least a day, and CTR comes back as a ratio.
Distk builds and runs paid media for growth teams across India and internationally, including the measurement layer that makes a new channel readable rather than a guess. If you are evaluating ChatGPT Ads in 2026, the sensible first step is a small structured test with tracking verified end to end before any budget scales, and that is the piece we would set up with you.
Sources
- OpenAI, Ads API Overview, including campaign structure, first campaign, rate limits and changelog.
- OpenAI, Bidding and Budgets.
- OpenAI, Campaign Management, including creative limits and tracking parameters.
- OpenAI, Reporting, including metric definitions, data freshness and retention.
- OpenAI, Ads documentation index.
Every endpoint, field, limit and default in this guide is quoted from OpenAI's published Ads documentation as of 30 September 2026. Platform capabilities change; check the changelog before relying on any specific behaviour.