@zernio/node 0.2.750 → 0.2.752

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
@@ -36673,7 +36673,7 @@ type CreateStandaloneAdData = {
36673
36673
  */
36674
36674
  multiAdvertiser?: 'OPT_IN' | 'OPT_OUT';
36675
36675
  /**
36676
- * Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, existing video.id or existingCreativeId; media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error.
36676
+ * Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, all-image placementAssets with per-rule copy, existing video.id or existingCreativeId; other media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Placement validation uses existing Instagram identities only. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error.
36677
36677
  */
36678
36678
  validateOnly?: boolean;
36679
36679
  /**
@@ -36699,6 +36699,10 @@ type CreateStandaloneAdData = {
36699
36699
  * - `campaign`: CBO (Campaign Budget Optimization / Advantage Campaign Budget). The
36700
36700
  * budget AND `bidStrategy` are set on the CAMPAIGN, and Meta distributes spend
36701
36701
  * across ad sets automatically.
36702
+ * The returned ad stores the applied `budgetLevel` and budget in `campaignBudget`
36703
+ * for CBO or `adSetBudget` for ABO. Edit CBO budgets with
36704
+ * `PUT /v1/ads/campaigns/{campaignId}` and ABO budgets with
36705
+ * `PUT /v1/ads/ad-sets/{adSetId}`.
36702
36706
  * Meta requires the budget at exactly one level, never both. Non-Meta platforms ignore
36703
36707
  * this field. Ignored on the attach shape (`adSetId`), which inherits the existing budget.
36704
36708
  *
@@ -36733,7 +36737,7 @@ type CreateStandaloneAdData = {
36733
36737
  * `body` field is used as the `object_story_spec.link_data.message` (the preview text) and
36734
36738
  * `headlines` must also be present. On a video creative the copy lands in
36735
36739
  * `video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive
36736
- * with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`.
36740
+ * with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`. For placement-specific copy, use the singular `placementAssets.rules[].body` and `headline` fields instead.
36737
36741
  *
36738
36742
  */
36739
36743
  bodies?: Array<(string)>;
@@ -37316,15 +37320,19 @@ type CreateStandaloneAdData = {
37316
37320
  * on the legacy single shape AND the attach shape (`adSetId` + placementAssets adds one
37317
37321
  * placement-customized ad to an existing ad set, the way to build N per-placement ads
37318
37322
  * sharing one ad set: create the first normally, attach the rest). Cannot be combined
37319
- * with `creatives[]`. Shared copy (headline, body, link,
37320
- * CTA) comes from the top-level single-creative fields since only the asset varies by
37321
- * placement. Each rule's `placements` accepts the same fields as the top-level
37323
+ * with `creatives[]` or top-level `bodies`/`headlines`/`descriptions` arrays. Each rule
37324
+ * can override `headline`, `body` and `description` with one string per field. Omitted
37325
+ * fields and unmatched placements use the top-level copy; `linkUrl` and `callToAction`
37326
+ * remain shared. Zernio emits labelled text with `optimization_type: PLACEMENT`.
37327
+ * Multiple text options rotating within a placement are not supported by this input. Each rule's `placements` accepts the same fields as the top-level
37322
37328
  * `placements` object; Meta enforces co-selection rules and returns an actionable error.
37323
37329
  *
37324
- * Note on text rendering: Meta suppresses primary text and headline on fullscreen
37325
- * placements (Stories and Reels) in actual ad delivery; the fields are accepted and
37326
- * the ad publishes, but the copy is not shown to users. For visible copy on those
37327
- * placements, bake the text into the creative image or video itself.
37330
+ * Meta controls text rendering by placement and format. Validation accepts these fields
37331
+ * but does not prove that every field appears in delivery. Preview the ad; put copy that
37332
+ * must always be visible into the image or video itself.
37333
+ *
37334
+ * `validateOnly: true` supports all-image placementAssets without uploading or creating
37335
+ * anything. Video placement validation remains unsupported because it requires uploads.
37328
37336
  *
37329
37337
  * A block is all-image OR all-video, never mixed (Meta's asset_feed_spec carries one ad
37330
37338
  * format). Image mode: `defaultImageUrl` + `rules[].imageUrl`. Video mode:
@@ -37361,6 +37369,18 @@ type CreateStandaloneAdData = {
37361
37369
  * Video mode (optional). Poster image for this rule's video; auto-generated when omitted.
37362
37370
  */
37363
37371
  thumbnailUrl?: string;
37372
+ /**
37373
+ * One headline pinned to this rule. Omit to inherit the top-level headline.
37374
+ */
37375
+ headline?: string;
37376
+ /**
37377
+ * One primary text pinned to this rule. Omit to inherit the top-level body.
37378
+ */
37379
+ body?: string;
37380
+ /**
37381
+ * One link description pinned to this rule. Omit to inherit the top-level description.
37382
+ */
37383
+ description?: string;
37364
37384
  /**
37365
37385
  * Placements this asset is pinned to. At least one field must be set (an empty rule is invalid; that role is served by the default asset). Same enums as the top-level `placements` object.
37366
37386
  */
package/dist/index.d.ts CHANGED
@@ -36673,7 +36673,7 @@ type CreateStandaloneAdData = {
36673
36673
  */
36674
36674
  multiAdvertiser?: 'OPT_IN' | 'OPT_OUT';
36675
36675
  /**
36676
- * Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, existing video.id or existingCreativeId; media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error.
36676
+ * Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, all-image placementAssets with per-rule copy, existing video.id or existingCreativeId; other media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Placement validation uses existing Instagram identities only. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error.
36677
36677
  */
36678
36678
  validateOnly?: boolean;
36679
36679
  /**
@@ -36699,6 +36699,10 @@ type CreateStandaloneAdData = {
36699
36699
  * - `campaign`: CBO (Campaign Budget Optimization / Advantage Campaign Budget). The
36700
36700
  * budget AND `bidStrategy` are set on the CAMPAIGN, and Meta distributes spend
36701
36701
  * across ad sets automatically.
36702
+ * The returned ad stores the applied `budgetLevel` and budget in `campaignBudget`
36703
+ * for CBO or `adSetBudget` for ABO. Edit CBO budgets with
36704
+ * `PUT /v1/ads/campaigns/{campaignId}` and ABO budgets with
36705
+ * `PUT /v1/ads/ad-sets/{adSetId}`.
36702
36706
  * Meta requires the budget at exactly one level, never both. Non-Meta platforms ignore
36703
36707
  * this field. Ignored on the attach shape (`adSetId`), which inherits the existing budget.
36704
36708
  *
@@ -36733,7 +36737,7 @@ type CreateStandaloneAdData = {
36733
36737
  * `body` field is used as the `object_story_spec.link_data.message` (the preview text) and
36734
36738
  * `headlines` must also be present. On a video creative the copy lands in
36735
36739
  * `video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive
36736
- * with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`.
36740
+ * with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`. For placement-specific copy, use the singular `placementAssets.rules[].body` and `headline` fields instead.
36737
36741
  *
36738
36742
  */
36739
36743
  bodies?: Array<(string)>;
@@ -37316,15 +37320,19 @@ type CreateStandaloneAdData = {
37316
37320
  * on the legacy single shape AND the attach shape (`adSetId` + placementAssets adds one
37317
37321
  * placement-customized ad to an existing ad set, the way to build N per-placement ads
37318
37322
  * sharing one ad set: create the first normally, attach the rest). Cannot be combined
37319
- * with `creatives[]`. Shared copy (headline, body, link,
37320
- * CTA) comes from the top-level single-creative fields since only the asset varies by
37321
- * placement. Each rule's `placements` accepts the same fields as the top-level
37323
+ * with `creatives[]` or top-level `bodies`/`headlines`/`descriptions` arrays. Each rule
37324
+ * can override `headline`, `body` and `description` with one string per field. Omitted
37325
+ * fields and unmatched placements use the top-level copy; `linkUrl` and `callToAction`
37326
+ * remain shared. Zernio emits labelled text with `optimization_type: PLACEMENT`.
37327
+ * Multiple text options rotating within a placement are not supported by this input. Each rule's `placements` accepts the same fields as the top-level
37322
37328
  * `placements` object; Meta enforces co-selection rules and returns an actionable error.
37323
37329
  *
37324
- * Note on text rendering: Meta suppresses primary text and headline on fullscreen
37325
- * placements (Stories and Reels) in actual ad delivery; the fields are accepted and
37326
- * the ad publishes, but the copy is not shown to users. For visible copy on those
37327
- * placements, bake the text into the creative image or video itself.
37330
+ * Meta controls text rendering by placement and format. Validation accepts these fields
37331
+ * but does not prove that every field appears in delivery. Preview the ad; put copy that
37332
+ * must always be visible into the image or video itself.
37333
+ *
37334
+ * `validateOnly: true` supports all-image placementAssets without uploading or creating
37335
+ * anything. Video placement validation remains unsupported because it requires uploads.
37328
37336
  *
37329
37337
  * A block is all-image OR all-video, never mixed (Meta's asset_feed_spec carries one ad
37330
37338
  * format). Image mode: `defaultImageUrl` + `rules[].imageUrl`. Video mode:
@@ -37361,6 +37369,18 @@ type CreateStandaloneAdData = {
37361
37369
  * Video mode (optional). Poster image for this rule's video; auto-generated when omitted.
37362
37370
  */
37363
37371
  thumbnailUrl?: string;
37372
+ /**
37373
+ * One headline pinned to this rule. Omit to inherit the top-level headline.
37374
+ */
37375
+ headline?: string;
37376
+ /**
37377
+ * One primary text pinned to this rule. Omit to inherit the top-level body.
37378
+ */
37379
+ body?: string;
37380
+ /**
37381
+ * One link description pinned to this rule. Omit to inherit the top-level description.
37382
+ */
37383
+ description?: string;
37364
37384
  /**
37365
37385
  * Placements this asset is pinned to. At least one field must be set (an empty rule is invalid; that role is served by the default asset). Same enums as the top-level `placements` object.
37366
37386
  */
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.750",
39
+ version: "0.2.752",
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.750",
8
+ version: "0.2.752",
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.750",
3
+ "version": "0.2.752",
4
4
  "description": "The official Node.js library for the Zernio API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -8196,6 +8196,10 @@ export const getCampaignBidding = <ThrowOnError extends boolean = false>(options
8196
8196
  * | `platformSpecificData.spendCap` | Yes | 400 | 400 |
8197
8197
  * | `accountId` (empty campaigns) | Yes | - | - |
8198
8198
  *
8199
+ * Meta budget edits check the live campaign budget, so an older local ABO stamp
8200
+ * cannot block a CBO campaign. A successful edit repairs local ad budget fields.
8201
+ * A live ABO campaign still returns 409 with the ad-set budget endpoint.
8202
+ *
8199
8203
  * On Google: `LOWEST_COST_WITHOUT_CAP` = Maximize Conversions, `COST_CAP` +
8200
8204
  * `bidAmount` = Target CPA, `LOWEST_COST_WITH_MIN_ROAS` + `roasAverageFloor` =
8201
8205
  * Target ROAS, `LOWEST_COST_WITH_BID_CAP` + `bidAmount` = Maximize Clicks with a
@@ -37282,7 +37282,7 @@ export type CreateStandaloneAdData = {
37282
37282
  */
37283
37283
  multiAdvertiser?: 'OPT_IN' | 'OPT_OUT';
37284
37284
  /**
37285
- * Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, existing video.id or existingCreativeId; media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error.
37285
+ * Google Performance Max validates the complete atomic campaign and asset group with no resource creation or local persistence. Google validation still downloads image URLs and consumes quota. On Meta, validates the complete inline campaign, ad set, creative and ad with execution_options validate_only. Nothing is uploaded or created, and validation bypasses Idempotency-Key storage. Supports a single image, all-image placementAssets with per-rule copy, existing video.id or existingCreativeId; other media pools, new video uploads, creatives[], adSetId and RESERVED buying return 400. Placement validation uses existing Instagram identities only. Existing campaign or creative nodes are marked skipped. Success returns 200 with per-node results; Meta rejection returns an error.
37286
37286
  */
37287
37287
  validateOnly?: boolean;
37288
37288
  /**
@@ -37308,6 +37308,10 @@ export type CreateStandaloneAdData = {
37308
37308
  * - `campaign`: CBO (Campaign Budget Optimization / Advantage Campaign Budget). The
37309
37309
  * budget AND `bidStrategy` are set on the CAMPAIGN, and Meta distributes spend
37310
37310
  * across ad sets automatically.
37311
+ * The returned ad stores the applied `budgetLevel` and budget in `campaignBudget`
37312
+ * for CBO or `adSetBudget` for ABO. Edit CBO budgets with
37313
+ * `PUT /v1/ads/campaigns/{campaignId}` and ABO budgets with
37314
+ * `PUT /v1/ads/ad-sets/{adSetId}`.
37311
37315
  * Meta requires the budget at exactly one level, never both. Non-Meta platforms ignore
37312
37316
  * this field. Ignored on the attach shape (`adSetId`), which inherits the existing budget.
37313
37317
  *
@@ -37342,7 +37346,7 @@ export type CreateStandaloneAdData = {
37342
37346
  * `body` field is used as the `object_story_spec.link_data.message` (the preview text) and
37343
37347
  * `headlines` must also be present. On a video creative the copy lands in
37344
37348
  * `video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive
37345
- * with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`.
37349
+ * with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`. For placement-specific copy, use the singular `placementAssets.rules[].body` and `headline` fields instead.
37346
37350
  *
37347
37351
  */
37348
37352
  bodies?: Array<(string)>;
@@ -37925,15 +37929,19 @@ export type CreateStandaloneAdData = {
37925
37929
  * on the legacy single shape AND the attach shape (`adSetId` + placementAssets adds one
37926
37930
  * placement-customized ad to an existing ad set, the way to build N per-placement ads
37927
37931
  * sharing one ad set: create the first normally, attach the rest). Cannot be combined
37928
- * with `creatives[]`. Shared copy (headline, body, link,
37929
- * CTA) comes from the top-level single-creative fields since only the asset varies by
37930
- * placement. Each rule's `placements` accepts the same fields as the top-level
37932
+ * with `creatives[]` or top-level `bodies`/`headlines`/`descriptions` arrays. Each rule
37933
+ * can override `headline`, `body` and `description` with one string per field. Omitted
37934
+ * fields and unmatched placements use the top-level copy; `linkUrl` and `callToAction`
37935
+ * remain shared. Zernio emits labelled text with `optimization_type: PLACEMENT`.
37936
+ * Multiple text options rotating within a placement are not supported by this input. Each rule's `placements` accepts the same fields as the top-level
37931
37937
  * `placements` object; Meta enforces co-selection rules and returns an actionable error.
37932
37938
  *
37933
- * Note on text rendering: Meta suppresses primary text and headline on fullscreen
37934
- * placements (Stories and Reels) in actual ad delivery; the fields are accepted and
37935
- * the ad publishes, but the copy is not shown to users. For visible copy on those
37936
- * placements, bake the text into the creative image or video itself.
37939
+ * Meta controls text rendering by placement and format. Validation accepts these fields
37940
+ * but does not prove that every field appears in delivery. Preview the ad; put copy that
37941
+ * must always be visible into the image or video itself.
37942
+ *
37943
+ * `validateOnly: true` supports all-image placementAssets without uploading or creating
37944
+ * anything. Video placement validation remains unsupported because it requires uploads.
37937
37945
  *
37938
37946
  * A block is all-image OR all-video, never mixed (Meta's asset_feed_spec carries one ad
37939
37947
  * format). Image mode: `defaultImageUrl` + `rules[].imageUrl`. Video mode:
@@ -37970,6 +37978,18 @@ export type CreateStandaloneAdData = {
37970
37978
  * Video mode (optional). Poster image for this rule's video; auto-generated when omitted.
37971
37979
  */
37972
37980
  thumbnailUrl?: string;
37981
+ /**
37982
+ * One headline pinned to this rule. Omit to inherit the top-level headline.
37983
+ */
37984
+ headline?: string;
37985
+ /**
37986
+ * One primary text pinned to this rule. Omit to inherit the top-level body.
37987
+ */
37988
+ body?: string;
37989
+ /**
37990
+ * One link description pinned to this rule. Omit to inherit the top-level description.
37991
+ */
37992
+ description?: string;
37973
37993
  /**
37974
37994
  * Placements this asset is pinned to. At least one field must be set (an empty rule is invalid; that role is served by the default asset). Same enums as the top-level `placements` object.
37975
37995
  */