@zernio/node 0.2.545 → 0.2.547

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
@@ -1926,43 +1926,43 @@ type AdMetrics = {
1926
1926
  */
1927
1927
  roas?: number;
1928
1928
  /**
1929
- * Meta video ads only (0 for non-video ads and other platforms), like all video* fields below. Number of times the video started playing (Meta `video_play_actions`), summed over the date range and across children at ad-set/campaign level.
1929
+ * Number of times the video started playing, summed over the date range and across children at ad-set/campaign level. 0 for non-video ads. Sources: Meta `video_play_actions`, TikTok `video_play_actions`.
1930
1930
  */
1931
1931
  videoPlayActions?: number;
1932
1932
  /**
1933
- * Views of at least 30 seconds (or to the end, for shorter videos). Meta `video_30_sec_watched_actions`.
1933
+ * Views of at least 30 seconds (or to the end, for shorter videos). Sources: Meta `video_30_sec_watched_actions` (Meta only).
1934
1934
  */
1935
1935
  video30SecWatchedActions?: number;
1936
1936
  /**
1937
- * ThruPlays (watched to completion, or at least 15 seconds). Meta `video_thruplay_watched_actions`.
1937
+ * ThruPlays (watched to completion, or at least 15 seconds). Sources: Meta `video_thruplay_watched_actions` (Meta only).
1938
1938
  */
1939
1939
  videoThruplayWatchedActions?: number;
1940
1940
  /**
1941
- * Views reaching 25% of the video's length. With the other percentile fields, powers hook/hold/drop-off analysis (e.g. hook rate = videoP25WatchedActions / videoPlayActions). Meta `video_p25_watched_actions`.
1941
+ * Views reaching 25% of the video's length. With the other percentile fields, powers hook/hold/drop-off analysis (e.g. hook rate = videoP25WatchedActions / videoPlayActions). Sources: Meta `video_p25_watched_actions`, TikTok `video_views_p25`.
1942
1942
  */
1943
1943
  videoP25WatchedActions?: number;
1944
1944
  /**
1945
- * Views reaching 50% of the video's length. Meta `video_p50_watched_actions`.
1945
+ * Views reaching 50% of the video's length. Sources: Meta `video_p50_watched_actions`, TikTok `video_views_p50`.
1946
1946
  */
1947
1947
  videoP50WatchedActions?: number;
1948
1948
  /**
1949
- * Views reaching 75% of the video's length. Meta `video_p75_watched_actions`.
1949
+ * Views reaching 75% of the video's length. Sources: Meta `video_p75_watched_actions`, TikTok `video_views_p75`.
1950
1950
  */
1951
1951
  videoP75WatchedActions?: number;
1952
1952
  /**
1953
- * Views reaching 95% of the video's length. Meta `video_p95_watched_actions`.
1953
+ * Views reaching 95% of the video's length. Sources: Meta `video_p95_watched_actions` (Meta only).
1954
1954
  */
1955
1955
  videoP95WatchedActions?: number;
1956
1956
  /**
1957
- * Views reaching 100% of the video's length. Meta `video_p100_watched_actions`.
1957
+ * Views reaching 100% of the video's length. Sources: Meta `video_p100_watched_actions`, TikTok `video_views_p100`.
1958
1958
  */
1959
1959
  videoP100WatchedActions?: number;
1960
1960
  /**
1961
- * Average seconds watched per play (Meta `video_avg_time_watched_actions`). Aggregated over date ranges and across children as a play-weighted average (total watch time / total plays), never a plain average of averages.
1961
+ * Average seconds watched per play. Aggregated over date ranges and across children as a play-weighted average (total watch time / total plays), never a plain average of averages. Sources: Meta `video_avg_time_watched_actions`, TikTok `average_video_play`.
1962
1962
  */
1963
1963
  videoAvgTimeWatchedActions?: number;
1964
1964
  /**
1965
- * Derived `spend / videoThruplayWatchedActions`, in ad-account native currency. Rounded to 4 decimals rather than the usual 2 because a ThruPlay routinely costs well under a cent. 0 when the ad has no ThruPlays.
1965
+ * Derived `spend / videoThruplayWatchedActions`, in ad-account native currency. Rounded to 4 decimals rather than the usual 2 because a ThruPlay routinely costs well under a cent. 0 when the ad has no ThruPlays (ThruPlay is Meta-only).
1966
1966
  */
1967
1967
  costPerThruplay?: number;
1968
1968
  funnel?: AdFunnelCounts;
@@ -27234,10 +27234,25 @@ type UpdateAdData = {
27234
27234
  type?: 'daily' | 'lifetime';
27235
27235
  };
27236
27236
  /**
27237
- * Meta + TikTok only. Pinterest / X / LinkedIn / Google return 501.
27237
+ * Meta + TikTok (demographics/interests) and Google (keyword edits only).
27238
+ * Pinterest / X / LinkedIn return 501.
27238
27239
  *
27239
27240
  */
27240
27241
  targeting?: {
27242
+ /**
27243
+ * Google only. The FULL new set of positive keywords for the ad group; live keywords not listed are removed. Entries are strings (BROAD) or { text, matchType } with matchType exact | phrase | broad. Mirrored to GET /v1/ads/keywords immediately.
27244
+ */
27245
+ keywords?: Array<(string | {
27246
+ text: string;
27247
+ matchType?: 'exact' | 'phrase' | 'broad';
27248
+ })>;
27249
+ /**
27250
+ * Google only. Same declarative contract as keywords, for the ad group's negative keywords.
27251
+ */
27252
+ negativeKeywords?: Array<(string | {
27253
+ text: string;
27254
+ matchType?: 'exact' | 'phrase' | 'broad';
27255
+ })>;
27241
27256
  ageMin?: number;
27242
27257
  ageMax?: number;
27243
27258
  countries?: Array<(string)>;
@@ -29843,9 +29858,13 @@ type CreateStandaloneAdData = {
29843
29858
  */
29844
29859
  campaignType?: 'display' | 'search';
29845
29860
  /**
29846
- * Google Search only
29861
+ * Google Search only. BROAD-match keywords on the new ad group (first 20).
29847
29862
  */
29848
29863
  keywords?: Array<(string)>;
29864
+ /**
29865
+ * Google Search only; other platforms return 400. BROAD-match negative keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.negativeKeywords.
29866
+ */
29867
+ negativeKeywords?: Array<(string)>;
29849
29868
  /**
29850
29869
  * Google Search RSA only. Extra headlines.
29851
29870
  */
package/dist/index.d.ts CHANGED
@@ -1926,43 +1926,43 @@ type AdMetrics = {
1926
1926
  */
1927
1927
  roas?: number;
1928
1928
  /**
1929
- * Meta video ads only (0 for non-video ads and other platforms), like all video* fields below. Number of times the video started playing (Meta `video_play_actions`), summed over the date range and across children at ad-set/campaign level.
1929
+ * Number of times the video started playing, summed over the date range and across children at ad-set/campaign level. 0 for non-video ads. Sources: Meta `video_play_actions`, TikTok `video_play_actions`.
1930
1930
  */
1931
1931
  videoPlayActions?: number;
1932
1932
  /**
1933
- * Views of at least 30 seconds (or to the end, for shorter videos). Meta `video_30_sec_watched_actions`.
1933
+ * Views of at least 30 seconds (or to the end, for shorter videos). Sources: Meta `video_30_sec_watched_actions` (Meta only).
1934
1934
  */
1935
1935
  video30SecWatchedActions?: number;
1936
1936
  /**
1937
- * ThruPlays (watched to completion, or at least 15 seconds). Meta `video_thruplay_watched_actions`.
1937
+ * ThruPlays (watched to completion, or at least 15 seconds). Sources: Meta `video_thruplay_watched_actions` (Meta only).
1938
1938
  */
1939
1939
  videoThruplayWatchedActions?: number;
1940
1940
  /**
1941
- * Views reaching 25% of the video's length. With the other percentile fields, powers hook/hold/drop-off analysis (e.g. hook rate = videoP25WatchedActions / videoPlayActions). Meta `video_p25_watched_actions`.
1941
+ * Views reaching 25% of the video's length. With the other percentile fields, powers hook/hold/drop-off analysis (e.g. hook rate = videoP25WatchedActions / videoPlayActions). Sources: Meta `video_p25_watched_actions`, TikTok `video_views_p25`.
1942
1942
  */
1943
1943
  videoP25WatchedActions?: number;
1944
1944
  /**
1945
- * Views reaching 50% of the video's length. Meta `video_p50_watched_actions`.
1945
+ * Views reaching 50% of the video's length. Sources: Meta `video_p50_watched_actions`, TikTok `video_views_p50`.
1946
1946
  */
1947
1947
  videoP50WatchedActions?: number;
1948
1948
  /**
1949
- * Views reaching 75% of the video's length. Meta `video_p75_watched_actions`.
1949
+ * Views reaching 75% of the video's length. Sources: Meta `video_p75_watched_actions`, TikTok `video_views_p75`.
1950
1950
  */
1951
1951
  videoP75WatchedActions?: number;
1952
1952
  /**
1953
- * Views reaching 95% of the video's length. Meta `video_p95_watched_actions`.
1953
+ * Views reaching 95% of the video's length. Sources: Meta `video_p95_watched_actions` (Meta only).
1954
1954
  */
1955
1955
  videoP95WatchedActions?: number;
1956
1956
  /**
1957
- * Views reaching 100% of the video's length. Meta `video_p100_watched_actions`.
1957
+ * Views reaching 100% of the video's length. Sources: Meta `video_p100_watched_actions`, TikTok `video_views_p100`.
1958
1958
  */
1959
1959
  videoP100WatchedActions?: number;
1960
1960
  /**
1961
- * Average seconds watched per play (Meta `video_avg_time_watched_actions`). Aggregated over date ranges and across children as a play-weighted average (total watch time / total plays), never a plain average of averages.
1961
+ * Average seconds watched per play. Aggregated over date ranges and across children as a play-weighted average (total watch time / total plays), never a plain average of averages. Sources: Meta `video_avg_time_watched_actions`, TikTok `average_video_play`.
1962
1962
  */
1963
1963
  videoAvgTimeWatchedActions?: number;
1964
1964
  /**
1965
- * Derived `spend / videoThruplayWatchedActions`, in ad-account native currency. Rounded to 4 decimals rather than the usual 2 because a ThruPlay routinely costs well under a cent. 0 when the ad has no ThruPlays.
1965
+ * Derived `spend / videoThruplayWatchedActions`, in ad-account native currency. Rounded to 4 decimals rather than the usual 2 because a ThruPlay routinely costs well under a cent. 0 when the ad has no ThruPlays (ThruPlay is Meta-only).
1966
1966
  */
1967
1967
  costPerThruplay?: number;
1968
1968
  funnel?: AdFunnelCounts;
@@ -27234,10 +27234,25 @@ type UpdateAdData = {
27234
27234
  type?: 'daily' | 'lifetime';
27235
27235
  };
27236
27236
  /**
27237
- * Meta + TikTok only. Pinterest / X / LinkedIn / Google return 501.
27237
+ * Meta + TikTok (demographics/interests) and Google (keyword edits only).
27238
+ * Pinterest / X / LinkedIn return 501.
27238
27239
  *
27239
27240
  */
27240
27241
  targeting?: {
27242
+ /**
27243
+ * Google only. The FULL new set of positive keywords for the ad group; live keywords not listed are removed. Entries are strings (BROAD) or { text, matchType } with matchType exact | phrase | broad. Mirrored to GET /v1/ads/keywords immediately.
27244
+ */
27245
+ keywords?: Array<(string | {
27246
+ text: string;
27247
+ matchType?: 'exact' | 'phrase' | 'broad';
27248
+ })>;
27249
+ /**
27250
+ * Google only. Same declarative contract as keywords, for the ad group's negative keywords.
27251
+ */
27252
+ negativeKeywords?: Array<(string | {
27253
+ text: string;
27254
+ matchType?: 'exact' | 'phrase' | 'broad';
27255
+ })>;
27241
27256
  ageMin?: number;
27242
27257
  ageMax?: number;
27243
27258
  countries?: Array<(string)>;
@@ -29843,9 +29858,13 @@ type CreateStandaloneAdData = {
29843
29858
  */
29844
29859
  campaignType?: 'display' | 'search';
29845
29860
  /**
29846
- * Google Search only
29861
+ * Google Search only. BROAD-match keywords on the new ad group (first 20).
29847
29862
  */
29848
29863
  keywords?: Array<(string)>;
29864
+ /**
29865
+ * Google Search only; other platforms return 400. BROAD-match negative keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.negativeKeywords.
29866
+ */
29867
+ negativeKeywords?: Array<(string)>;
29849
29868
  /**
29850
29869
  * Google Search RSA only. Extra headlines.
29851
29870
  */
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.545",
39
+ version: "0.2.547",
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.545",
8
+ version: "0.2.547",
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.545",
3
+ "version": "0.2.547",
4
4
  "description": "The official Node.js library for the Zernio API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -7333,7 +7333,12 @@ export const getAd = <ThrowOnError extends boolean = false>(options: OptionsLega
7333
7333
  * - **Meta** (Facebook + Instagram): all fields supported.
7334
7334
  * - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative
7335
7335
  * (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`).
7336
- * - **Pinterest / X / LinkedIn / Google / OpenAI Ads**: status + budget only. Sending
7336
+ * - **Google**: status, budget, and KEYWORD edits via `targeting.keywords` /
7337
+ * `targeting.negativeKeywords` — each list you send becomes the FULL new set of its
7338
+ * kind on the ad group (criteria not in the list are removed); a kind left out is
7339
+ * untouched. Any other `targeting` field returns 400: Google cannot mutate broad
7340
+ * targeting post-create without recreating the campaign. `creative` returns 501.
7341
+ * - **Pinterest / X / LinkedIn / OpenAI Ads**: status + budget only. Sending
7337
7342
  * `targeting` or `creative` returns 501 with code `unsupported_platform_operation`.
7338
7343
  * OpenAI Ads budget is lifetime-only (see `budget.type` below).
7339
7344
  *
@@ -675,43 +675,43 @@ export type AdMetrics = {
675
675
  */
676
676
  roas?: number;
677
677
  /**
678
- * Meta video ads only (0 for non-video ads and other platforms), like all video* fields below. Number of times the video started playing (Meta `video_play_actions`), summed over the date range and across children at ad-set/campaign level.
678
+ * Number of times the video started playing, summed over the date range and across children at ad-set/campaign level. 0 for non-video ads. Sources: Meta `video_play_actions`, TikTok `video_play_actions`.
679
679
  */
680
680
  videoPlayActions?: number;
681
681
  /**
682
- * Views of at least 30 seconds (or to the end, for shorter videos). Meta `video_30_sec_watched_actions`.
682
+ * Views of at least 30 seconds (or to the end, for shorter videos). Sources: Meta `video_30_sec_watched_actions` (Meta only).
683
683
  */
684
684
  video30SecWatchedActions?: number;
685
685
  /**
686
- * ThruPlays (watched to completion, or at least 15 seconds). Meta `video_thruplay_watched_actions`.
686
+ * ThruPlays (watched to completion, or at least 15 seconds). Sources: Meta `video_thruplay_watched_actions` (Meta only).
687
687
  */
688
688
  videoThruplayWatchedActions?: number;
689
689
  /**
690
- * Views reaching 25% of the video's length. With the other percentile fields, powers hook/hold/drop-off analysis (e.g. hook rate = videoP25WatchedActions / videoPlayActions). Meta `video_p25_watched_actions`.
690
+ * Views reaching 25% of the video's length. With the other percentile fields, powers hook/hold/drop-off analysis (e.g. hook rate = videoP25WatchedActions / videoPlayActions). Sources: Meta `video_p25_watched_actions`, TikTok `video_views_p25`.
691
691
  */
692
692
  videoP25WatchedActions?: number;
693
693
  /**
694
- * Views reaching 50% of the video's length. Meta `video_p50_watched_actions`.
694
+ * Views reaching 50% of the video's length. Sources: Meta `video_p50_watched_actions`, TikTok `video_views_p50`.
695
695
  */
696
696
  videoP50WatchedActions?: number;
697
697
  /**
698
- * Views reaching 75% of the video's length. Meta `video_p75_watched_actions`.
698
+ * Views reaching 75% of the video's length. Sources: Meta `video_p75_watched_actions`, TikTok `video_views_p75`.
699
699
  */
700
700
  videoP75WatchedActions?: number;
701
701
  /**
702
- * Views reaching 95% of the video's length. Meta `video_p95_watched_actions`.
702
+ * Views reaching 95% of the video's length. Sources: Meta `video_p95_watched_actions` (Meta only).
703
703
  */
704
704
  videoP95WatchedActions?: number;
705
705
  /**
706
- * Views reaching 100% of the video's length. Meta `video_p100_watched_actions`.
706
+ * Views reaching 100% of the video's length. Sources: Meta `video_p100_watched_actions`, TikTok `video_views_p100`.
707
707
  */
708
708
  videoP100WatchedActions?: number;
709
709
  /**
710
- * Average seconds watched per play (Meta `video_avg_time_watched_actions`). Aggregated over date ranges and across children as a play-weighted average (total watch time / total plays), never a plain average of averages.
710
+ * Average seconds watched per play. Aggregated over date ranges and across children as a play-weighted average (total watch time / total plays), never a plain average of averages. Sources: Meta `video_avg_time_watched_actions`, TikTok `average_video_play`.
711
711
  */
712
712
  videoAvgTimeWatchedActions?: number;
713
713
  /**
714
- * Derived `spend / videoThruplayWatchedActions`, in ad-account native currency. Rounded to 4 decimals rather than the usual 2 because a ThruPlay routinely costs well under a cent. 0 when the ad has no ThruPlays.
714
+ * Derived `spend / videoThruplayWatchedActions`, in ad-account native currency. Rounded to 4 decimals rather than the usual 2 because a ThruPlay routinely costs well under a cent. 0 when the ad has no ThruPlays (ThruPlay is Meta-only).
715
715
  */
716
716
  costPerThruplay?: number;
717
717
  funnel?: AdFunnelCounts;
@@ -27638,10 +27638,25 @@ export type UpdateAdData = {
27638
27638
  type?: 'daily' | 'lifetime';
27639
27639
  };
27640
27640
  /**
27641
- * Meta + TikTok only. Pinterest / X / LinkedIn / Google return 501.
27641
+ * Meta + TikTok (demographics/interests) and Google (keyword edits only).
27642
+ * Pinterest / X / LinkedIn return 501.
27642
27643
  *
27643
27644
  */
27644
27645
  targeting?: {
27646
+ /**
27647
+ * Google only. The FULL new set of positive keywords for the ad group; live keywords not listed are removed. Entries are strings (BROAD) or { text, matchType } with matchType exact | phrase | broad. Mirrored to GET /v1/ads/keywords immediately.
27648
+ */
27649
+ keywords?: Array<(string | {
27650
+ text: string;
27651
+ matchType?: 'exact' | 'phrase' | 'broad';
27652
+ })>;
27653
+ /**
27654
+ * Google only. Same declarative contract as keywords, for the ad group's negative keywords.
27655
+ */
27656
+ negativeKeywords?: Array<(string | {
27657
+ text: string;
27658
+ matchType?: 'exact' | 'phrase' | 'broad';
27659
+ })>;
27645
27660
  ageMin?: number;
27646
27661
  ageMax?: number;
27647
27662
  countries?: Array<(string)>;
@@ -30373,9 +30388,13 @@ export type CreateStandaloneAdData = {
30373
30388
  */
30374
30389
  campaignType?: 'display' | 'search';
30375
30390
  /**
30376
- * Google Search only
30391
+ * Google Search only. BROAD-match keywords on the new ad group (first 20).
30377
30392
  */
30378
30393
  keywords?: Array<(string)>;
30394
+ /**
30395
+ * Google Search only; other platforms return 400. BROAD-match negative keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.negativeKeywords.
30396
+ */
30397
+ negativeKeywords?: Array<(string)>;
30379
30398
  /**
30380
30399
  * Google Search RSA only. Extra headlines.
30381
30400
  */