ChatGPT Ads Write
Update a campaign's daily budget, name, and/or status
POST https://api.adspirer.ai/api/v1/tools/update_chatgpt_campaign/execute
Authorization: Bearer sk_live_... — your Adspirer API key (required)Content-Type: application/json (required)Idempotency-Key: <uuid> — recommended for write operations to make retries safeAll tool arguments are wrapped in an arguments object.
| Field | Type | Description |
|---|---|---|
campaign_id | string required | Campaign ID |
daily_budget | number optional | New daily budget in the ACCOUNT'S currency (NOT USD/cents; for 25/day send 25). Min 25/day. |
name | string optional | New campaign name |
status | string optional | 'active' or 'paused' |
bidding_type | string optional | 'impressions', 'clicks', or 'conversions' (oCPC). |
conversion_event_setting_ids | array optional | Exactly one event setting id — required if switching to bidding_type='conversions'. |
location_query | string optional | Update targeting: a location to INCLUDE by name. Only the side you specify changes — the exclusion side is preserved (merged), so you can add an include without wiping an existing exclude. |
location_ids | array optional | Update targeting: explicit location IDs to INCLUDE (replaces the include side; exclude side preserved). |
exclude_location_query | string optional | Update targeting: a location to EXCLUDE by name (include side preserved). |
exclude_location_ids | array optional | Update targeting: explicit location IDs to EXCLUDE (include side preserved). |
custom_audience_ids | array optional | Update targeting: custom audience IDs to INCLUDE (only this side changes; geo/exclude/platform sides preserved). |
exclude_custom_audience_ids | array optional | Update targeting: custom audience IDs to EXCLUDE (other sides preserved). |
platforms | array optional | Update targeting: restrict to these ChatGPT surfaces (android_app/android_web/desktop_web/ios_app/ios_web/web); other targeting sides preserved. |
query_string_template | string optional | Update the landing-page URL query string (e.g. 'utm_source=chatgpt&utm_campaign={campaign_id}'). Macros {campaign_id}/{ad_group_id}/{ad_id}/{ad_account_id} auto-fill at delivery. |
clear_targeting | boolean optional | Set true to REMOVE ALL targeting (locations, audiences, platforms) so the campaign serves everywhere. Use this instead of sending empty lists. |
{
"arguments": {
"campaign_id": "<campaign_id>",
"daily_budget": 1.0,
"name": "string",
"status": "string",
"bidding_type": "string",
"conversion_event_setting_ids": [
"string"
],
"location_query": "string"
}
}
{
"success": true,
"data": {
"text": "(tool-specific textual output for update_chatgpt_campaign)",
"quota": {
"used": 42,
"limit": 150,
"tier": "plus",
"period_end": "2026-05-01"
}
},
"tool": "update_chatgpt_campaign"
}
{
"success": false,
"error": "You have 25 meta_ads accounts connected. Please specify which account to use by passing the ad_account_id parameter:\n - Acme Holdings (ad_account_id=\"act_123456789\")\n - Acme EU (ad_account_id=\"act_987654321\")",
"is_error": true,
"tool": "update_chatgpt_campaign"
}
{
"success": false,
"error": "\ud83d\udea8 Monthly limit reached (150/150 tool calls on Plus tier).\nUpgrade to Pro at https://adspirer.ai to keep building.",
"is_error": true,
"tool": "update_chatgpt_campaign",
"quota": {
"used": 150,
"limit": 150,
"tier": "plus",
"period_end": "2026-05-01",
"upgrade_url": "https://adspirer.ai"
}
}
Interactive: Swagger UI
Machine-readable: OpenAPI 3.1 spec · llms-full.txt
More tools: ChatGPT Ads · All tools
Adspirer REST API — get an API key at adspirer.ai/keys · adspirer.ai