API partners can use the Ads API to configure measurement and campaign resources for client accounts. Use the API key associated with the client ad account for every request in this guide.
Before you begin
You need:
- An Ads API key for the client ad account.
- Access to the client’s website and brand assets.
- A server-side secret manager for the Ads API key and any Conversions API keys you create.
Send requests to https://api.ads.openai.com/v1. Store the account’s Ads API
key in OPENAI_ADS_API_KEY for the examples in this guide.
Brand updates, pixel management, and Conversions API key creation must be
enabled for the client account. If a brand update returns 403, or
/conversions/pixels or /conversions/api_keys returns 404 with Not found,
contact your OpenAI partner representative. A Client data source not found
response means an event setting references a source that does not exist in the
current ad account.
1. Confirm account access
Use GET /ad_account to verify that the key is associated with the intended
client account:
curl -X GET "https://api.ads.openai.com/v1/ad_account" \
-H "Authorization: Bearer $OPENAI_ADS_API_KEY"
{
"id": "adacct_123",
"name": "Acme Ads",
"url": "https://www.acme.example",
"preview_url": null,
"status": "active",
"timezone": "America/New_York",
"currency_code": "USD",
"review": {
"status": "approved"
}
}
Check the account name, URL, time zone, and currency before you create campaign resources. Contact your OpenAI partner representative if the account details or API access are incorrect.
2. Add a brand favicon
An account cannot serve ads until its brand review is approved. If
review.reason is missing_favicon, upload and assign a favicon before you
create active campaign resources.
First, upload an image with purpose set to account_favicon. The image must be
at least 128 × 128 pixels. You can pass the client’s website URL and let the API
resolve a suitable icon:
curl -X POST "https://api.ads.openai.com/v1/upload" \
-H "Authorization: Bearer $OPENAI_ADS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://www.acme.example",
"purpose": "account_favicon"
}'
Save the returned file_id, then assign it to the account:
curl -X POST "https://api.ads.openai.com/v1/ad_account/brand" \
-H "Authorization: Bearer $OPENAI_ADS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"favicon_file_id": "file_123"
}'
The brand update starts a review. Poll GET /ad_account until review.status
is approved. If the status is rejected, use review.reason to correct the
brand metadata before you activate a campaign.
3. Configure conversions
Create conversion resources before you instrument the client’s site.
First, create a web pixel:
curl -X POST "https://api.ads.openai.com/v1/conversions/pixels" \
-H "Authorization: Bearer $OPENAI_ADS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme website",
"client_type": "web"
}'
Save both returned identifiers. Use id when you create an event setting and
use pixel_id when you send conversion events.
{
"id": "clidsrc_123",
"client_type": "web",
"name": "Acme website",
"pixel_id": "134534..."
}
Next, create a server-side Conversions API key:
curl -X POST "https://api.ads.openai.com/v1/conversions/api_keys" \
-H "Authorization: Bearer $OPENAI_ADS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme production conversions"
}'
Store the returned api_key in a server-side secret manager. Use this key only
to send conversion events; do not expose it in browser code.
Finally, define the conversion event you want to measure or optimize for:
curl -X POST "https://api.ads.openai.com/v1/conversions/event_settings" \
-H "Authorization: Bearer $OPENAI_ADS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Purchases",
"event_type": "order_created",
"attribution_window_days": 30,
"source_ids": ["clidsrc_123"]
}'
Save the returned event setting id. For endpoint fields and responses, see
Conversion setup. To implement event
delivery, use the JavaScript Pixel, the
Conversions API, or both with shared event IDs for
deduplication.
4. Create campaigns and ads
Follow the Ads API quickstart to create a campaign, ad
group, creative asset, and ad in the correct order. For partner setup, create
the campaign as paused instead of active, then activate it after all child
resources are ready.
Create campaigns as paused while you add and validate their ad groups and ads.
Activate the campaign only after all child resources are ready.