@getlatedev/node 0.2.1113 → 0.2.1115

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/README.md CHANGED
@@ -515,7 +515,7 @@ try {
515
515
  | `adCampaigns.getCampaignAdSchedule()` | Read a campaign's ad schedule (dayparting) |
516
516
  | `adCampaigns.getCampaignBidding()` | Read a campaign's current bidding |
517
517
  | `adCampaigns.getCampaignConversionGoals()` | Get campaign conversion goals |
518
- | `adCampaigns.getCampaignTargeting()` | Read a Google campaign's device, location, and language targeting |
518
+ | `adCampaigns.getCampaignTargeting()` | Read a Google campaign's device, location, excluded location, and language targeting |
519
519
  | `adCampaigns.getGoogleAssetGroup()` | Get a Performance Max asset group |
520
520
  | `adCampaigns.updateAd()` | Update ad |
521
521
  | `adCampaigns.updateAdCampaign()` | Update a campaign |
@@ -529,7 +529,7 @@ try {
529
529
  | `adCampaigns.updateCampaignAdSchedule()` | Replace a campaign's ad schedule (dayparting) |
530
530
  | `adCampaigns.updateCampaignAssets()` | Update campaign assets |
531
531
  | `adCampaigns.updateCampaignConversionGoals()` | Update campaign conversion goals |
532
- | `adCampaigns.updateCampaignTargeting()` | Edit a Google campaign's device, location, or language targeting |
532
+ | `adCampaigns.updateCampaignTargeting()` | Edit a Google campaign's device, location, excluded location, or language targeting |
533
533
  | `adCampaigns.updateGoogleAssetGroup()` | Update a Performance Max asset group |
534
534
  | `adCampaigns.deleteAd()` | Cancel an ad |
535
535
  | `adCampaigns.deleteAdCampaign()` | Delete a campaign |
package/dist/index.d.mts CHANGED
@@ -12138,7 +12138,7 @@ type TargetingSpec = {
12138
12138
  address?: string;
12139
12139
  }>;
12140
12140
  /**
12141
- * Geo to exclude from the audience. Mirrors the inclusion geo shape: excluded cities can carry a radius catchment and excluded custom (lat/lng) pins are supported, both on Meta (excluded_geo_locations).
12141
+ * Geo to exclude from the audience. Mirrors the inclusion geo shape: excluded cities can carry a radius catchment and excluded custom (lat/lng) pins are supported, both on Meta (excluded_geo_locations). Google (Search, Display, Performance Max) excludes countries, regions, cities and zips as negative location criteria; countryGroups, places, neighborhoods, customLocations and a city radius return 400 there, and Demand Gen returns 400 for any exclusion.
12142
12142
  */
12143
12143
  excludedLocations?: {
12144
12144
  countries?: Array<(string)>;
@@ -40452,6 +40452,27 @@ type GetCampaignTargetingResponse = ({
40452
40452
  */
40453
40453
  countryCode?: (string) | null;
40454
40454
  }>;
40455
+ /**
40456
+ * The negative (excluded) location criteria, same item shape as `locations` with `negative: true`.
40457
+ */
40458
+ excludedLocations?: Array<{
40459
+ /**
40460
+ * Numeric id from Google's geoTargetConstants/{id}.
40461
+ */
40462
+ geoTargetId?: string;
40463
+ /**
40464
+ * Always true here.
40465
+ */
40466
+ negative?: boolean;
40467
+ name?: (string) | null;
40468
+ canonicalName?: (string) | null;
40469
+ type?: (string) | null;
40470
+ countryCode?: (string) | null;
40471
+ }>;
40472
+ /**
40473
+ * Whether PUT accepts `excludedLocations` for this campaign. False on Demand Gen, which returns 400 for any exclusion.
40474
+ */
40475
+ excludedLocationsEditable?: boolean;
40455
40476
  languages?: Array<{
40456
40477
  /**
40457
40478
  * 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.
@@ -40517,6 +40538,28 @@ type UpdateCampaignTargetingData = {
40517
40538
  * Google's language codes (ISO 639-1, plus variants such as `zh_CN`), e.g. ["en", "de"].
40518
40539
  */
40519
40540
  languages?: Array<(string)>;
40541
+ /**
40542
+ * Locations the campaign never serves in, as a bare country-code array or the nested countries/regions/cities/zips/metros shape. Replaces the excluded set; [] removes every exclusion.
40543
+ */
40544
+ excludedLocations?: (Array<(string)> | {
40545
+ countries?: Array<(string)>;
40546
+ regions?: Array<(string | {
40547
+ key: string;
40548
+ name?: string;
40549
+ })>;
40550
+ cities?: Array<(string | {
40551
+ key: string;
40552
+ name?: string;
40553
+ })>;
40554
+ zips?: Array<(string | {
40555
+ key: string;
40556
+ name?: string;
40557
+ })>;
40558
+ metros?: Array<(string | {
40559
+ key: string;
40560
+ name?: string;
40561
+ })>;
40562
+ });
40520
40563
  locationTargetingType?: GoogleLocationTargetingType;
40521
40564
  };
40522
40565
  };
@@ -40536,7 +40579,7 @@ type UpdateCampaignTargetingResponse = ({
40536
40579
  /**
40537
40580
  * Which targeting fields were applied.
40538
40581
  */
40539
- updated?: Array<('devices' | 'locations' | 'languages' | 'locationTargetingType')>;
40582
+ updated?: Array<('devices' | 'locations' | 'excludedLocations' | 'languages' | 'locationTargetingType')>;
40540
40583
  /**
40541
40584
  * The value read back from Google after the edit.
40542
40585
  */
@@ -40575,6 +40618,17 @@ type UpdateCampaignTargetingResponse = ({
40575
40618
  */
40576
40619
  countryCode?: (string) | null;
40577
40620
  }>;
40621
+ /**
40622
+ * The negative (excluded) location criteria read back after the edit, same item shape as `locations`.
40623
+ */
40624
+ excludedLocations?: Array<{
40625
+ geoTargetId?: string;
40626
+ negative?: boolean;
40627
+ name?: (string) | null;
40628
+ canonicalName?: (string) | null;
40629
+ type?: (string) | null;
40630
+ countryCode?: (string) | null;
40631
+ }>;
40578
40632
  languages?: Array<{
40579
40633
  code?: string;
40580
40634
  id?: string;
@@ -44810,15 +44864,15 @@ type GetAdAccountFinanceError = (unknown | ErrorResponse);
44810
44864
  type GetAdAccountLiveEntitiesData = {
44811
44865
  query: {
44812
44866
  /**
44813
- * Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
44867
+ * Zernio SocialAccount id (posting or ads variant) used to resolve the platform token.
44814
44868
  */
44815
44869
  accountId: string;
44816
44870
  /**
44817
- * Meta ad account id (act_<n>).
44871
+ * Meta ad account id (act_<n>) or TikTok advertiser id (digits).
44818
44872
  */
44819
44873
  adAccountId: string;
44820
44874
  /**
44821
- * Cursor from `paging.campaigns.after` or `paging.adSets.after` of a previous response. Requires `level`.
44875
+ * Cursor from `paging.campaigns.after` or `paging.adSets.after` of a previous response. Requires `level` (and on TikTok the same `limit`).
44822
44876
  */
44823
44877
  after?: string;
44824
44878
  /**
@@ -44833,6 +44887,7 @@ type GetAdAccountLiveEntitiesData = {
44833
44887
  * Comma-separated Meta `effective_status` values to keep: ACTIVE, PAUSED, IN_PROCESS,
44834
44888
  * WITH_ISSUES, DELETED, ARCHIVED, and CAMPAIGN_PAUSED (ad sets only; the campaigns level
44835
44889
  * ignores it). Defaults to every status except DELETED and ARCHIVED. An unknown value is a 400.
44890
+ * TikTok takes a single value: ACTIVE, PAUSED or DELETED (see the description).
44836
44891
  */
44837
44892
  status?: string;
44838
44893
  };
@@ -44840,13 +44895,13 @@ type GetAdAccountLiveEntitiesData = {
44840
44895
  type GetAdAccountLiveEntitiesResponse = ({
44841
44896
  accountId?: string;
44842
44897
  adAccountId?: string;
44843
- platform?: 'facebook';
44898
+ platform?: 'facebook' | 'tiktok';
44844
44899
  /**
44845
44900
  * ISO 4217 code every budget and bid amount is expressed in.
44846
44901
  */
44847
44902
  currency?: string;
44848
44903
  /**
44849
- * When Meta was read.
44904
+ * When the platform was read.
44850
44905
  */
44851
44906
  readAt?: string;
44852
44907
  /**
@@ -44856,11 +44911,11 @@ type GetAdAccountLiveEntitiesResponse = ({
44856
44911
  platformCampaignId?: string;
44857
44912
  campaignName?: (string) | null;
44858
44913
  /**
44859
- * Meta `effective_status`, for example ACTIVE, PAUSED, WITH_ISSUES.
44914
+ * Meta `effective_status` (ACTIVE, PAUSED, WITH_ISSUES...) or TikTok `secondary_status` (CAMPAIGN_STATUS_ENABLE...).
44860
44915
  */
44861
44916
  platformCampaignStatus?: (string) | null;
44862
44917
  /**
44863
- * Meta `status`: the campaign's own switch (ACTIVE, PAUSED, DELETED, ARCHIVED).
44918
+ * The campaign's own switch: Meta `status` (ACTIVE, PAUSED, DELETED, ARCHIVED), or TikTok `operation_status` as ACTIVE (ENABLE) / PAUSED (DISABLE).
44864
44919
  */
44865
44920
  configuredStatus?: (string) | null;
44866
44921
  /**
@@ -44875,23 +44930,27 @@ type GetAdAccountLiveEntitiesResponse = ({
44875
44930
  type?: 'daily' | 'lifetime';
44876
44931
  } | null;
44877
44932
  /**
44878
- * Meta `daily_budget` in whole units of `currency`.
44933
+ * Daily budget in whole units of `currency` (Meta `daily_budget`; TikTok `budget` under a daily budget mode).
44879
44934
  */
44880
44935
  dailyBudget?: (number) | null;
44881
44936
  /**
44882
- * Meta `lifetime_budget` in whole units of `currency`.
44937
+ * Lifetime budget in whole units of `currency` (Meta `lifetime_budget`; TikTok `budget` under BUDGET_MODE_TOTAL).
44883
44938
  */
44884
44939
  lifetimeBudget?: (number) | null;
44885
44940
  /**
44886
- * Meta `budget_remaining` in whole units of `currency`. Null when the campaign has no budget of its own.
44941
+ * TikTok only: `budget_mode` as TikTok reports it (BUDGET_MODE_DAY, BUDGET_MODE_DYNAMIC_DAILY_BUDGET, BUDGET_MODE_TOTAL, BUDGET_MODE_INFINITE).
44942
+ */
44943
+ budgetMode?: (string) | null;
44944
+ /**
44945
+ * Meta `budget_remaining` in whole units of `currency`. Null when the campaign has no budget of its own, and always on TikTok.
44887
44946
  */
44888
44947
  budgetRemaining?: (number) | null;
44889
44948
  /**
44890
- * Campaign spending limit (Meta `spend_cap`) in whole units of `currency`. Null when none is set.
44949
+ * Campaign spending limit (Meta `spend_cap`) in whole units of `currency`. Null when none is set, and always on TikTok.
44891
44950
  */
44892
44951
  spendCap?: (number) | null;
44893
44952
  /**
44894
- * Meta `bid_strategy`, set on campaigns with a campaign budget.
44953
+ * Meta `bid_strategy`, set on campaigns with a campaign budget. Null on TikTok.
44895
44954
  */
44896
44955
  bidStrategy?: (string) | null;
44897
44956
  }>;
@@ -44903,11 +44962,11 @@ type GetAdAccountLiveEntitiesResponse = ({
44903
44962
  adSetName?: (string) | null;
44904
44963
  platformCampaignId?: (string) | null;
44905
44964
  /**
44906
- * Meta `effective_status`, for example ACTIVE, PAUSED, CAMPAIGN_PAUSED.
44965
+ * Meta `effective_status` (ACTIVE, PAUSED, CAMPAIGN_PAUSED...) or TikTok `secondary_status` (ADGROUP_STATUS_DELIVERY_OK, ADGROUP_STATUS_AUDIT...).
44907
44966
  */
44908
44967
  platformAdSetStatus?: (string) | null;
44909
44968
  /**
44910
- * Meta `status`: the ad set's own switch.
44969
+ * The ad set's own switch: Meta `status`, or TikTok `operation_status` as ACTIVE / PAUSED.
44911
44970
  */
44912
44971
  configuredStatus?: (string) | null;
44913
44972
  /**
@@ -44922,41 +44981,45 @@ type GetAdAccountLiveEntitiesResponse = ({
44922
44981
  type?: 'daily' | 'lifetime';
44923
44982
  } | null;
44924
44983
  /**
44925
- * Meta `daily_budget` in whole units of `currency`.
44984
+ * Daily budget in whole units of `currency`.
44926
44985
  */
44927
44986
  dailyBudget?: (number) | null;
44928
44987
  /**
44929
- * Meta `lifetime_budget` in whole units of `currency`.
44988
+ * Lifetime budget in whole units of `currency`.
44930
44989
  */
44931
44990
  lifetimeBudget?: (number) | null;
44932
44991
  /**
44933
- * Meta `budget_remaining` in whole units of `currency`. Null when the ad set has no budget of its own.
44992
+ * TikTok only: `budget_mode` as TikTok reports it.
44993
+ */
44994
+ budgetMode?: (string) | null;
44995
+ /**
44996
+ * Meta `budget_remaining` in whole units of `currency`. Null when the ad set has no budget of its own, and always on TikTok.
44934
44997
  */
44935
44998
  budgetRemaining?: (number) | null;
44936
44999
  /**
44937
- * Meta `bid_strategy`.
45000
+ * Meta `bid_strategy`. On TikTok the ad group's `bid_type` normalized to the same vocabulary (LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, LOWEST_COST_WITH_MIN_ROAS).
44938
45001
  */
44939
45002
  bidStrategy?: (string) | null;
44940
45003
  /**
44941
- * Meta `bid_amount` (bid cap or cost target) in whole units of `currency`. Null when the strategy has none.
45004
+ * Bid cap or cost target in whole units of `currency` (Meta `bid_amount`; TikTok `bid_price`, else `conversion_bid_price`, else `deep_cpa_bid`). Null when the strategy has none.
44942
45005
  */
44943
45006
  bidAmount?: (number) | null;
44944
45007
  /**
44945
- * Meta `optimization_goal`.
45008
+ * Meta or TikTok `optimization_goal`.
44946
45009
  */
44947
45010
  optimizationGoal?: (string) | null;
44948
45011
  /**
44949
- * Meta `billing_event`.
45012
+ * Meta or TikTok `billing_event`.
44950
45013
  */
44951
45014
  billingEvent?: (string) | null;
44952
45015
  /**
44953
- * Meta `promoted_object` verbatim (snake_case).
45016
+ * Meta `promoted_object` verbatim (snake_case). On TikTok `{ pixelId, customEventType, applicationId, customConversionId }` from `pixel_id`, `optimization_event`, `app_id` and `custom_conversion_id`, only the keys TikTok has set; null when none is.
44954
45017
  */
44955
45018
  promotedObject?: {
44956
45019
  [key: string]: unknown;
44957
45020
  } | null;
44958
45021
  /**
44959
- * Meta `targeting` verbatim (snake_case), as Meta returns it now.
45022
+ * The platform's targeting verbatim (snake_case), as it reports it now: Meta `targeting`, or TikTok's ad group targeting fields (location_ids, age_groups, gender, languages, interest_category_ids, audience_ids, placements...).
44960
45023
  */
44961
45024
  targeting?: {
44962
45025
  [key: string]: unknown;
package/dist/index.d.ts CHANGED
@@ -12138,7 +12138,7 @@ type TargetingSpec = {
12138
12138
  address?: string;
12139
12139
  }>;
12140
12140
  /**
12141
- * Geo to exclude from the audience. Mirrors the inclusion geo shape: excluded cities can carry a radius catchment and excluded custom (lat/lng) pins are supported, both on Meta (excluded_geo_locations).
12141
+ * Geo to exclude from the audience. Mirrors the inclusion geo shape: excluded cities can carry a radius catchment and excluded custom (lat/lng) pins are supported, both on Meta (excluded_geo_locations). Google (Search, Display, Performance Max) excludes countries, regions, cities and zips as negative location criteria; countryGroups, places, neighborhoods, customLocations and a city radius return 400 there, and Demand Gen returns 400 for any exclusion.
12142
12142
  */
12143
12143
  excludedLocations?: {
12144
12144
  countries?: Array<(string)>;
@@ -40452,6 +40452,27 @@ type GetCampaignTargetingResponse = ({
40452
40452
  */
40453
40453
  countryCode?: (string) | null;
40454
40454
  }>;
40455
+ /**
40456
+ * The negative (excluded) location criteria, same item shape as `locations` with `negative: true`.
40457
+ */
40458
+ excludedLocations?: Array<{
40459
+ /**
40460
+ * Numeric id from Google's geoTargetConstants/{id}.
40461
+ */
40462
+ geoTargetId?: string;
40463
+ /**
40464
+ * Always true here.
40465
+ */
40466
+ negative?: boolean;
40467
+ name?: (string) | null;
40468
+ canonicalName?: (string) | null;
40469
+ type?: (string) | null;
40470
+ countryCode?: (string) | null;
40471
+ }>;
40472
+ /**
40473
+ * Whether PUT accepts `excludedLocations` for this campaign. False on Demand Gen, which returns 400 for any exclusion.
40474
+ */
40475
+ excludedLocationsEditable?: boolean;
40455
40476
  languages?: Array<{
40456
40477
  /**
40457
40478
  * 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.
@@ -40517,6 +40538,28 @@ type UpdateCampaignTargetingData = {
40517
40538
  * Google's language codes (ISO 639-1, plus variants such as `zh_CN`), e.g. ["en", "de"].
40518
40539
  */
40519
40540
  languages?: Array<(string)>;
40541
+ /**
40542
+ * Locations the campaign never serves in, as a bare country-code array or the nested countries/regions/cities/zips/metros shape. Replaces the excluded set; [] removes every exclusion.
40543
+ */
40544
+ excludedLocations?: (Array<(string)> | {
40545
+ countries?: Array<(string)>;
40546
+ regions?: Array<(string | {
40547
+ key: string;
40548
+ name?: string;
40549
+ })>;
40550
+ cities?: Array<(string | {
40551
+ key: string;
40552
+ name?: string;
40553
+ })>;
40554
+ zips?: Array<(string | {
40555
+ key: string;
40556
+ name?: string;
40557
+ })>;
40558
+ metros?: Array<(string | {
40559
+ key: string;
40560
+ name?: string;
40561
+ })>;
40562
+ });
40520
40563
  locationTargetingType?: GoogleLocationTargetingType;
40521
40564
  };
40522
40565
  };
@@ -40536,7 +40579,7 @@ type UpdateCampaignTargetingResponse = ({
40536
40579
  /**
40537
40580
  * Which targeting fields were applied.
40538
40581
  */
40539
- updated?: Array<('devices' | 'locations' | 'languages' | 'locationTargetingType')>;
40582
+ updated?: Array<('devices' | 'locations' | 'excludedLocations' | 'languages' | 'locationTargetingType')>;
40540
40583
  /**
40541
40584
  * The value read back from Google after the edit.
40542
40585
  */
@@ -40575,6 +40618,17 @@ type UpdateCampaignTargetingResponse = ({
40575
40618
  */
40576
40619
  countryCode?: (string) | null;
40577
40620
  }>;
40621
+ /**
40622
+ * The negative (excluded) location criteria read back after the edit, same item shape as `locations`.
40623
+ */
40624
+ excludedLocations?: Array<{
40625
+ geoTargetId?: string;
40626
+ negative?: boolean;
40627
+ name?: (string) | null;
40628
+ canonicalName?: (string) | null;
40629
+ type?: (string) | null;
40630
+ countryCode?: (string) | null;
40631
+ }>;
40578
40632
  languages?: Array<{
40579
40633
  code?: string;
40580
40634
  id?: string;
@@ -44810,15 +44864,15 @@ type GetAdAccountFinanceError = (unknown | ErrorResponse);
44810
44864
  type GetAdAccountLiveEntitiesData = {
44811
44865
  query: {
44812
44866
  /**
44813
- * Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
44867
+ * Zernio SocialAccount id (posting or ads variant) used to resolve the platform token.
44814
44868
  */
44815
44869
  accountId: string;
44816
44870
  /**
44817
- * Meta ad account id (act_<n>).
44871
+ * Meta ad account id (act_<n>) or TikTok advertiser id (digits).
44818
44872
  */
44819
44873
  adAccountId: string;
44820
44874
  /**
44821
- * Cursor from `paging.campaigns.after` or `paging.adSets.after` of a previous response. Requires `level`.
44875
+ * Cursor from `paging.campaigns.after` or `paging.adSets.after` of a previous response. Requires `level` (and on TikTok the same `limit`).
44822
44876
  */
44823
44877
  after?: string;
44824
44878
  /**
@@ -44833,6 +44887,7 @@ type GetAdAccountLiveEntitiesData = {
44833
44887
  * Comma-separated Meta `effective_status` values to keep: ACTIVE, PAUSED, IN_PROCESS,
44834
44888
  * WITH_ISSUES, DELETED, ARCHIVED, and CAMPAIGN_PAUSED (ad sets only; the campaigns level
44835
44889
  * ignores it). Defaults to every status except DELETED and ARCHIVED. An unknown value is a 400.
44890
+ * TikTok takes a single value: ACTIVE, PAUSED or DELETED (see the description).
44836
44891
  */
44837
44892
  status?: string;
44838
44893
  };
@@ -44840,13 +44895,13 @@ type GetAdAccountLiveEntitiesData = {
44840
44895
  type GetAdAccountLiveEntitiesResponse = ({
44841
44896
  accountId?: string;
44842
44897
  adAccountId?: string;
44843
- platform?: 'facebook';
44898
+ platform?: 'facebook' | 'tiktok';
44844
44899
  /**
44845
44900
  * ISO 4217 code every budget and bid amount is expressed in.
44846
44901
  */
44847
44902
  currency?: string;
44848
44903
  /**
44849
- * When Meta was read.
44904
+ * When the platform was read.
44850
44905
  */
44851
44906
  readAt?: string;
44852
44907
  /**
@@ -44856,11 +44911,11 @@ type GetAdAccountLiveEntitiesResponse = ({
44856
44911
  platformCampaignId?: string;
44857
44912
  campaignName?: (string) | null;
44858
44913
  /**
44859
- * Meta `effective_status`, for example ACTIVE, PAUSED, WITH_ISSUES.
44914
+ * Meta `effective_status` (ACTIVE, PAUSED, WITH_ISSUES...) or TikTok `secondary_status` (CAMPAIGN_STATUS_ENABLE...).
44860
44915
  */
44861
44916
  platformCampaignStatus?: (string) | null;
44862
44917
  /**
44863
- * Meta `status`: the campaign's own switch (ACTIVE, PAUSED, DELETED, ARCHIVED).
44918
+ * The campaign's own switch: Meta `status` (ACTIVE, PAUSED, DELETED, ARCHIVED), or TikTok `operation_status` as ACTIVE (ENABLE) / PAUSED (DISABLE).
44864
44919
  */
44865
44920
  configuredStatus?: (string) | null;
44866
44921
  /**
@@ -44875,23 +44930,27 @@ type GetAdAccountLiveEntitiesResponse = ({
44875
44930
  type?: 'daily' | 'lifetime';
44876
44931
  } | null;
44877
44932
  /**
44878
- * Meta `daily_budget` in whole units of `currency`.
44933
+ * Daily budget in whole units of `currency` (Meta `daily_budget`; TikTok `budget` under a daily budget mode).
44879
44934
  */
44880
44935
  dailyBudget?: (number) | null;
44881
44936
  /**
44882
- * Meta `lifetime_budget` in whole units of `currency`.
44937
+ * Lifetime budget in whole units of `currency` (Meta `lifetime_budget`; TikTok `budget` under BUDGET_MODE_TOTAL).
44883
44938
  */
44884
44939
  lifetimeBudget?: (number) | null;
44885
44940
  /**
44886
- * Meta `budget_remaining` in whole units of `currency`. Null when the campaign has no budget of its own.
44941
+ * TikTok only: `budget_mode` as TikTok reports it (BUDGET_MODE_DAY, BUDGET_MODE_DYNAMIC_DAILY_BUDGET, BUDGET_MODE_TOTAL, BUDGET_MODE_INFINITE).
44942
+ */
44943
+ budgetMode?: (string) | null;
44944
+ /**
44945
+ * Meta `budget_remaining` in whole units of `currency`. Null when the campaign has no budget of its own, and always on TikTok.
44887
44946
  */
44888
44947
  budgetRemaining?: (number) | null;
44889
44948
  /**
44890
- * Campaign spending limit (Meta `spend_cap`) in whole units of `currency`. Null when none is set.
44949
+ * Campaign spending limit (Meta `spend_cap`) in whole units of `currency`. Null when none is set, and always on TikTok.
44891
44950
  */
44892
44951
  spendCap?: (number) | null;
44893
44952
  /**
44894
- * Meta `bid_strategy`, set on campaigns with a campaign budget.
44953
+ * Meta `bid_strategy`, set on campaigns with a campaign budget. Null on TikTok.
44895
44954
  */
44896
44955
  bidStrategy?: (string) | null;
44897
44956
  }>;
@@ -44903,11 +44962,11 @@ type GetAdAccountLiveEntitiesResponse = ({
44903
44962
  adSetName?: (string) | null;
44904
44963
  platformCampaignId?: (string) | null;
44905
44964
  /**
44906
- * Meta `effective_status`, for example ACTIVE, PAUSED, CAMPAIGN_PAUSED.
44965
+ * Meta `effective_status` (ACTIVE, PAUSED, CAMPAIGN_PAUSED...) or TikTok `secondary_status` (ADGROUP_STATUS_DELIVERY_OK, ADGROUP_STATUS_AUDIT...).
44907
44966
  */
44908
44967
  platformAdSetStatus?: (string) | null;
44909
44968
  /**
44910
- * Meta `status`: the ad set's own switch.
44969
+ * The ad set's own switch: Meta `status`, or TikTok `operation_status` as ACTIVE / PAUSED.
44911
44970
  */
44912
44971
  configuredStatus?: (string) | null;
44913
44972
  /**
@@ -44922,41 +44981,45 @@ type GetAdAccountLiveEntitiesResponse = ({
44922
44981
  type?: 'daily' | 'lifetime';
44923
44982
  } | null;
44924
44983
  /**
44925
- * Meta `daily_budget` in whole units of `currency`.
44984
+ * Daily budget in whole units of `currency`.
44926
44985
  */
44927
44986
  dailyBudget?: (number) | null;
44928
44987
  /**
44929
- * Meta `lifetime_budget` in whole units of `currency`.
44988
+ * Lifetime budget in whole units of `currency`.
44930
44989
  */
44931
44990
  lifetimeBudget?: (number) | null;
44932
44991
  /**
44933
- * Meta `budget_remaining` in whole units of `currency`. Null when the ad set has no budget of its own.
44992
+ * TikTok only: `budget_mode` as TikTok reports it.
44993
+ */
44994
+ budgetMode?: (string) | null;
44995
+ /**
44996
+ * Meta `budget_remaining` in whole units of `currency`. Null when the ad set has no budget of its own, and always on TikTok.
44934
44997
  */
44935
44998
  budgetRemaining?: (number) | null;
44936
44999
  /**
44937
- * Meta `bid_strategy`.
45000
+ * Meta `bid_strategy`. On TikTok the ad group's `bid_type` normalized to the same vocabulary (LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, LOWEST_COST_WITH_MIN_ROAS).
44938
45001
  */
44939
45002
  bidStrategy?: (string) | null;
44940
45003
  /**
44941
- * Meta `bid_amount` (bid cap or cost target) in whole units of `currency`. Null when the strategy has none.
45004
+ * Bid cap or cost target in whole units of `currency` (Meta `bid_amount`; TikTok `bid_price`, else `conversion_bid_price`, else `deep_cpa_bid`). Null when the strategy has none.
44942
45005
  */
44943
45006
  bidAmount?: (number) | null;
44944
45007
  /**
44945
- * Meta `optimization_goal`.
45008
+ * Meta or TikTok `optimization_goal`.
44946
45009
  */
44947
45010
  optimizationGoal?: (string) | null;
44948
45011
  /**
44949
- * Meta `billing_event`.
45012
+ * Meta or TikTok `billing_event`.
44950
45013
  */
44951
45014
  billingEvent?: (string) | null;
44952
45015
  /**
44953
- * Meta `promoted_object` verbatim (snake_case).
45016
+ * Meta `promoted_object` verbatim (snake_case). On TikTok `{ pixelId, customEventType, applicationId, customConversionId }` from `pixel_id`, `optimization_event`, `app_id` and `custom_conversion_id`, only the keys TikTok has set; null when none is.
44954
45017
  */
44955
45018
  promotedObject?: {
44956
45019
  [key: string]: unknown;
44957
45020
  } | null;
44958
45021
  /**
44959
- * Meta `targeting` verbatim (snake_case), as Meta returns it now.
45022
+ * The platform's targeting verbatim (snake_case), as it reports it now: Meta `targeting`, or TikTok's ad group targeting fields (location_ids, age_groups, gender, languages, interest_category_ids, audience_ids, placements...).
44960
45023
  */
44961
45024
  targeting?: {
44962
45025
  [key: string]: unknown;
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: "@getlatedev/node",
39
- version: "0.2.1113",
39
+ version: "0.2.1115",
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: "@getlatedev/node",
8
- version: "0.2.1113",
8
+ version: "0.2.1115",
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": "@getlatedev/node",
3
- "version": "0.2.1113",
3
+ "version": "0.2.1115",
4
4
  "description": "The official Node.js library for the Zernio API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -9941,7 +9941,7 @@ export const duplicateAdCampaign = <ThrowOnError extends boolean = false>(option
9941
9941
  };
9942
9942
 
9943
9943
  /**
9944
- * Read a Google campaign's device, location, and language targeting
9944
+ * Read a Google campaign's device, location, excluded location, and language targeting
9945
9945
  * Google Ads compliance requires geo, language, budget, and bidding targeting
9946
9946
  * set at creation to stay editable afterwards; this reads the campaign state
9947
9947
  * so an integrator can build an editor around it. Cached for the quota window
@@ -9954,6 +9954,11 @@ export const duplicateAdCampaign = <ThrowOnError extends boolean = false>(option
9954
9954
  * for that device, `null` when it has none, and `0` when the device is
9955
9955
  * switched off; `included` is false for exactly that case.
9956
9956
  *
9957
+ * `excludedLocations` lists the campaign's negative location criteria (the
9958
+ * places it never serves in). `locations` still lists every location criterion,
9959
+ * each flagged with `negative`, so a client reading the targeted set filters
9960
+ * `negative: false`.
9961
+ *
9957
9962
  */
9958
9963
  export const getCampaignTargeting = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetCampaignTargetingData, ThrowOnError>) => {
9959
9964
  return (options?.client ?? client).get<GetCampaignTargetingResponse, GetCampaignTargetingError, ThrowOnError>({
@@ -9963,10 +9968,10 @@ export const getCampaignTargeting = <ThrowOnError extends boolean = false>(optio
9963
9968
  };
9964
9969
 
9965
9970
  /**
9966
- * Edit a Google campaign's device, location, or language targeting
9971
+ * Edit a Google campaign's device, location, excluded location, or language targeting
9967
9972
  * Google Ads compliance row M.10: geo and language targeting set at
9968
9973
  * creation must stay editable afterwards. Send at least one of `devices`,
9969
- * `locations`, `languages`, `locationTargetingType`; each provided field REPLACES that field's
9974
+ * `locations`, `excludedLocations`, `languages`, `locationTargetingType`; each provided field REPLACES that field's
9970
9975
  * existing criteria on the campaign (a full set, not a delta). Fields left
9971
9976
  * out of the body are untouched. Google only; every other platform returns
9972
9977
  * 501.
@@ -9978,11 +9983,19 @@ export const getCampaignTargeting = <ThrowOnError extends boolean = false>(optio
9978
9983
  *
9979
9984
  * `locations` accepts the same shapes as campaign creation: a bare array of
9980
9985
  * ISO country codes, or an object with `countries`/`regions`/`cities`/`zips`/`metros`
9981
- * key lists (`key` from GET /v1/ads/targeting/search?dimension=geo). Negative
9982
- * (excluded) locations are left untouched by this endpoint. An empty location list
9986
+ * key lists (`key` from GET /v1/ads/targeting/search?dimension=geo). Excluded
9987
+ * locations are left untouched by `locations`. An empty location list
9983
9988
  * returns 400 instead of removing every criterion: a Google campaign with no location
9984
9989
  * criteria targets every country, so omit `locations` to leave targeting alone.
9985
9990
  *
9991
+ * `excludedLocations` takes the same two shapes and replaces the campaign's negative
9992
+ * location criteria (the places it never serves in), leaving the targeted `locations`
9993
+ * untouched. An empty list (or `{}`) removes every exclusion. Radius exclusions are
9994
+ * not supported. A place cannot be both targeted and excluded: a request whose result
9995
+ * would leave one on both sides returns 400 before anything is written, and moving a
9996
+ * place from one side to the other in the same request is applied atomically. Example:
9997
+ * `{ "platform": "google", "targeting": { "excludedLocations": { "countries": ["CA"], "regions": ["21137"] } } }`.
9998
+ *
9986
9999
  * The removes and the creates go out in ONE Google `googleAds:mutate`, so a failed
9987
10000
  * edit leaves the campaign's previous set intact rather than a half-applied one.
9988
10001
  *
@@ -9994,7 +10007,7 @@ export const getCampaignTargeting = <ThrowOnError extends boolean = false>(optio
9994
10007
  * (also people searching for or interested in them). Example:
9995
10008
  * `{ "platform": "google", "targeting": { "locationTargetingType": "presence" } }`.
9996
10009
  *
9997
- * The response includes the refreshed `devices`/`locations`/`languages` state
10010
+ * The response includes the refreshed `devices`/`locations`/`excludedLocations`/`languages` state
9998
10011
  * read back from Google after the edit, and invalidates the cached copy
9999
10012
  * `GET` on this campaign would otherwise keep serving.
10000
10013
  *
@@ -10005,6 +10018,7 @@ export const getCampaignTargeting = <ThrowOnError extends boolean = false>(optio
10005
10018
  * returns 400 naming them: edit each one with PUT /v1/ads/{adId} `targeting` on an ad of
10006
10019
  * that ad group. Campaigns migrated from Discovery that still target on the campaign keep
10007
10020
  * being written there. `devices` and `locationTargetingType` stay campaign-level.
10021
+ * `excludedLocations` is not available on Demand Gen yet and returns 400.
10008
10022
  *
10009
10023
  */
10010
10024
  export const updateCampaignTargeting = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UpdateCampaignTargetingData, ThrowOnError>) => {
@@ -11811,25 +11825,40 @@ export const getAdAccountFinance = <ThrowOnError extends boolean = false>(option
11811
11825
 
11812
11826
  /**
11813
11827
  * Read an ad account's campaigns and ad sets live
11814
- * Reads the campaigns and ad sets of one Meta ad account **live from Meta**, in a single
11815
- * Graph call per request (the account's `/campaigns` and `/adsets` edges, filtered by
11816
- * `effective_status`), so it is cheap enough to run before every write: for example a
11817
- * per-ad-account spend ceiling that must see the current `daily_budget` / `lifetime_budget`
11818
- * rather than the synced copy.
11828
+ * Reads the campaigns and ad sets of one Meta ad account or TikTok advertiser **live from
11829
+ * the platform**, so it is cheap enough to run before every write: for example a
11830
+ * per-ad-account spend ceiling that must see the current daily / lifetime budget rather
11831
+ * than the synced copy. On Meta it is a single Graph call per request (the account's
11832
+ * `/campaigns` and `/adsets` edges, filtered by `effective_status`); on TikTok one
11833
+ * `campaign/get` and one `adgroup/get` page (TikTok ad groups are returned as `adSets`).
11819
11834
  *
11820
11835
  * **Live vs synced.** GET /v1/ads/campaigns and GET /v1/ads/ad-sets serve Zernio's synced
11821
11836
  * store, refreshed by background sync (typically 15 to 60 minutes behind Meta), and their
11822
11837
  * `live=true` re-reads only the on/off switches of at most 20 objects. This endpoint returns
11823
11838
  * what Meta reports at `readAt`, for every matching campaign and ad set, and stores nothing.
11824
11839
  *
11825
- * Budgets and bid amounts are converted from Meta's minor units to whole units of
11826
- * `currency`, the same units as the synced rows. A campaign with a campaign budget
11827
- * (Advantage+ campaign budget) carries `budget` and its ad sets have `budget: null`;
11828
- * otherwise each ad set carries its own.
11840
+ * Budgets and bid amounts are in whole units of `currency`, the same units as the synced
11841
+ * rows (Meta's minor units are converted; TikTok already reports whole units). A campaign
11842
+ * with a campaign budget (Meta Advantage+ campaign budget, TikTok campaign budget
11843
+ * optimization) carries `budget`; otherwise each ad set carries its own.
11829
11844
  *
11830
11845
  * Each level returns at most `limit` rows. When more match, `paging.<level>.after` is a
11831
11846
  * cursor: pass it back as `after` together with `level` to read the next page of that
11832
- * level only. Other platforms answer 501 rather than serving synced data.
11847
+ * level only. TikTok pages by number, so a TikTok cursor must be sent with the same
11848
+ * `limit` that produced it (another `limit` is a 400). Other platforms answer 501 rather
11849
+ * than serving synced data.
11850
+ *
11851
+ * **TikTok specifics.** `status` maps to TikTok's `primary_status` filter, which takes one
11852
+ * value: ACTIVE = delivering (`STATUS_DELIVERY_OK`), PAUSED = switched off
11853
+ * (`STATUS_DISABLE`), DELETED = `STATUS_DELETE`; omitted = every status except deleted
11854
+ * (`STATUS_NOT_DELETE`, which includes enabled entities that are not delivering, such as
11855
+ * an ad group in review). Several values, or IN_PROCESS, WITH_ISSUES, CAMPAIGN_PAUSED and
11856
+ * ARCHIVED, are a 400. `budgetRemaining` and `spendCap` are always null (TikTok reports
11857
+ * neither), campaign `bidStrategy` is null (TikTok bids per ad group), ad set `bidStrategy`
11858
+ * is normalized to the Meta vocabulary like GET /v1/ads, `promotedObject` is
11859
+ * `{ pixelId, customEventType, applicationId, customConversionId }` (the keys TikTok has
11860
+ * set, as POST /v1/ads/create takes them), and `targeting` holds TikTok's targeting
11861
+ * fields verbatim.
11833
11862
  */
11834
11863
  export const getAdAccountLiveEntities = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdAccountLiveEntitiesData, ThrowOnError>) => {
11835
11864
  return (options?.client ?? client).get<GetAdAccountLiveEntitiesResponse, GetAdAccountLiveEntitiesError, ThrowOnError>({
@@ -10612,7 +10612,7 @@ export type TargetingSpec = {
10612
10612
  address?: string;
10613
10613
  }>;
10614
10614
  /**
10615
- * Geo to exclude from the audience. Mirrors the inclusion geo shape: excluded cities can carry a radius catchment and excluded custom (lat/lng) pins are supported, both on Meta (excluded_geo_locations).
10615
+ * Geo to exclude from the audience. Mirrors the inclusion geo shape: excluded cities can carry a radius catchment and excluded custom (lat/lng) pins are supported, both on Meta (excluded_geo_locations). Google (Search, Display, Performance Max) excludes countries, regions, cities and zips as negative location criteria; countryGroups, places, neighborhoods, customLocations and a city radius return 400 there, and Demand Gen returns 400 for any exclusion.
10616
10616
  */
10617
10617
  excludedLocations?: {
10618
10618
  countries?: Array<(string)>;
@@ -40898,6 +40898,27 @@ export type GetCampaignTargetingResponse = ({
40898
40898
  */
40899
40899
  countryCode?: (string) | null;
40900
40900
  }>;
40901
+ /**
40902
+ * The negative (excluded) location criteria, same item shape as `locations` with `negative: true`.
40903
+ */
40904
+ excludedLocations?: Array<{
40905
+ /**
40906
+ * Numeric id from Google's geoTargetConstants/{id}.
40907
+ */
40908
+ geoTargetId?: string;
40909
+ /**
40910
+ * Always true here.
40911
+ */
40912
+ negative?: boolean;
40913
+ name?: (string) | null;
40914
+ canonicalName?: (string) | null;
40915
+ type?: (string) | null;
40916
+ countryCode?: (string) | null;
40917
+ }>;
40918
+ /**
40919
+ * Whether PUT accepts `excludedLocations` for this campaign. False on Demand Gen, which returns 400 for any exclusion.
40920
+ */
40921
+ excludedLocationsEditable?: boolean;
40901
40922
  languages?: Array<{
40902
40923
  /**
40903
40924
  * 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.
@@ -40965,6 +40986,28 @@ export type UpdateCampaignTargetingData = {
40965
40986
  * Google's language codes (ISO 639-1, plus variants such as `zh_CN`), e.g. ["en", "de"].
40966
40987
  */
40967
40988
  languages?: Array<(string)>;
40989
+ /**
40990
+ * Locations the campaign never serves in, as a bare country-code array or the nested countries/regions/cities/zips/metros shape. Replaces the excluded set; [] removes every exclusion.
40991
+ */
40992
+ excludedLocations?: (Array<(string)> | {
40993
+ countries?: Array<(string)>;
40994
+ regions?: Array<(string | {
40995
+ key: string;
40996
+ name?: string;
40997
+ })>;
40998
+ cities?: Array<(string | {
40999
+ key: string;
41000
+ name?: string;
41001
+ })>;
41002
+ zips?: Array<(string | {
41003
+ key: string;
41004
+ name?: string;
41005
+ })>;
41006
+ metros?: Array<(string | {
41007
+ key: string;
41008
+ name?: string;
41009
+ })>;
41010
+ });
40968
41011
  locationTargetingType?: GoogleLocationTargetingType;
40969
41012
  };
40970
41013
  };
@@ -40985,7 +41028,7 @@ export type UpdateCampaignTargetingResponse = ({
40985
41028
  /**
40986
41029
  * Which targeting fields were applied.
40987
41030
  */
40988
- updated?: Array<('devices' | 'locations' | 'languages' | 'locationTargetingType')>;
41031
+ updated?: Array<('devices' | 'locations' | 'excludedLocations' | 'languages' | 'locationTargetingType')>;
40989
41032
  /**
40990
41033
  * The value read back from Google after the edit.
40991
41034
  */
@@ -41024,6 +41067,17 @@ export type UpdateCampaignTargetingResponse = ({
41024
41067
  */
41025
41068
  countryCode?: (string) | null;
41026
41069
  }>;
41070
+ /**
41071
+ * The negative (excluded) location criteria read back after the edit, same item shape as `locations`.
41072
+ */
41073
+ excludedLocations?: Array<{
41074
+ geoTargetId?: string;
41075
+ negative?: boolean;
41076
+ name?: (string) | null;
41077
+ canonicalName?: (string) | null;
41078
+ type?: (string) | null;
41079
+ countryCode?: (string) | null;
41080
+ }>;
41027
41081
  languages?: Array<{
41028
41082
  code?: string;
41029
41083
  id?: string;
@@ -45567,15 +45621,15 @@ export type GetAdAccountFinanceError = (unknown | ErrorResponse);
45567
45621
  export type GetAdAccountLiveEntitiesData = {
45568
45622
  query: {
45569
45623
  /**
45570
- * Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
45624
+ * Zernio SocialAccount id (posting or ads variant) used to resolve the platform token.
45571
45625
  */
45572
45626
  accountId: string;
45573
45627
  /**
45574
- * Meta ad account id (act_<n>).
45628
+ * Meta ad account id (act_<n>) or TikTok advertiser id (digits).
45575
45629
  */
45576
45630
  adAccountId: string;
45577
45631
  /**
45578
- * Cursor from `paging.campaigns.after` or `paging.adSets.after` of a previous response. Requires `level`.
45632
+ * Cursor from `paging.campaigns.after` or `paging.adSets.after` of a previous response. Requires `level` (and on TikTok the same `limit`).
45579
45633
  */
45580
45634
  after?: string;
45581
45635
  /**
@@ -45590,6 +45644,7 @@ export type GetAdAccountLiveEntitiesData = {
45590
45644
  * Comma-separated Meta `effective_status` values to keep: ACTIVE, PAUSED, IN_PROCESS,
45591
45645
  * WITH_ISSUES, DELETED, ARCHIVED, and CAMPAIGN_PAUSED (ad sets only; the campaigns level
45592
45646
  * ignores it). Defaults to every status except DELETED and ARCHIVED. An unknown value is a 400.
45647
+ * TikTok takes a single value: ACTIVE, PAUSED or DELETED (see the description).
45593
45648
  */
45594
45649
  status?: string;
45595
45650
  };
@@ -45598,13 +45653,13 @@ export type GetAdAccountLiveEntitiesData = {
45598
45653
  export type GetAdAccountLiveEntitiesResponse = ({
45599
45654
  accountId?: string;
45600
45655
  adAccountId?: string;
45601
- platform?: 'facebook';
45656
+ platform?: 'facebook' | 'tiktok';
45602
45657
  /**
45603
45658
  * ISO 4217 code every budget and bid amount is expressed in.
45604
45659
  */
45605
45660
  currency?: string;
45606
45661
  /**
45607
- * When Meta was read.
45662
+ * When the platform was read.
45608
45663
  */
45609
45664
  readAt?: string;
45610
45665
  /**
@@ -45614,11 +45669,11 @@ export type GetAdAccountLiveEntitiesResponse = ({
45614
45669
  platformCampaignId?: string;
45615
45670
  campaignName?: (string) | null;
45616
45671
  /**
45617
- * Meta `effective_status`, for example ACTIVE, PAUSED, WITH_ISSUES.
45672
+ * Meta `effective_status` (ACTIVE, PAUSED, WITH_ISSUES...) or TikTok `secondary_status` (CAMPAIGN_STATUS_ENABLE...).
45618
45673
  */
45619
45674
  platformCampaignStatus?: (string) | null;
45620
45675
  /**
45621
- * Meta `status`: the campaign's own switch (ACTIVE, PAUSED, DELETED, ARCHIVED).
45676
+ * The campaign's own switch: Meta `status` (ACTIVE, PAUSED, DELETED, ARCHIVED), or TikTok `operation_status` as ACTIVE (ENABLE) / PAUSED (DISABLE).
45622
45677
  */
45623
45678
  configuredStatus?: (string) | null;
45624
45679
  /**
@@ -45633,23 +45688,27 @@ export type GetAdAccountLiveEntitiesResponse = ({
45633
45688
  type?: 'daily' | 'lifetime';
45634
45689
  } | null;
45635
45690
  /**
45636
- * Meta `daily_budget` in whole units of `currency`.
45691
+ * Daily budget in whole units of `currency` (Meta `daily_budget`; TikTok `budget` under a daily budget mode).
45637
45692
  */
45638
45693
  dailyBudget?: (number) | null;
45639
45694
  /**
45640
- * Meta `lifetime_budget` in whole units of `currency`.
45695
+ * Lifetime budget in whole units of `currency` (Meta `lifetime_budget`; TikTok `budget` under BUDGET_MODE_TOTAL).
45641
45696
  */
45642
45697
  lifetimeBudget?: (number) | null;
45643
45698
  /**
45644
- * Meta `budget_remaining` in whole units of `currency`. Null when the campaign has no budget of its own.
45699
+ * TikTok only: `budget_mode` as TikTok reports it (BUDGET_MODE_DAY, BUDGET_MODE_DYNAMIC_DAILY_BUDGET, BUDGET_MODE_TOTAL, BUDGET_MODE_INFINITE).
45700
+ */
45701
+ budgetMode?: (string) | null;
45702
+ /**
45703
+ * Meta `budget_remaining` in whole units of `currency`. Null when the campaign has no budget of its own, and always on TikTok.
45645
45704
  */
45646
45705
  budgetRemaining?: (number) | null;
45647
45706
  /**
45648
- * Campaign spending limit (Meta `spend_cap`) in whole units of `currency`. Null when none is set.
45707
+ * Campaign spending limit (Meta `spend_cap`) in whole units of `currency`. Null when none is set, and always on TikTok.
45649
45708
  */
45650
45709
  spendCap?: (number) | null;
45651
45710
  /**
45652
- * Meta `bid_strategy`, set on campaigns with a campaign budget.
45711
+ * Meta `bid_strategy`, set on campaigns with a campaign budget. Null on TikTok.
45653
45712
  */
45654
45713
  bidStrategy?: (string) | null;
45655
45714
  }>;
@@ -45661,11 +45720,11 @@ export type GetAdAccountLiveEntitiesResponse = ({
45661
45720
  adSetName?: (string) | null;
45662
45721
  platformCampaignId?: (string) | null;
45663
45722
  /**
45664
- * Meta `effective_status`, for example ACTIVE, PAUSED, CAMPAIGN_PAUSED.
45723
+ * Meta `effective_status` (ACTIVE, PAUSED, CAMPAIGN_PAUSED...) or TikTok `secondary_status` (ADGROUP_STATUS_DELIVERY_OK, ADGROUP_STATUS_AUDIT...).
45665
45724
  */
45666
45725
  platformAdSetStatus?: (string) | null;
45667
45726
  /**
45668
- * Meta `status`: the ad set's own switch.
45727
+ * The ad set's own switch: Meta `status`, or TikTok `operation_status` as ACTIVE / PAUSED.
45669
45728
  */
45670
45729
  configuredStatus?: (string) | null;
45671
45730
  /**
@@ -45680,41 +45739,45 @@ export type GetAdAccountLiveEntitiesResponse = ({
45680
45739
  type?: 'daily' | 'lifetime';
45681
45740
  } | null;
45682
45741
  /**
45683
- * Meta `daily_budget` in whole units of `currency`.
45742
+ * Daily budget in whole units of `currency`.
45684
45743
  */
45685
45744
  dailyBudget?: (number) | null;
45686
45745
  /**
45687
- * Meta `lifetime_budget` in whole units of `currency`.
45746
+ * Lifetime budget in whole units of `currency`.
45688
45747
  */
45689
45748
  lifetimeBudget?: (number) | null;
45690
45749
  /**
45691
- * Meta `budget_remaining` in whole units of `currency`. Null when the ad set has no budget of its own.
45750
+ * TikTok only: `budget_mode` as TikTok reports it.
45751
+ */
45752
+ budgetMode?: (string) | null;
45753
+ /**
45754
+ * Meta `budget_remaining` in whole units of `currency`. Null when the ad set has no budget of its own, and always on TikTok.
45692
45755
  */
45693
45756
  budgetRemaining?: (number) | null;
45694
45757
  /**
45695
- * Meta `bid_strategy`.
45758
+ * Meta `bid_strategy`. On TikTok the ad group's `bid_type` normalized to the same vocabulary (LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, LOWEST_COST_WITH_MIN_ROAS).
45696
45759
  */
45697
45760
  bidStrategy?: (string) | null;
45698
45761
  /**
45699
- * Meta `bid_amount` (bid cap or cost target) in whole units of `currency`. Null when the strategy has none.
45762
+ * Bid cap or cost target in whole units of `currency` (Meta `bid_amount`; TikTok `bid_price`, else `conversion_bid_price`, else `deep_cpa_bid`). Null when the strategy has none.
45700
45763
  */
45701
45764
  bidAmount?: (number) | null;
45702
45765
  /**
45703
- * Meta `optimization_goal`.
45766
+ * Meta or TikTok `optimization_goal`.
45704
45767
  */
45705
45768
  optimizationGoal?: (string) | null;
45706
45769
  /**
45707
- * Meta `billing_event`.
45770
+ * Meta or TikTok `billing_event`.
45708
45771
  */
45709
45772
  billingEvent?: (string) | null;
45710
45773
  /**
45711
- * Meta `promoted_object` verbatim (snake_case).
45774
+ * Meta `promoted_object` verbatim (snake_case). On TikTok `{ pixelId, customEventType, applicationId, customConversionId }` from `pixel_id`, `optimization_event`, `app_id` and `custom_conversion_id`, only the keys TikTok has set; null when none is.
45712
45775
  */
45713
45776
  promotedObject?: {
45714
45777
  [key: string]: unknown;
45715
45778
  } | null;
45716
45779
  /**
45717
- * Meta `targeting` verbatim (snake_case), as Meta returns it now.
45780
+ * The platform's targeting verbatim (snake_case), as it reports it now: Meta `targeting`, or TikTok's ad group targeting fields (location_ids, age_groups, gender, languages, interest_category_ids, audience_ids, placements...).
45718
45781
  */
45719
45782
  targeting?: {
45720
45783
  [key: string]: unknown;