@zernio/node 0.2.1518 → 0.2.1520

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -55345,7 +55345,10 @@ type CreateAdSetData = {
55345
55345
  * Reddit only. ISO 8601 end of the ad group. Defaults to the campaign end.
55346
55346
  */
55347
55347
  endDate?: string;
55348
- targeting?: TargetingSpec;
55348
+ /**
55349
+ * Reddit: the full targeting object. Google: locations and languages only, on a Demand Gen campaign.
55350
+ */
55351
+ targeting?: (TargetingSpec);
55349
55352
  /**
55350
55353
  * Reddit only. The pixel and the conversion event the ad group optimizes toward.
55351
55354
  */
@@ -61936,7 +61939,7 @@ type CreateStandaloneAdData = {
61936
61939
  * - `app_promotion`: requires `promotedObject.applicationId` and `promotedObject.objectStoreUrl`.
61937
61940
  * - `catalog_sales`: Advantage+ catalog ads (e.g. vehicle inventory). Requires `promotedObject.productSetId`, `promotedObject.pixelId` and `promotedObject.customEventType`. Builds a catalog TEMPLATE creative from the copy fields, which may carry template tags like {{product.name}} or {{vehicle.make}}.
61938
61941
  * - `catalog_sales` visuals: no imageUrl or video is sent; Meta renders them per catalog item (an imageUrl or video sent is ignored, not uploaded). Find catalogs via GET /v1/ads/catalogs and product sets via GET /v1/ads/catalogs/{catalogId}/product-sets.
61939
- * - `catalog_sales` shape: single shape only, no creatives[], dynamicCreative, placementAssets, existingCreativeId or carouselCards. Works with `existingCampaignId`, and with `adSetId` to add to an existing ad set (then only `promotedObject.productSetId` is required). Pick the format with `catalogFormat`.
61942
+ * - `catalog_sales` shape: single shape only, no creatives[], dynamicCreative, placementAssets, existingCreativeId or carouselCards. Works with `existingCampaignId`, and with `adSetId` to add to an existing ad set (then only `promotedObject.productSetId` is required). Pick the format with `catalogFormat`, and open the carousel with `catalogIntroCards`.
61940
61943
  * - `traffic` with `promotedObject.productSetId`: a catalog ad without a pixel (OUTCOME_TRAFFIC, `optimizationGoal` LINK_CLICKS by default or LANDING_PAGE_VIEWS). The product set goes on the template creative only, never the ad set's promoted_object. No `pixelId` or `customEventType` needed. Same creative rules as `catalog_sales`.
61941
61944
  * - `page_likes`: Page Likes under OUTCOME_ENGAGEMENT (destination_type ON_PAGE, optimization PAGE_LIKES). `promotedObject.pageId` is optional and auto-filled. The CTA is fixed to LIKE_PAGE for that Page; headline / body / linkUrl / callToAction / imageUrl / video are all optional (Meta derives them from the Page).
61942
61945
  * - `page_visits`: "Page visits and followers" under OUTCOME_TRAFFIC (destination_type FACEBOOK_PAGE, optimization PROFILE_VISIT). `promotedObject.pageId` is optional and auto-filled; `linkUrl` defaults to the Page. Accounts Meta has not enabled are refused with "This account isn't eligible to use Profile Visit ads yet".
@@ -62042,6 +62045,34 @@ type CreateStandaloneAdData = {
62042
62045
  *
62043
62046
  */
62044
62047
  catalogFormat?: 'single_image' | 'carousel_images_multi_items' | 'carousel_images_single_item' | 'carousel_slideshows';
62048
+ /**
62049
+ * Meta only. Static cards shown before the catalog products in a catalog carousel, for example a brand or offer slide. Valid only with goal `catalog_sales` and `catalogFormat` omitted or `carousel_images_multi_items`; a 400 otherwise.
62050
+ *
62051
+ * Sent in order as `object_story_spec.template_data.child_attachments` with `static_card: true`, followed by one catalog card built from the top-level `headline`, `description` and `callToAction`.
62052
+ *
62053
+ */
62054
+ catalogIntroCards?: Array<{
62055
+ /**
62056
+ * Card image; uploaded to the ad account and referenced by hash.
62057
+ */
62058
+ imageUrl: string;
62059
+ /**
62060
+ * Card headline. Meta does not show it on Instagram.
62061
+ */
62062
+ headline: string;
62063
+ /**
62064
+ * Card description. Meta does not show it on Instagram.
62065
+ */
62066
+ description?: string;
62067
+ /**
62068
+ * Card destination URL. Defaults to the top-level linkUrl.
62069
+ */
62070
+ linkUrl?: string;
62071
+ /**
62072
+ * Card CTA override. Defaults to the top-level callToAction; same enum.
62073
+ */
62074
+ callToAction?: string;
62075
+ }>;
62045
62076
  /**
62046
62077
  * Meta only. Multi-advertiser ads: whether Meta may show this ad alongside other advertisers' in one unit. Meta auto-enrols since Aug 2024, so send OPT_OUT to leave. It is a top-level creative field, NOT a `creativeFeatures` key, and Meta rejects it there.
62047
62078
  */
@@ -62160,12 +62191,14 @@ type CreateStandaloneAdData = {
62160
62191
  /**
62161
62192
  * Meta only. Where the budget lives, which selects the Meta budget model:
62162
62193
  *
62163
- * - `adset` (default): ABO (Ad-set Budget Optimization). The budget is set on the ad set. Back-compatible; omit this field to keep it.
62194
+ * - `adset` (used when omitted): ABO (Ad-set Budget Optimization). The budget is set on the ad set.
62164
62195
  * - `campaign`: CBO (Campaign Budget Optimization / Advantage Campaign Budget). The budget AND `bidStrategy` are set on the CAMPAIGN, and Meta distributes spend across ad sets automatically.
62165
62196
  *
62166
62197
  * The returned ad stores the applied `budgetLevel`, and the budget in `campaignBudget` (CBO) or `adSetBudget` (ABO). Edit CBO budgets with `PUT /v1/ads/campaigns/{campaignId}` and ABO budgets with `PUT /v1/ads/ad-sets/{adSetId}`.
62167
62198
  *
62168
- * Meta requires the budget at exactly one level, never both. Non-Meta platforms ignore this field. Ignored on the attach shape (`adSetId`), which inherits the existing budget.
62199
+ * Meta requires the budget at exactly one level, never both. Ignored on the Meta attach shape (`adSetId`), which inherits the existing budget.
62200
+ *
62201
+ * Google Demand Gen also reads it. A new Demand Gen campaign accepts only `campaign` or no value. With `existingCampaignId` or `adSetId`, omit it: the budget stays on the existing campaign. Other platforms ignore it.
62169
62202
  *
62170
62203
  */
62171
62204
  budgetLevel?: 'adset' | 'campaign';
@@ -62924,7 +62957,7 @@ type CreateStandaloneAdData = {
62924
62957
  */
62925
62958
  audienceId?: string;
62926
62959
  /**
62927
- * Google only. Performance Max requires assetGroup and Demand Gen requires demandGen; both are always created PAUSED. With `adSetId` it defaults to the ad group's own campaign type instead of display.
62960
+ * Google only. Omitted, it is display on a new campaign, and the existing campaign's own type with `existingCampaignId` or `adSetId` (Search, Display or Demand Gen; other types return 422). Performance Max requires assetGroup and Demand Gen requires demandGen; both are always created PAUSED.
62928
62961
  */
62929
62962
  campaignType?: 'display' | 'search' | 'pmax' | 'demand_gen';
62930
62963
  /**
package/dist/index.d.ts CHANGED
@@ -55345,7 +55345,10 @@ type CreateAdSetData = {
55345
55345
  * Reddit only. ISO 8601 end of the ad group. Defaults to the campaign end.
55346
55346
  */
55347
55347
  endDate?: string;
55348
- targeting?: TargetingSpec;
55348
+ /**
55349
+ * Reddit: the full targeting object. Google: locations and languages only, on a Demand Gen campaign.
55350
+ */
55351
+ targeting?: (TargetingSpec);
55349
55352
  /**
55350
55353
  * Reddit only. The pixel and the conversion event the ad group optimizes toward.
55351
55354
  */
@@ -61936,7 +61939,7 @@ type CreateStandaloneAdData = {
61936
61939
  * - `app_promotion`: requires `promotedObject.applicationId` and `promotedObject.objectStoreUrl`.
61937
61940
  * - `catalog_sales`: Advantage+ catalog ads (e.g. vehicle inventory). Requires `promotedObject.productSetId`, `promotedObject.pixelId` and `promotedObject.customEventType`. Builds a catalog TEMPLATE creative from the copy fields, which may carry template tags like {{product.name}} or {{vehicle.make}}.
61938
61941
  * - `catalog_sales` visuals: no imageUrl or video is sent; Meta renders them per catalog item (an imageUrl or video sent is ignored, not uploaded). Find catalogs via GET /v1/ads/catalogs and product sets via GET /v1/ads/catalogs/{catalogId}/product-sets.
61939
- * - `catalog_sales` shape: single shape only, no creatives[], dynamicCreative, placementAssets, existingCreativeId or carouselCards. Works with `existingCampaignId`, and with `adSetId` to add to an existing ad set (then only `promotedObject.productSetId` is required). Pick the format with `catalogFormat`.
61942
+ * - `catalog_sales` shape: single shape only, no creatives[], dynamicCreative, placementAssets, existingCreativeId or carouselCards. Works with `existingCampaignId`, and with `adSetId` to add to an existing ad set (then only `promotedObject.productSetId` is required). Pick the format with `catalogFormat`, and open the carousel with `catalogIntroCards`.
61940
61943
  * - `traffic` with `promotedObject.productSetId`: a catalog ad without a pixel (OUTCOME_TRAFFIC, `optimizationGoal` LINK_CLICKS by default or LANDING_PAGE_VIEWS). The product set goes on the template creative only, never the ad set's promoted_object. No `pixelId` or `customEventType` needed. Same creative rules as `catalog_sales`.
61941
61944
  * - `page_likes`: Page Likes under OUTCOME_ENGAGEMENT (destination_type ON_PAGE, optimization PAGE_LIKES). `promotedObject.pageId` is optional and auto-filled. The CTA is fixed to LIKE_PAGE for that Page; headline / body / linkUrl / callToAction / imageUrl / video are all optional (Meta derives them from the Page).
61942
61945
  * - `page_visits`: "Page visits and followers" under OUTCOME_TRAFFIC (destination_type FACEBOOK_PAGE, optimization PROFILE_VISIT). `promotedObject.pageId` is optional and auto-filled; `linkUrl` defaults to the Page. Accounts Meta has not enabled are refused with "This account isn't eligible to use Profile Visit ads yet".
@@ -62042,6 +62045,34 @@ type CreateStandaloneAdData = {
62042
62045
  *
62043
62046
  */
62044
62047
  catalogFormat?: 'single_image' | 'carousel_images_multi_items' | 'carousel_images_single_item' | 'carousel_slideshows';
62048
+ /**
62049
+ * Meta only. Static cards shown before the catalog products in a catalog carousel, for example a brand or offer slide. Valid only with goal `catalog_sales` and `catalogFormat` omitted or `carousel_images_multi_items`; a 400 otherwise.
62050
+ *
62051
+ * Sent in order as `object_story_spec.template_data.child_attachments` with `static_card: true`, followed by one catalog card built from the top-level `headline`, `description` and `callToAction`.
62052
+ *
62053
+ */
62054
+ catalogIntroCards?: Array<{
62055
+ /**
62056
+ * Card image; uploaded to the ad account and referenced by hash.
62057
+ */
62058
+ imageUrl: string;
62059
+ /**
62060
+ * Card headline. Meta does not show it on Instagram.
62061
+ */
62062
+ headline: string;
62063
+ /**
62064
+ * Card description. Meta does not show it on Instagram.
62065
+ */
62066
+ description?: string;
62067
+ /**
62068
+ * Card destination URL. Defaults to the top-level linkUrl.
62069
+ */
62070
+ linkUrl?: string;
62071
+ /**
62072
+ * Card CTA override. Defaults to the top-level callToAction; same enum.
62073
+ */
62074
+ callToAction?: string;
62075
+ }>;
62045
62076
  /**
62046
62077
  * Meta only. Multi-advertiser ads: whether Meta may show this ad alongside other advertisers' in one unit. Meta auto-enrols since Aug 2024, so send OPT_OUT to leave. It is a top-level creative field, NOT a `creativeFeatures` key, and Meta rejects it there.
62047
62078
  */
@@ -62160,12 +62191,14 @@ type CreateStandaloneAdData = {
62160
62191
  /**
62161
62192
  * Meta only. Where the budget lives, which selects the Meta budget model:
62162
62193
  *
62163
- * - `adset` (default): ABO (Ad-set Budget Optimization). The budget is set on the ad set. Back-compatible; omit this field to keep it.
62194
+ * - `adset` (used when omitted): ABO (Ad-set Budget Optimization). The budget is set on the ad set.
62164
62195
  * - `campaign`: CBO (Campaign Budget Optimization / Advantage Campaign Budget). The budget AND `bidStrategy` are set on the CAMPAIGN, and Meta distributes spend across ad sets automatically.
62165
62196
  *
62166
62197
  * The returned ad stores the applied `budgetLevel`, and the budget in `campaignBudget` (CBO) or `adSetBudget` (ABO). Edit CBO budgets with `PUT /v1/ads/campaigns/{campaignId}` and ABO budgets with `PUT /v1/ads/ad-sets/{adSetId}`.
62167
62198
  *
62168
- * Meta requires the budget at exactly one level, never both. Non-Meta platforms ignore this field. Ignored on the attach shape (`adSetId`), which inherits the existing budget.
62199
+ * Meta requires the budget at exactly one level, never both. Ignored on the Meta attach shape (`adSetId`), which inherits the existing budget.
62200
+ *
62201
+ * Google Demand Gen also reads it. A new Demand Gen campaign accepts only `campaign` or no value. With `existingCampaignId` or `adSetId`, omit it: the budget stays on the existing campaign. Other platforms ignore it.
62169
62202
  *
62170
62203
  */
62171
62204
  budgetLevel?: 'adset' | 'campaign';
@@ -62924,7 +62957,7 @@ type CreateStandaloneAdData = {
62924
62957
  */
62925
62958
  audienceId?: string;
62926
62959
  /**
62927
- * Google only. Performance Max requires assetGroup and Demand Gen requires demandGen; both are always created PAUSED. With `adSetId` it defaults to the ad group's own campaign type instead of display.
62960
+ * Google only. Omitted, it is display on a new campaign, and the existing campaign's own type with `existingCampaignId` or `adSetId` (Search, Display or Demand Gen; other types return 422). Performance Max requires assetGroup and Demand Gen requires demandGen; both are always created PAUSED.
62928
62961
  */
62929
62962
  campaignType?: 'display' | 'search' | 'pmax' | 'demand_gen';
62930
62963
  /**
package/dist/index.js CHANGED
@@ -36,7 +36,7 @@ module.exports = __toCommonJS(index_exports);
36
36
  // package.json
37
37
  var package_default = {
38
38
  name: "@zernio/node",
39
- version: "0.2.1518",
39
+ version: "0.2.1520",
40
40
  description: "The official Node.js library for the Zernio API",
41
41
  main: "dist/index.js",
42
42
  module: "dist/index.mjs",
package/dist/index.mjs CHANGED
@@ -5,7 +5,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
5
5
  // package.json
6
6
  var package_default = {
7
7
  name: "@zernio/node",
8
- version: "0.2.1518",
8
+ version: "0.2.1520",
9
9
  description: "The official Node.js library for the Zernio API",
10
10
  main: "dist/index.js",
11
11
  module: "dist/index.mjs",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zernio/node",
3
- "version": "0.2.1518",
3
+ "version": "0.2.1520",
4
4
  "description": "The official Node.js library for the Zernio API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -13797,6 +13797,15 @@ export const listAdSets = <ThrowOnError extends boolean = false>(options?: Optio
13797
13797
  *
13798
13798
  * The ad group is created WITHOUT an ad (Google Ads compliance row C.190). Ads join it later via `adSetId` on POST /v1/ads/create. Supports Google Ads and Reddit Ads; every other platform returns 501.
13799
13799
  *
13800
+ * **Google Ads** (`platform: google`)
13801
+ *
13802
+ * - The ad group type follows the campaign: a standard ad group under a Search or Display campaign, a Demand Gen ad group under a Demand Gen campaign.
13803
+ * - On a Demand Gen campaign the ad group is always created PAUSED, and `maxCpc` or `status: ACTIVE` returns 400 (Demand Gen bids at the campaign).
13804
+ * - `targeting` sets a Demand Gen ad group's locations and languages (`countries`, `regions`, `cities`, `zips`, `metros`, `languages`), created atomically with the ad group. Without it the ad group serves worldwide.
13805
+ * - `targeting` returns 400 for any other targeting field, and on campaigns that keep geo on the campaign: Search, Display, and Demand Gen campaigns migrated from Discovery. Edit those with PUT /v1/ads/campaigns/{campaignId}/targeting.
13806
+ * - Any other campaign type returns 400 (Performance Max has asset groups instead of ad groups).
13807
+ * - A campaign that is not in the ad account, or was removed, returns 404.
13808
+ *
13800
13809
  * **Reddit Ads** (`platform: reddit`)
13801
13810
  *
13802
13811
  * - `adAccountId` (the Reddit ad account id) is required and must be a selected ad account of the connection (403 otherwise).
@@ -13807,7 +13816,7 @@ export const listAdSets = <ThrowOnError extends boolean = false>(options?: Optio
13807
13816
  * - The ad group must start no earlier than a future campaign start and end no later than the campaign end (400 otherwise).
13808
13817
  * - `targeting` takes the same targeting object as the other ad endpoints (no geo defaults to the US).
13809
13818
  * - A campaign of another ad account returns 404, a Reddit Max campaign 422.
13810
- * - `maxCpc` and `customerId` are Google only (400 on Reddit), and the Reddit fields return 400 on Google.
13819
+ * - `maxCpc` and `customerId` are Google only (400 on Reddit), and the other Reddit fields return 400 on Google.
13811
13820
  *
13812
13821
  * ### After creation
13813
13822
  *
@@ -17025,6 +17034,8 @@ export const listGoogleAssetGroups = <ThrowOnError extends boolean = false>(opti
17025
17034
  *
17026
17035
  * The group, any new assets, their links and an optional listing-group tree are created in one atomic request, so Google checks the asset minimums (for non-retail campaigns) against the whole set. Created PAUSED unless status is ENABLED. validateOnly: true runs Google's validation without creating anything.
17027
17036
  *
17037
+ * A campaign that is not Performance Max returns 400 on campaignId (add an ad group with POST /v1/ads/ad-sets instead). A missing or removed campaign returns 404.
17038
+ *
17028
17039
  */
17029
17040
  export const createGoogleAssetGroup = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateGoogleAssetGroupData, ThrowOnError>) => {
17030
17041
  return (options?.client ?? client).post<CreateGoogleAssetGroupResponse, CreateGoogleAssetGroupError, ThrowOnError>({
@@ -56316,7 +56316,10 @@ export type CreateAdSetData = {
56316
56316
  * Reddit only. ISO 8601 end of the ad group. Defaults to the campaign end.
56317
56317
  */
56318
56318
  endDate?: string;
56319
- targeting?: TargetingSpec;
56319
+ /**
56320
+ * Reddit: the full targeting object. Google: locations and languages only, on a Demand Gen campaign.
56321
+ */
56322
+ targeting?: (TargetingSpec);
56320
56323
  /**
56321
56324
  * Reddit only. The pixel and the conversion event the ad group optimizes toward.
56322
56325
  */
@@ -63294,7 +63297,7 @@ export type CreateStandaloneAdData = {
63294
63297
  * - `app_promotion`: requires `promotedObject.applicationId` and `promotedObject.objectStoreUrl`.
63295
63298
  * - `catalog_sales`: Advantage+ catalog ads (e.g. vehicle inventory). Requires `promotedObject.productSetId`, `promotedObject.pixelId` and `promotedObject.customEventType`. Builds a catalog TEMPLATE creative from the copy fields, which may carry template tags like {{product.name}} or {{vehicle.make}}.
63296
63299
  * - `catalog_sales` visuals: no imageUrl or video is sent; Meta renders them per catalog item (an imageUrl or video sent is ignored, not uploaded). Find catalogs via GET /v1/ads/catalogs and product sets via GET /v1/ads/catalogs/{catalogId}/product-sets.
63297
- * - `catalog_sales` shape: single shape only, no creatives[], dynamicCreative, placementAssets, existingCreativeId or carouselCards. Works with `existingCampaignId`, and with `adSetId` to add to an existing ad set (then only `promotedObject.productSetId` is required). Pick the format with `catalogFormat`.
63300
+ * - `catalog_sales` shape: single shape only, no creatives[], dynamicCreative, placementAssets, existingCreativeId or carouselCards. Works with `existingCampaignId`, and with `adSetId` to add to an existing ad set (then only `promotedObject.productSetId` is required). Pick the format with `catalogFormat`, and open the carousel with `catalogIntroCards`.
63298
63301
  * - `traffic` with `promotedObject.productSetId`: a catalog ad without a pixel (OUTCOME_TRAFFIC, `optimizationGoal` LINK_CLICKS by default or LANDING_PAGE_VIEWS). The product set goes on the template creative only, never the ad set's promoted_object. No `pixelId` or `customEventType` needed. Same creative rules as `catalog_sales`.
63299
63302
  * - `page_likes`: Page Likes under OUTCOME_ENGAGEMENT (destination_type ON_PAGE, optimization PAGE_LIKES). `promotedObject.pageId` is optional and auto-filled. The CTA is fixed to LIKE_PAGE for that Page; headline / body / linkUrl / callToAction / imageUrl / video are all optional (Meta derives them from the Page).
63300
63303
  * - `page_visits`: "Page visits and followers" under OUTCOME_TRAFFIC (destination_type FACEBOOK_PAGE, optimization PROFILE_VISIT). `promotedObject.pageId` is optional and auto-filled; `linkUrl` defaults to the Page. Accounts Meta has not enabled are refused with "This account isn't eligible to use Profile Visit ads yet".
@@ -63400,6 +63403,34 @@ export type CreateStandaloneAdData = {
63400
63403
  *
63401
63404
  */
63402
63405
  catalogFormat?: 'single_image' | 'carousel_images_multi_items' | 'carousel_images_single_item' | 'carousel_slideshows';
63406
+ /**
63407
+ * Meta only. Static cards shown before the catalog products in a catalog carousel, for example a brand or offer slide. Valid only with goal `catalog_sales` and `catalogFormat` omitted or `carousel_images_multi_items`; a 400 otherwise.
63408
+ *
63409
+ * Sent in order as `object_story_spec.template_data.child_attachments` with `static_card: true`, followed by one catalog card built from the top-level `headline`, `description` and `callToAction`.
63410
+ *
63411
+ */
63412
+ catalogIntroCards?: Array<{
63413
+ /**
63414
+ * Card image; uploaded to the ad account and referenced by hash.
63415
+ */
63416
+ imageUrl: string;
63417
+ /**
63418
+ * Card headline. Meta does not show it on Instagram.
63419
+ */
63420
+ headline: string;
63421
+ /**
63422
+ * Card description. Meta does not show it on Instagram.
63423
+ */
63424
+ description?: string;
63425
+ /**
63426
+ * Card destination URL. Defaults to the top-level linkUrl.
63427
+ */
63428
+ linkUrl?: string;
63429
+ /**
63430
+ * Card CTA override. Defaults to the top-level callToAction; same enum.
63431
+ */
63432
+ callToAction?: string;
63433
+ }>;
63403
63434
  /**
63404
63435
  * Meta only. Multi-advertiser ads: whether Meta may show this ad alongside other advertisers' in one unit. Meta auto-enrols since Aug 2024, so send OPT_OUT to leave. It is a top-level creative field, NOT a `creativeFeatures` key, and Meta rejects it there.
63405
63436
  */
@@ -63518,12 +63549,14 @@ export type CreateStandaloneAdData = {
63518
63549
  /**
63519
63550
  * Meta only. Where the budget lives, which selects the Meta budget model:
63520
63551
  *
63521
- * - `adset` (default): ABO (Ad-set Budget Optimization). The budget is set on the ad set. Back-compatible; omit this field to keep it.
63552
+ * - `adset` (used when omitted): ABO (Ad-set Budget Optimization). The budget is set on the ad set.
63522
63553
  * - `campaign`: CBO (Campaign Budget Optimization / Advantage Campaign Budget). The budget AND `bidStrategy` are set on the CAMPAIGN, and Meta distributes spend across ad sets automatically.
63523
63554
  *
63524
63555
  * The returned ad stores the applied `budgetLevel`, and the budget in `campaignBudget` (CBO) or `adSetBudget` (ABO). Edit CBO budgets with `PUT /v1/ads/campaigns/{campaignId}` and ABO budgets with `PUT /v1/ads/ad-sets/{adSetId}`.
63525
63556
  *
63526
- * Meta requires the budget at exactly one level, never both. Non-Meta platforms ignore this field. Ignored on the attach shape (`adSetId`), which inherits the existing budget.
63557
+ * Meta requires the budget at exactly one level, never both. Ignored on the Meta attach shape (`adSetId`), which inherits the existing budget.
63558
+ *
63559
+ * Google Demand Gen also reads it. A new Demand Gen campaign accepts only `campaign` or no value. With `existingCampaignId` or `adSetId`, omit it: the budget stays on the existing campaign. Other platforms ignore it.
63527
63560
  *
63528
63561
  */
63529
63562
  budgetLevel?: 'adset' | 'campaign';
@@ -64282,7 +64315,7 @@ export type CreateStandaloneAdData = {
64282
64315
  */
64283
64316
  audienceId?: string;
64284
64317
  /**
64285
- * Google only. Performance Max requires assetGroup and Demand Gen requires demandGen; both are always created PAUSED. With `adSetId` it defaults to the ad group's own campaign type instead of display.
64318
+ * Google only. Omitted, it is display on a new campaign, and the existing campaign's own type with `existingCampaignId` or `adSetId` (Search, Display or Demand Gen; other types return 422). Performance Max requires assetGroup and Demand Gen requires demandGen; both are always created PAUSED.
64286
64319
  */
64287
64320
  campaignType?: 'display' | 'search' | 'pmax' | 'demand_gen';
64288
64321
  /**