Create campaign optimization
Create a new campaign optimization. Required permission: write:analysis.
Top-level optional field (Google Ads only):
promotion_type(optional): Optimisation intent. Values:Product,Service,Brand(case-insensitive). Stored ascampaign.intent(lowercase). Ignored for TikTok.
Google Ads enrichment: On creation, Jarvis fetches live
metadata from Google Ads for each asset group and stores it in
campaign.asset_group_info (ad strength, status, search themes
count, campaign name). The client only needs to send
asset_group_info with name; the backend fills the rest.
Campaign Field Structure (campaign JSON)
The campaign field is a free-form JSON object whose structure depends on the platform.
Google Ads (PMax):
{
"customer_id": "1447066043/8965287694",
"asset_group_ids": ["6476435676", "6481074503"],
"intent": "product",
"asset_group_info": {
"6476435676": {
"name": "Animalerie",
"ad_strength": "POOR",
"ad_strength_score": 10,
"ad_strength_max": 25,
"search_themes_count": 0,
"campaign_name": "PMax: IKOM - Smart Shopping CSS",
"status": "ENABLED"
}
}
}
Fields:
customer_id(string): Google Ads customer ID, format"manager_id/account_id"or"account_id".asset_group_ids(string[]): Asset group IDs selected for optimization.intent(string, optional): Optimization intent (product,service,brand). Set frompromotion_type.asset_group_info(object): Mapping of asset group ID to metadata. Enriched with live Google Ads data at creation:name(string): Asset group name.ad_strength(string): Google Ads enum —EXCELLENT,GOOD,AVERAGE,POOR,PENDING,UNKNOWN,UNSPECIFIED,NO_ADS.ad_strength_score(int): Numeric score — EXCELLENT=25, GOOD=20, AVERAGE=15, POOR=10, all others=0.ad_strength_max(int): Always 25 (max possible score).search_themes_count(int): Number of search theme signals currently on the asset group in Google Ads.campaign_name(string): Parent PMax campaign name.status(string): Asset group status —ENABLED,PAUSED,REMOVED, etc.
Use POST .../refresh to re-fetch asset_group_info from Google Ads without re-running the optimization pipeline.
TikTok:
{
"advertiser_id": "7052316759499587586",
"campaign_id": "1850667377518002",
"ad_group_ids": ["1850939823278113", "1850667437045906"],
"ad_group_names": {
"1850939823278113": "Ad Group Name 1",
"1850667437045906": "Ad Group Name 2"
}
}
Fields:
advertiser_id(string): TikTok advertiser account ID.campaign_id(string): TikTok campaign ID.ad_group_ids(string[]): Ad group IDs to optimize (non-empty).ad_group_names(object, optional): Mapping of ad group ID to ad group name. Supply this at creation time so the activation page can display names without making additional TikTok API calls.
TikTok campaign objects do not include asset_group_info or enrichment fields.
Authorizations
Query Parameters
csv, json Body
google_ads- google adstiktok- tiktok
google_ads, tiktok ar- arda- dade- deen- enes- eseu- eufi- fifil- filfr- frhe- hehi- hihu- huid- idit- itja- jako- konl- nlpl- plpt- ptro- rosv- svth- thtr- trur- urvi- vizh- zhzh-TW- zh TW
ar, da, de, en, es, eu, fi, fil, fr, he, hi, hu, id, it, ja, ko, nl, pl, pt, ro, sv, th, tr, ur, vi, zh, zh-TW Optimisation intent. Only used for Google Ads (PMax); ignored for other platforms. Allowed values: Product, Service, Brand. Stored as campaign.intent (lowercase).
Product- ProductService- ServiceBrand- Brand
Product, Service, Brand, null Response
The created campaign optimization.
google_ads- google adstiktok- tiktok
google_ads, tiktok 255pending- pendingin_progress- in progresscompleted- completedfailed- failedsuggestions_applied- suggestions applied
pending, in_progress, completed, failed, suggestions_applied ar- arda- dade- deen- enes- eseu- eufi- fifil- filfr- frhe- hehi- hihu- huid- idit- itja- jako- konl- nlpl- plpt- ptro- rosv- svth- thtr- trur- urvi- vizh- zhzh-TW- zh TW
ar, da, de, en, es, eu, fi, fil, fr, he, hi, hu, id, it, ja, ko, nl, pl, pt, ro, sv, th, tr, ur, vi, zh, zh-TW,