@zernio/node 0.2.717 → 0.2.719

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.
@@ -1858,6 +1858,50 @@ export type CampaignAnalyticsResponse = {
1858
1858
  };
1859
1859
  };
1860
1860
 
1861
+ /**
1862
+ * A Google campaign's current bidding, mapped onto the same triplet PUT /v1/ads/campaigns/{campaignId} accepts.
1863
+ */
1864
+ export type CampaignBidding = {
1865
+ /**
1866
+ * campaign.advertising_channel_type. COST_CAP's underlying Google field differs by channel; see bidStrategy on PUT.
1867
+ */
1868
+ channel?: 'SEARCH' | 'DISPLAY';
1869
+ /**
1870
+ * Google's raw enum: MAXIMIZE_CONVERSIONS, TARGET_CPA, MAXIMIZE_CONVERSION_VALUE, TARGET_ROAS, TARGET_SPEND, MANUAL_CPC, TARGET_IMPRESSION_SHARE, or another Google adds later.
1871
+ */
1872
+ biddingStrategyType?: string;
1873
+ /**
1874
+ * Null when the campaign is on a strategy PUT does not model (Manual CPC, Target Impression Share, ...); show biddingStrategyType instead in that case.
1875
+ */
1876
+ bidSpec?: {
1877
+ bidStrategy?: BidStrategy;
1878
+ /**
1879
+ * Whole currency units. Present for COST_CAP and LOWEST_COST_WITH_BID_CAP, and omitted when the campaign is on a bare TARGET_SPEND with no CPC ceiling set.
1880
+ */
1881
+ bidAmount?: number;
1882
+ /**
1883
+ * Decimal ROAS multiplier (2.0 = 2.0x). Present for LOWEST_COST_WITH_MIN_ROAS.
1884
+ */
1885
+ roasAverageFloor?: number;
1886
+ /**
1887
+ * Present alone (bidStrategy omitted) when the campaign is on a portfolio strategy; see portfolio.
1888
+ */
1889
+ portfolioBidStrategyId?: string;
1890
+ } | null;
1891
+ /**
1892
+ * Set only when the campaign is on a portfolio bid strategy (campaign.bidding_strategy); null otherwise.
1893
+ */
1894
+ portfolio?: {
1895
+ id?: string;
1896
+ name?: string;
1897
+ } | null;
1898
+ };
1899
+
1900
+ /**
1901
+ * campaign.advertising_channel_type. COST_CAP's underlying Google field differs by channel; see bidStrategy on PUT.
1902
+ */
1903
+ export type channel2 = 'SEARCH' | 'DISPLAY';
1904
+
1861
1905
  /**
1862
1906
  * Who a comment automation answers. Instagram only - Meta exposes the follow
1863
1907
  * relationship on no other platform, and only for people who have MESSAGED the
@@ -1992,6 +2036,55 @@ export type ConnectedApp = {
1992
2036
  tokenCount?: number;
1993
2037
  };
1994
2038
 
2039
+ /**
2040
+ * A Google Ads conversion action, e.g. a WEBPAGE conversion created via
2041
+ * `createConversionAction`. Returned by `listConversionActions` and
2042
+ * `createConversionAction`.
2043
+ *
2044
+ */
2045
+ export type ConversionAction = {
2046
+ /**
2047
+ * Google Ads conversion action id.
2048
+ */
2049
+ id: string;
2050
+ name: string;
2051
+ /**
2052
+ * Google's ConversionActionType, e.g. WEBPAGE, UPLOAD_CLICKS.
2053
+ */
2054
+ type: string;
2055
+ /**
2056
+ * Google's ConversionActionStatus, e.g. ENABLED, REMOVED, HIDDEN.
2057
+ */
2058
+ status: string;
2059
+ /**
2060
+ * Google's ConversionActionCategory, e.g. DEFAULT, PURCHASE, LEAD.
2061
+ */
2062
+ category: string;
2063
+ /**
2064
+ * The code a customer pastes onto their site. Present for types
2065
+ * Google generates a snippet for (e.g. WEBPAGE); empty otherwise.
2066
+ *
2067
+ */
2068
+ tagSnippets: Array<{
2069
+ /**
2070
+ * Google's TrackingCodeType, e.g. WEBPAGE.
2071
+ */
2072
+ type: string;
2073
+ /**
2074
+ * Google's TrackingCodePageFormat, e.g. HTML, AMP.
2075
+ */
2076
+ pageFormat?: string;
2077
+ /**
2078
+ * The gtag.js snippet to install once per site.
2079
+ */
2080
+ globalSiteTag?: string;
2081
+ /**
2082
+ * The per-conversion-page snippet that fires the event.
2083
+ */
2084
+ eventSnippet?: string;
2085
+ }>;
2086
+ };
2087
+
1995
2088
  /**
1996
2089
  * A discoverable conversion destination on an ad platform — a Meta pixel,
1997
2090
  * Google conversion action, or LinkedIn conversion rule. Returned by
@@ -4954,6 +5047,51 @@ export type errorCategory = 'auth_expired' | 'user_content' | 'user_abuse' | 'ac
4954
5047
  */
4955
5048
  export type errorSource = 'user' | 'platform' | 'system';
4956
5049
 
5050
+ /**
5051
+ * A Google Ads portfolio bid strategy: a named bidding strategy shared across campaigns, with its R.130 report metrics over the queried date range.
5052
+ */
5053
+ export type PortfolioBidStrategy = {
5054
+ /**
5055
+ * Numeric bid strategy id; pass as portfolioBidStrategyId or in the {strategyId} path.
5056
+ */
5057
+ id?: string;
5058
+ name?: string;
5059
+ type?: 'TARGET_CPA' | 'TARGET_ROAS' | 'MAXIMIZE_CONVERSIONS' | 'MAXIMIZE_CONVERSION_VALUE';
5060
+ /**
5061
+ * ENABLED or REMOVED.
5062
+ */
5063
+ status?: string;
5064
+ /**
5065
+ * Number of campaigns currently attached.
5066
+ */
5067
+ campaignCount?: number;
5068
+ clicks?: number;
5069
+ /**
5070
+ * Cost in the account's currency units (converted from micros).
5071
+ */
5072
+ cost?: number;
5073
+ /**
5074
+ * Cost per conversion in the account's currency units.
5075
+ */
5076
+ costPerConversion?: number;
5077
+ impressions?: number;
5078
+ /**
5079
+ * Average CPC in the account's currency units.
5080
+ */
5081
+ averageCpc?: number;
5082
+ conversions?: number;
5083
+ /**
5084
+ * Current target, in the account's currency units. Null for a ROAS-family type (TARGET_ROAS, MAXIMIZE_CONVERSION_VALUE), or a Maximize type with no target set. Pre-fills the edit form's target field.
5085
+ */
5086
+ targetCpa?: (number) | null;
5087
+ /**
5088
+ * Current target as a decimal multiplier (2.0 = 2.0x). Null for a CPA-family type (TARGET_CPA, MAXIMIZE_CONVERSIONS), or a Maximize type with no target set.
5089
+ */
5090
+ targetRoas?: (number) | null;
5091
+ };
5092
+
5093
+ export type type8 = 'TARGET_CPA' | 'TARGET_ROAS' | 'MAXIMIZE_CONVERSIONS' | 'MAXIMIZE_CONVERSION_VALUE';
5094
+
4957
5095
  export type Post = {
4958
5096
  _id?: string;
4959
5097
  userId?: (string | User);
@@ -6222,7 +6360,7 @@ export type UploadedFile = {
6222
6360
  mimeType?: string;
6223
6361
  };
6224
6362
 
6225
- export type type8 = 'image' | 'video' | 'document';
6363
+ export type type9 = 'image' | 'video' | 'document';
6226
6364
 
6227
6365
  export type UploadTokenResponse = {
6228
6366
  token?: string;
@@ -6708,7 +6846,7 @@ export type Verification = {
6708
6846
 
6709
6847
  export type status11 = 'pending' | 'approved' | 'expired' | 'max_attempts_reached' | 'canceled' | 'delivery_failed';
6710
6848
 
6711
- export type channel2 = 'sms';
6849
+ export type channel3 = 'sms';
6712
6850
 
6713
6851
  /**
6714
6852
  * Individual webhook configuration for receiving real-time notifications
@@ -9301,7 +9439,7 @@ export type WhatsAppTemplateButton = {
9301
9439
  navigate_screen?: string;
9302
9440
  };
9303
9441
 
9304
- export type type9 = 'quick_reply' | 'url' | 'phone_number' | 'otp' | 'copy_code' | 'flow' | 'mpm' | 'catalog';
9442
+ export type type10 = 'quick_reply' | 'url' | 'phone_number' | 'otp' | 'copy_code' | 'flow' | 'mpm' | 'catalog';
9305
9443
 
9306
9444
  /**
9307
9445
  * Required when type is otp
@@ -9463,7 +9601,7 @@ export type WorkflowNode = {
9463
9601
  * integrations (webhook, ai, handoff, start_call).
9464
9602
  *
9465
9603
  */
9466
- export type type10 = 'trigger' | 'send_message' | 'wait_for_reply' | 'condition' | 'set_variable' | 'delay' | 'webhook' | 'ai' | 'handoff' | 'start_call' | 'a_b_split' | 'set_field' | 'enroll_sequence' | 'add_tag' | 'remove_tag' | 'end';
9604
+ export type type11 = 'trigger' | 'send_message' | 'wait_for_reply' | 'condition' | 'set_variable' | 'delay' | 'webhook' | 'ai' | 'handoff' | 'start_call' | 'a_b_split' | 'set_field' | 'enroll_sequence' | 'add_tag' | 'remove_tag' | 'end';
9467
9605
 
9468
9606
  /**
9469
9607
  * A single X API operation with its per-call price and the Zernio platform methods that trigger it.
@@ -9599,7 +9737,7 @@ export type XArticleBlock = {
9599
9737
  entity_ranges?: Array<XArticleEntityRange>;
9600
9738
  };
9601
9739
 
9602
- export type type11 = 'unstyled' | 'header-one' | 'header-two' | 'header-three' | 'unordered-list-item' | 'ordered-list-item' | 'blockquote' | 'atomic';
9740
+ export type type12 = 'unstyled' | 'header-one' | 'header-two' | 'header-three' | 'unordered-list-item' | 'ordered-list-item' | 'blockquote' | 'atomic';
9603
9741
 
9604
9742
  /**
9605
9743
  * X's snake_case content-state shape. Standard DraftJS camelCase fields such as entityMap, inlineStyleRanges, and entityRanges are rejected.
@@ -9678,7 +9816,7 @@ export type XArticleEntity = {
9678
9816
 
9679
9817
  export type mutability = 'immutable' | 'mutable' | 'segmented';
9680
9818
 
9681
- export type type12 = 'divider' | 'latex';
9819
+ export type type13 = 'divider' | 'latex';
9682
9820
 
9683
9821
  /**
9684
9822
  * The referenced entity must exist, and offset plus length must not exceed the containing block's text length.
@@ -30379,6 +30517,111 @@ export type GetAdsSearchTermsError = (ErrorResponse | {
30379
30517
  error?: string;
30380
30518
  } | unknown);
30381
30519
 
30520
+ export type ListBidStrategiesData = {
30521
+ query: {
30522
+ /**
30523
+ * Google ads SocialAccount id.
30524
+ */
30525
+ accountId: string;
30526
+ /**
30527
+ * Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer.
30528
+ */
30529
+ customerId?: string;
30530
+ /**
30531
+ * Defaults to 30 days ago.
30532
+ */
30533
+ fromDate?: string;
30534
+ /**
30535
+ * Defaults to today.
30536
+ */
30537
+ toDate?: string;
30538
+ };
30539
+ };
30540
+
30541
+ export type ListBidStrategiesResponse = ({
30542
+ customerId?: string;
30543
+ /**
30544
+ * Account currency code; money fields are in this currency's units.
30545
+ */
30546
+ currency?: string;
30547
+ strategies?: Array<PortfolioBidStrategy>;
30548
+ });
30549
+
30550
+ export type ListBidStrategiesError = (ErrorResponse | {
30551
+ error?: string;
30552
+ } | unknown);
30553
+
30554
+ export type CreateBidStrategyData = {
30555
+ body: {
30556
+ /**
30557
+ * Google ads SocialAccount id.
30558
+ */
30559
+ accountId: string;
30560
+ /**
30561
+ * Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer.
30562
+ */
30563
+ customerId?: string;
30564
+ name: string;
30565
+ type: 'TARGET_CPA' | 'TARGET_ROAS' | 'MAXIMIZE_CONVERSIONS' | 'MAXIMIZE_CONVERSION_VALUE';
30566
+ /**
30567
+ * Required when type is TARGET_CPA, in the account's currency units.
30568
+ */
30569
+ targetCpa?: number;
30570
+ /**
30571
+ * Required when type is TARGET_ROAS; a multiplier (2.0 = 2.0x).
30572
+ */
30573
+ targetRoas?: number;
30574
+ };
30575
+ };
30576
+
30577
+ export type CreateBidStrategyResponse = ({
30578
+ strategy?: {
30579
+ customerId?: string;
30580
+ /**
30581
+ * Numeric bid strategy id; pass as portfolioBidStrategyId or in the {strategyId} path.
30582
+ */
30583
+ id?: string;
30584
+ resourceName?: string;
30585
+ };
30586
+ });
30587
+
30588
+ export type CreateBidStrategyError = (unknown | {
30589
+ error?: string;
30590
+ });
30591
+
30592
+ export type UpdateBidStrategyData = {
30593
+ body: {
30594
+ /**
30595
+ * Google ads SocialAccount id.
30596
+ */
30597
+ accountId: string;
30598
+ /**
30599
+ * Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer.
30600
+ */
30601
+ customerId?: string;
30602
+ name?: string;
30603
+ type?: 'TARGET_CPA' | 'TARGET_ROAS' | 'MAXIMIZE_CONVERSIONS' | 'MAXIMIZE_CONVERSION_VALUE';
30604
+ targetCpa?: number;
30605
+ targetRoas?: number;
30606
+ };
30607
+ path: {
30608
+ /**
30609
+ * Numeric Google Ads bid strategy id.
30610
+ */
30611
+ strategyId: string;
30612
+ };
30613
+ };
30614
+
30615
+ export type UpdateBidStrategyResponse = ({
30616
+ strategy?: {
30617
+ customerId?: string;
30618
+ };
30619
+ });
30620
+
30621
+ export type UpdateBidStrategyError = (ErrorResponse | {
30622
+ error?: string;
30623
+ } | unknown);
30624
+
30382
30625
  export type ListLocalServicesLeadsData = {
30383
30626
  query: {
30384
30627
  /**
@@ -30728,17 +30971,21 @@ export type CreateAdCampaignData = {
30728
30971
  budgetType?: 'daily' | 'lifetime';
30729
30972
  status?: 'ACTIVE' | 'PAUSED';
30730
30973
  /**
30731
- * Campaign bid strategy. Meta stores `bid_strategy` alongside the budget, so this REQUIRES `budgetAmount` + `budgetType` on the same request; sending it without a campaign budget is a 400. A campaign carrying a strategy without its `bid_amount` makes every ad set created under it fail with an error that names the ad set (code 100, subcode 1815857), so the bad state is rejected up front rather than accepted. To bid at ad-set level, set the strategy there instead.
30974
+ * Campaign bid strategy. Meta stores `bid_strategy` alongside the budget, so this REQUIRES `budgetAmount` + `budgetType` on the same request; sending it without a campaign budget is a 400. A campaign carrying a strategy without its `bid_amount` makes every ad set created under it fail with an error that names the ad set (code 100, subcode 1815857), so the bad state is rejected up front rather than accepted. To bid at ad-set level on Meta, set the strategy there instead. On Google: LOWEST_COST_WITHOUT_CAP = Maximize Conversions, COST_CAP + bidAmount = Target CPA, LOWEST_COST_WITH_MIN_ROAS + roasAverageFloor = Target ROAS, LOWEST_COST_WITH_BID_CAP + bidAmount = Maximize Clicks with a CPC ceiling; portfolioBidStrategyId attaches a portfolio strategy instead.
30732
30975
  */
30733
30976
  bidStrategy?: 'LOWEST_COST_WITHOUT_CAP' | 'LOWEST_COST_WITH_BID_CAP' | 'COST_CAP' | 'LOWEST_COST_WITH_MIN_ROAS';
30734
30977
  /**
30735
- * Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise. Validated here but NOT stored by Meta: the campaign object has no bid_amount field, only bid_strategy lives on it. The amount takes effect once an ad set joins this campaign (existingCampaignId on POST /v1/ads/create) and supplies its own bidAmount there.
30978
+ * Whole currency units (USD: 5 = $5.00). Required for LOWEST_COST_WITH_BID_CAP and COST_CAP; ignored otherwise. On Meta, validated here but NOT stored: the campaign object has no bid_amount field, only bid_strategy lives on it, and the amount takes effect once an ad set joins this campaign (existingCampaignId on POST /v1/ads/create) and supplies its own bidAmount there. On Google, stored directly on the campaign's bidding strategy.
30736
30979
  */
30737
30980
  bidAmount?: number;
30738
30981
  /**
30739
30982
  * Decimal ROAS multiplier (2.0 = 2.0x). Required for LOWEST_COST_WITH_MIN_ROAS.
30740
30983
  */
30741
30984
  roasAverageFloor?: number;
30985
+ /**
30986
+ * Google only. Attach an existing portfolio bid strategy (numeric id from GET /v1/ads/bid-strategies) to the new campaign instead of a standard one. Exclusive with bidStrategy.
30987
+ */
30988
+ portfolioBidStrategyId?: string;
30742
30989
  };
30743
30990
  headers?: {
30744
30991
  /**
@@ -30801,6 +31048,37 @@ export type UpdateAdCampaignStatusError = (unknown | {
30801
31048
  error?: string;
30802
31049
  });
30803
31050
 
31051
+ export type GetCampaignBiddingData = {
31052
+ path: {
31053
+ /**
31054
+ * Numeric Google platform campaign id.
31055
+ */
31056
+ campaignId: string;
31057
+ };
31058
+ query: {
31059
+ /**
31060
+ * Zernio Google Ads SocialAccount id: resolves the customer id + refresh token.
31061
+ */
31062
+ accountId: string;
31063
+ /**
31064
+ * Numeric Google Ads customer id (no dashes). Required when the connection has multiple Google Ads accounts; optional (and inferred) when it has only one.
31065
+ */
31066
+ customerId?: string;
31067
+ /**
31068
+ * Required: campaign IDs are not globally unique. Only "google" is supported today.
31069
+ */
31070
+ platform: 'google';
31071
+ };
31072
+ };
31073
+
31074
+ export type GetCampaignBiddingResponse = (({
31075
+ campaignId?: string;
31076
+ } & CampaignBidding));
31077
+
31078
+ export type GetCampaignBiddingError = (unknown | {
31079
+ error?: string;
31080
+ });
31081
+
30804
31082
  export type UpdateAdCampaignData = {
30805
31083
  body: {
30806
31084
  /**
@@ -30812,7 +31090,7 @@ export type UpdateAdCampaignData = {
30812
31090
  */
30813
31091
  accountId?: string;
30814
31092
  /**
30815
- * **Meta + Google.** On Meta, the campaign default that ad sets inherit unless they override it. On Google, the campaign's own bidding strategy.
31093
+ * **Meta + Google.** On Meta, the campaign default that ad sets inherit unless they override it. On Google, the campaign's own bidding strategy. On Google: LOWEST_COST_WITHOUT_CAP = Maximize Conversions, COST_CAP + bidAmount = Target CPA, LOWEST_COST_WITH_MIN_ROAS + roasAverageFloor = Target ROAS, LOWEST_COST_WITH_BID_CAP + bidAmount = Maximize Clicks with a CPC ceiling; portfolioBidStrategyId attaches a portfolio strategy instead.
30816
31094
  */
30817
31095
  bidStrategy?: (BidStrategy);
30818
31096
  /**
@@ -30823,6 +31101,10 @@ export type UpdateAdCampaignData = {
30823
31101
  * **Google only.** Decimal ROAS multiplier (2.0 = 2.0x), required for LOWEST_COST_WITH_MIN_ROAS.
30824
31102
  */
30825
31103
  roasAverageFloor?: number;
31104
+ /**
31105
+ * **Google only.** Attach an existing portfolio bid strategy (numeric id from GET /v1/ads/bid-strategies) instead of setting bidStrategy. Exclusive with bidStrategy.
31106
+ */
31107
+ portfolioBidStrategyId?: string;
30826
31108
  /**
30827
31109
  * **Meta only.** The CBO budget.
30828
31110
  */
@@ -30865,6 +31147,10 @@ export type UpdateAdCampaignResponse = ({
30865
31147
  bidStrategy?: BidStrategy;
30866
31148
  bidAmount?: number;
30867
31149
  roasAverageFloor?: number;
31150
+ /**
31151
+ * Google only. Echoed back, but NOT mirrored onto local Ad documents (no column for it yet).
31152
+ */
31153
+ portfolioBidStrategyId?: string;
30868
31154
  platformSpecificData?: {
30869
31155
  [key: string]: unknown;
30870
31156
  };
@@ -31055,6 +31341,198 @@ export type DuplicateAdCampaignError = (unknown | {
31055
31341
  error?: string;
31056
31342
  });
31057
31343
 
31344
+ export type GetCampaignTargetingData = {
31345
+ path: {
31346
+ /**
31347
+ * Google platform campaign ID
31348
+ */
31349
+ campaignId: string;
31350
+ };
31351
+ query?: {
31352
+ /**
31353
+ * Disambiguates when the same campaignId string exists on more than one connected platform.
31354
+ */
31355
+ platform?: 'google';
31356
+ };
31357
+ };
31358
+
31359
+ export type GetCampaignTargetingResponse = ({
31360
+ devices?: Array<{
31361
+ device?: 'MOBILE' | 'DESKTOP' | 'TABLET' | 'CONNECTED_TV';
31362
+ included?: boolean;
31363
+ /**
31364
+ * Always null on this read (see description).
31365
+ */
31366
+ bidModifier?: (number) | null;
31367
+ }>;
31368
+ locations?: Array<{
31369
+ /**
31370
+ * Numeric id from Google's geoTargetConstants/{id}.
31371
+ */
31372
+ geoTargetId?: string;
31373
+ /**
31374
+ * true = excluded location.
31375
+ */
31376
+ negative?: boolean;
31377
+ }>;
31378
+ languages?: Array<{
31379
+ /**
31380
+ * Google's language code (ISO 639-1, plus variants such as `zh_CN`). Empty when the campaign's language_constant id is not in Zernio's checked-in table.
31381
+ */
31382
+ code?: string;
31383
+ /**
31384
+ * Google's languageConstants/{id} numeric id.
31385
+ */
31386
+ id?: string;
31387
+ name?: string;
31388
+ }>;
31389
+ });
31390
+
31391
+ export type GetCampaignTargetingError = (ErrorResponse | {
31392
+ error?: string;
31393
+ } | unknown);
31394
+
31395
+ export type UpdateCampaignTargetingData = {
31396
+ body: {
31397
+ platform: 'google';
31398
+ targeting: {
31399
+ /**
31400
+ * Devices to include. Devices not listed become excluded (negative) criteria, same contract as the existing devices-only edit.
31401
+ */
31402
+ devices?: Array<('MOBILE' | 'DESKTOP' | 'TABLET' | 'CONNECTED_TV' | {
31403
+ device: 'MOBILE' | 'DESKTOP' | 'TABLET' | 'CONNECTED_TV';
31404
+ /**
31405
+ * Bid modifier for this device; devices without one use the campaign's base bid.
31406
+ */
31407
+ bidModifier: number;
31408
+ })>;
31409
+ /**
31410
+ * Bare country-code array, or the nested creation-time shape (countries/regions/cities/zips/metros).
31411
+ */
31412
+ locations?: (Array<(string)> | {
31413
+ countries?: Array<(string)>;
31414
+ regions?: Array<{
31415
+ key: string;
31416
+ name?: string;
31417
+ }>;
31418
+ cities?: Array<{
31419
+ key: string;
31420
+ name?: string;
31421
+ }>;
31422
+ zips?: Array<{
31423
+ key: string;
31424
+ name?: string;
31425
+ }>;
31426
+ metros?: Array<{
31427
+ key: string;
31428
+ name?: string;
31429
+ }>;
31430
+ });
31431
+ /**
31432
+ * Google's language codes (ISO 639-1, plus variants such as `zh_CN`), e.g. ["en", "de"].
31433
+ */
31434
+ languages?: Array<(string)>;
31435
+ };
31436
+ };
31437
+ path: {
31438
+ /**
31439
+ * Google platform campaign ID
31440
+ */
31441
+ campaignId: string;
31442
+ };
31443
+ };
31444
+
31445
+ export type UpdateCampaignTargetingResponse = ({
31446
+ campaignId?: string;
31447
+ /**
31448
+ * Which targeting fields were applied.
31449
+ */
31450
+ updated?: Array<('devices' | 'locations' | 'languages')>;
31451
+ });
31452
+
31453
+ export type UpdateCampaignTargetingError = (ErrorResponse | {
31454
+ error?: string;
31455
+ } | unknown);
31456
+
31457
+ export type ListAdSetsData = {
31458
+ query?: {
31459
+ /**
31460
+ * Social account ID
31461
+ */
31462
+ accountId?: string;
31463
+ /**
31464
+ * Platform campaign ID
31465
+ */
31466
+ campaignId?: string;
31467
+ platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
31468
+ };
31469
+ };
31470
+
31471
+ export type ListAdSetsResponse = ({
31472
+ adSets?: Array<{
31473
+ platformAdSetId?: string;
31474
+ platform?: string;
31475
+ adSetName?: (string) | null;
31476
+ status?: (string) | null;
31477
+ platformAdSetStatus?: (string) | null;
31478
+ platformCampaignId?: (string) | null;
31479
+ platformAdAccountId?: string;
31480
+ accountId?: (string) | null;
31481
+ profileId?: string;
31482
+ currency?: (string) | null;
31483
+ budget?: {
31484
+ [key: string]: unknown;
31485
+ } | null;
31486
+ isExternal?: (boolean) | null;
31487
+ platformCreatedAt?: (string) | null;
31488
+ }>;
31489
+ });
31490
+
31491
+ export type ListAdSetsError = (ErrorResponse | {
31492
+ error?: string;
31493
+ } | unknown);
31494
+
31495
+ export type CreateAdSetData = {
31496
+ body: {
31497
+ /**
31498
+ * Zernio SocialAccount id owning the Google Ads connection.
31499
+ */
31500
+ accountId: string;
31501
+ /**
31502
+ * Only "google" is implemented today; every other value returns 501.
31503
+ */
31504
+ platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
31505
+ /**
31506
+ * Google platform campaign ID (numeric) the ad group is created under.
31507
+ */
31508
+ campaignId: string;
31509
+ name: string;
31510
+ status?: 'ACTIVE' | 'PAUSED';
31511
+ /**
31512
+ * Numeric Google Ads customer id. Only required when the connection has more than one.
31513
+ */
31514
+ customerId?: string;
31515
+ };
31516
+ headers?: {
31517
+ /**
31518
+ * Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. Only 2xx responses are stored, so a request that failed with a 4xx can be retried with a corrected body under the SAME key.
31519
+ */
31520
+ 'Idempotency-Key'?: string;
31521
+ };
31522
+ };
31523
+
31524
+ export type CreateAdSetResponse = ({
31525
+ /**
31526
+ * Platform id of the new ad group
31527
+ */
31528
+ adSetId?: string;
31529
+ campaignId?: string;
31530
+ });
31531
+
31532
+ export type CreateAdSetError = (ErrorResponse | {
31533
+ error?: string;
31534
+ } | unknown);
31535
+
31058
31536
  export type DuplicateAdSetData = {
31059
31537
  body: {
31060
31538
  platform: 'facebook' | 'instagram';
@@ -31562,8 +32040,9 @@ export type UpdateAdData = {
31562
32040
  type?: 'daily' | 'lifetime';
31563
32041
  };
31564
32042
  /**
31565
- * Meta + TikTok (demographics/interests), Google (keyword edits only),
31566
- * and LinkedIn (geo countries). Pinterest / X return 501.
32043
+ * Meta + TikTok (demographics/interests), Google (keyword and device
32044
+ * bid adjustment edits only), and LinkedIn (geo countries). Pinterest / X
32045
+ * return 501.
31567
32046
  *
31568
32047
  */
31569
32048
  targeting?: {
@@ -31580,6 +32059,16 @@ export type UpdateAdData = {
31580
32059
  negativeKeywords?: Array<(string | {
31581
32060
  text: string;
31582
32061
  matchType?: 'exact' | 'phrase' | 'broad';
32062
+ })>;
32063
+ /**
32064
+ * Google only. The FULL new set of device criteria for the campaign; devices not listed are excluded. Entries are a device name alone (included, no bid adjustment) or { device, bidModifier }.
32065
+ */
32066
+ devices?: Array<('MOBILE' | 'DESKTOP' | 'TABLET' | 'CONNECTED_TV' | {
32067
+ device: 'MOBILE' | 'DESKTOP' | 'TABLET' | 'CONNECTED_TV';
32068
+ /**
32069
+ * Google device bid modifier, 0.1 to 10 (minus 90% to plus 900%). Omit a device to exclude it.
32070
+ */
32071
+ bidModifier?: number;
31583
32072
  })>;
31584
32073
  ageMin?: number;
31585
32074
  ageMax?: number;
@@ -33171,6 +33660,90 @@ export type DeleteValueRuleSetError = (unknown | {
33171
33660
  error?: string;
33172
33661
  });
33173
33662
 
33663
+ export type ListAccountCalloutsData = {
33664
+ query: {
33665
+ /**
33666
+ * Google ads SocialAccount id.
33667
+ */
33668
+ accountId: string;
33669
+ /**
33670
+ * Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer.
33671
+ */
33672
+ customerId?: string;
33673
+ };
33674
+ };
33675
+
33676
+ export type ListAccountCalloutsResponse = ({
33677
+ customerId?: string;
33678
+ callouts?: Array<{
33679
+ assetId?: string;
33680
+ text?: string;
33681
+ /**
33682
+ * customer_asset.status, e.g. ENABLED, REMOVED, PAUSED.
33683
+ */
33684
+ status?: string;
33685
+ }>;
33686
+ });
33687
+
33688
+ export type ListAccountCalloutsError = (ErrorResponse | {
33689
+ error?: string;
33690
+ } | unknown);
33691
+
33692
+ export type AddAccountCalloutsData = {
33693
+ body: {
33694
+ /**
33695
+ * Zernio SocialAccount id owning the Google Ads connection.
33696
+ */
33697
+ accountId: string;
33698
+ /**
33699
+ * Numeric Google Ads customer id. Only required when the connection has more than one.
33700
+ */
33701
+ customerId?: string;
33702
+ /**
33703
+ * Callout text, 1-25 characters each; up to 20 per request (Google's CalloutAsset limits).
33704
+ */
33705
+ callouts: Array<(string)>;
33706
+ };
33707
+ };
33708
+
33709
+ export type AddAccountCalloutsResponse = ({
33710
+ customerId?: string;
33711
+ callouts?: Array<{
33712
+ assetId?: string;
33713
+ text?: string;
33714
+ }>;
33715
+ });
33716
+
33717
+ export type AddAccountCalloutsError = (ErrorResponse | {
33718
+ error?: string;
33719
+ } | unknown);
33720
+
33721
+ export type RemoveAccountCalloutData = {
33722
+ body: {
33723
+ /**
33724
+ * Zernio SocialAccount id owning the Google Ads connection.
33725
+ */
33726
+ accountId: string;
33727
+ /**
33728
+ * Numeric Google Ads customer id. Only required when the connection has more than one.
33729
+ */
33730
+ customerId?: string;
33731
+ /**
33732
+ * Numeric asset id from GET /v1/ads/accounts/callouts.
33733
+ */
33734
+ assetId: string;
33735
+ };
33736
+ };
33737
+
33738
+ export type RemoveAccountCalloutResponse = ({
33739
+ removed?: boolean;
33740
+ customerId?: string;
33741
+ });
33742
+
33743
+ export type RemoveAccountCalloutError = (ErrorResponse | {
33744
+ error?: string;
33745
+ } | unknown);
33746
+
33174
33747
  export type GetAdAccountFinanceData = {
33175
33748
  query: {
33176
33749
  /**
@@ -34138,7 +34711,7 @@ export type CreateStandaloneAdData = {
34138
34711
  */
34139
34712
  incomeTier?: 'top_5' | 'top_10' | 'top_10_25' | 'top_25_50';
34140
34713
  /**
34141
- * Language codes restricting the audience by language. On Meta, ISO 639-1 codes (e.g. ['en'], ['de']); a bare code targets all regional variants ("en" = all English), or use a region-qualified code for a specific one ("en_GB", "pt_BR", "zh_TW"). Unknown codes are rejected. Other ad platforms use their own language-code systems.
34714
+ * e.g. ["en","es"]. Google: campaign language targeting (language_constant) using Google's language codes (ISO 639-1, plus variants such as `zh_CN`); unknown codes return 400. On Meta, a bare code targets all regional variants ("en" = all English), or use a region-qualified code for a specific one ("en_GB", "pt_BR", "zh_TW"); unknown codes are rejected. Other ad platforms use their own language-code systems.
34142
34715
  */
34143
34716
  languages?: Array<(string)>;
34144
34717
  /**
@@ -34582,6 +35155,8 @@ export type CreateStandaloneAdData = {
34582
35155
  *
34583
35156
  * OpenAI Ads: required on every ad group via this flat field, the only channel it supports (`platformSpecificData` is Meta/LinkedIn-only and returns 400 for OpenAI). No auto-bid option exists; send `LOWEST_COST_WITH_BID_CAP` or `COST_CAP` together with `bidAmount`, omitting it returns 400.
34584
35157
  *
35158
+ * Google (not deprecated there, this shared flat field is Google's only shape): applied to the campaign this call creates. On Google: LOWEST_COST_WITHOUT_CAP = Maximize Conversions, COST_CAP + bidAmount = Target CPA, LOWEST_COST_WITH_MIN_ROAS + roasAverageFloor = Target ROAS, LOWEST_COST_WITH_BID_CAP + bidAmount = Maximize Clicks with a CPC ceiling; portfolioBidStrategyId attaches a portfolio strategy instead. Omitted, the campaign falls back to a goal-based default.
35159
+ *
34585
35160
  * @deprecated
34586
35161
  */
34587
35162
  bidStrategy?: (BidStrategy);
@@ -34614,6 +35189,10 @@ export type CreateStandaloneAdData = {
34614
35189
  * @deprecated
34615
35190
  */
34616
35191
  roasAverageFloor?: number;
35192
+ /**
35193
+ * Google only. Attach an existing portfolio bid strategy (numeric id from GET /v1/ads/bid-strategies) to the new campaign instead of a standard one. Exclusive with bidStrategy.
35194
+ */
35195
+ portfolioBidStrategyId?: string;
34617
35196
  /**
34618
35197
  * Meta only (facebook, instagram; other platforms return 400). Value rule set
34619
35198
  * to attach to the new ad set, from `/v1/ads/value-rule-sets`. Attachment is
@@ -35514,9 +36093,9 @@ export type SearchAdTargetingData = {
35514
36093
  */
35515
36094
  countryCode?: string;
35516
36095
  /**
35517
- * What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
36096
+ * What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
35518
36097
  */
35519
- dimension?: 'geo' | 'interest' | 'behavior' | 'income' | 'workPosition' | 'workEmployer' | 'workIndustry';
36098
+ dimension?: 'geo' | 'interest' | 'behavior' | 'income' | 'language' | 'workPosition' | 'workEmployer' | 'workIndustry';
35520
36099
  /**
35521
36100
  * Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`.
35522
36101
  */
@@ -36420,6 +36999,69 @@ export type AdjustConversionsError = (unknown | {
36420
36999
  error?: string;
36421
37000
  });
36422
37001
 
37002
+ export type ListConversionActionsData = {
37003
+ query: {
37004
+ /**
37005
+ * SocialAccount _id (must be a googleads account).
37006
+ */
37007
+ accountId: string;
37008
+ /**
37009
+ * Google Ads customer id (digits only). Resolved automatically when the connection has exactly one accessible customer.
37010
+ */
37011
+ customerId?: string;
37012
+ /**
37013
+ * Filter by Google's ConversionActionType enum (e.g. WEBPAGE, UPLOAD_CLICKS).
37014
+ */
37015
+ type?: string;
37016
+ };
37017
+ };
37018
+
37019
+ export type ListConversionActionsResponse = ({
37020
+ /**
37021
+ * The Google Ads customer id the actions were read from.
37022
+ */
37023
+ customerId?: string;
37024
+ actions?: Array<ConversionAction>;
37025
+ });
37026
+
37027
+ export type ListConversionActionsError = (ErrorResponse | {
37028
+ error?: string;
37029
+ } | unknown);
37030
+
37031
+ export type CreateConversionActionData = {
37032
+ body: {
37033
+ /**
37034
+ * SocialAccount ID. Must be a `googleads` account.
37035
+ */
37036
+ accountId: string;
37037
+ /**
37038
+ * Google Ads customer id (digits only). Resolved automatically when the connection has exactly one accessible customer.
37039
+ */
37040
+ customerId?: string;
37041
+ name: string;
37042
+ /**
37043
+ * Only WEBPAGE is supported for creation today.
37044
+ */
37045
+ type: 'WEBPAGE';
37046
+ /**
37047
+ * Default conversion value used when an event doesn't carry its own value.
37048
+ */
37049
+ defaultValue?: number;
37050
+ /**
37051
+ * When true, always use defaultValue and ignore any value sent with the event. Defaults to true when defaultValue is set.
37052
+ */
37053
+ alwaysUseDefaultValue?: boolean;
37054
+ };
37055
+ };
37056
+
37057
+ export type CreateConversionActionResponse = ({
37058
+ action?: ConversionAction;
37059
+ });
37060
+
37061
+ export type CreateConversionActionError = (ErrorResponse | {
37062
+ error?: string;
37063
+ } | unknown);
37064
+
36423
37065
  export type ListConversionDestinationsData = {
36424
37066
  path: {
36425
37067
  /**