@zernio/node 0.2.676 → 0.2.677

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
@@ -2770,7 +2770,7 @@ type BulkUploadResult = {
2770
2770
  errors?: Array<(string)>;
2771
2771
  }>;
2772
2772
  /**
2773
- * Top-level advisory warnings (e.g. `rows_exceed_advisory_limit:500`). Empty when none.
2773
+ * Top-level advisory warnings, e.g. `rows_exceed_advisory_limit:500` or `unknown_columns:<a,b,c>` (comma-separated unrecognized CSV column names). Empty when none.
2774
2774
  */
2775
2775
  warnings?: Array<(string)>;
2776
2776
  /**
@@ -30088,8 +30088,8 @@ type UpdateAdData = {
30088
30088
  type?: 'daily' | 'lifetime';
30089
30089
  };
30090
30090
  /**
30091
- * Meta + TikTok (demographics/interests) and Google (keyword edits only).
30092
- * Pinterest / X / LinkedIn return 501.
30091
+ * Meta + TikTok (demographics/interests), Google (keyword edits only),
30092
+ * and LinkedIn (geo countries). Pinterest / X return 501.
30093
30093
  *
30094
30094
  */
30095
30095
  targeting?: {
@@ -30123,7 +30123,7 @@ type UpdateAdData = {
30123
30123
  advantage_audience?: 0 | 1;
30124
30124
  };
30125
30125
  /**
30126
- * Replace the ad's creative. Meta + TikTok only.
30126
+ * Replace the ad's creative. Meta, TikTok, and LinkedIn.
30127
30127
  *
30128
30128
  * - **Meta**: requires `headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`. The
30129
30129
  * ad's existing creative is replaced via a new `/act_X/adcreatives` upload + ad
@@ -30131,6 +30131,9 @@ type UpdateAdData = {
30131
30131
  * - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives
30132
30132
  * have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes
30133
30133
  * `landing_page_url`; `videoUrl` triggers a fresh upload.
30134
+ * - **LinkedIn**: uploads new media (image via `imageUrl` or video via `videoUrl`),
30135
+ * creates a new inline media creative on the same campaign, and pauses the old
30136
+ * creative (best-effort). The old creative is retained for historical reporting.
30134
30137
  *
30135
30138
  */
30136
30139
  creative?: {
@@ -32041,6 +32044,14 @@ type BoostPostData = {
32041
32044
  *
32042
32045
  */
32043
32046
  dsaPayor?: string;
32047
+ /**
32048
+ * Lead Gen form ID to attach to the boosted ad's creative. REQUIRED when `goal` is `lead_generation`. On Meta this is the leadgen_forms ID (create one via POST /v1/ads/lead-forms). On LinkedIn this is the adForm ID (create one via POST /v1/ads/lead-forms with a LinkedIn account); the creative's `leadgenCallToAction.destination` is set to `urn:li:adForm:{id}`. Ignored for other goals.
32049
+ */
32050
+ leadGenFormId?: string;
32051
+ /**
32052
+ * Meta, TikTok, and LinkedIn. Publish state of the created entities. Omitted or ACTIVE publishes live (default); PAUSED creates them paused so you can review before they spend. On LinkedIn the whole campaign group, campaign, and creative hierarchy stays PAUSED (intendedStatus PAUSED on each).
32053
+ */
32054
+ status?: 'ACTIVE' | 'PAUSED';
32044
32055
  /**
32045
32056
  * Meta only. Explicit ad-set `optimization_goal` override. When omitted,
32046
32057
  * defaults to the value derived from `goal`. The value must be compatible
@@ -32117,8 +32128,9 @@ type CreateStandaloneAdData = {
32117
32128
  *
32118
32129
  * **LinkedIn**
32119
32130
  * - `engagement`, `traffic`, `awareness` and `video_views` create standalone Direct Sponsored Content ads. `traffic` requires `linkUrl`; `video_views` requires `video`.
32131
+ * - `lead_generation`: requires `leadGenFormId` (an adForm ID from POST /v1/ads/lead-forms). The campaign objective is set to MAX_LEAD and the creative's `leadgenCallToAction` destination is set to `urn:li:adForm:{id}`.
32120
32132
  * - `job_applicants` requires a `platformSpecificData.jobs` creative.
32121
- * - For `lead_generation` or `conversions` on LinkedIn, or to promote an existing post, use POST /v1/ads/boost.
32133
+ * - For `conversions` on LinkedIn, or to promote an existing post, use POST /v1/ads/boost.
32122
32134
  *
32123
32135
  * **OpenAI Ads**
32124
32136
  * - Only `traffic`, `awareness`, and `conversions` are supported (other goals return 400). Maps to OpenAI's `bidding_type` (clicks, impressions, conversions respectively). `conversions` requires an active conversion event setting on the account; create a tracking tag with `defaultEventType` via the tracking-tags API (`POST /v1/accounts/{accountId}/tracking-tags`), or configure a conversion event in OpenAI Ads Manager, or the request returns 422.
@@ -32164,7 +32176,7 @@ type CreateStandaloneAdData = {
32164
32176
  */
32165
32177
  budgetType?: 'daily' | 'lifetime';
32166
32178
  /**
32167
- * Meta and TikTok. Publish state of the created entities. Omitted or ACTIVE publishes live (default, back-compat); PAUSED creates them paused so you can review before they spend. On Meta the pause is held on the campaign this call creates, leaving the ad set and ad switched on, so a single PUT /v1/ads/campaigns/{campaignId}/status with `active` brings the whole thing live. It is held at every level instead when the pause cannot rely on the campaign: `existingCampaignId` (that campaign may be running and is never touched) or `campaignStatus: ACTIVE`. On TikTok the whole campaign > ad group > ad hierarchy stays paused.
32179
+ * Meta, TikTok, and LinkedIn. Publish state of the created entities. Omitted or ACTIVE publishes live (default, back-compat); PAUSED creates them paused so you can review before they spend. On Meta the pause is held on the campaign this call creates, leaving the ad set and ad switched on, so a single PUT /v1/ads/campaigns/{campaignId}/status with `active` brings the whole thing live. It is held at every level instead when the pause cannot rely on the campaign: `existingCampaignId` (that campaign may be running and is never touched) or `campaignStatus: ACTIVE`. On TikTok the whole campaign > ad group > ad hierarchy stays paused. On LinkedIn the whole campaign group, campaign, and creative hierarchy stays PAUSED (intendedStatus PAUSED on each).
32168
32180
  */
32169
32181
  status?: 'ACTIVE' | 'PAUSED';
32170
32182
  /**
@@ -32212,7 +32224,7 @@ type CreateStandaloneAdData = {
32212
32224
  */
32213
32225
  linkUrl?: string;
32214
32226
  /**
32215
- * Meta Lead Gen forms only (facebook/instagram). The leadgen_forms ID to attach to the ad's creative — create one via POST /v1/ads/lead-forms. REQUIRED when `goal` is `lead_generation`, and on every ATTACH (`adSetId`) call that targets a lead ad set (the form attaches per-ad; Meta rejects a formless ad in a lead ad set). Ignored otherwise. The ad set's promoted_object.page_id + LEAD_GENERATION optimization + destination_type ON_AD are derived automatically from the goal. Both `placementAssets` (per-placement creative) and `dynamicCreative` (multi-text / multi-asset pool, e.g. multiple headlines and primary texts) ARE supported on instant-form lead ads — the form is attached for you, and for `dynamicCreative` the ad set is created as a Dynamic Creative ad set automatically (Meta requires that for any multi-text feed; there is no non-DCO multi-text path). Send a single `imageUrls` (or `videoUrls`) entry plus your text variations to get Meta's "Multiple Text Options" behavior on a lead ad.
32227
+ * Lead Gen form ID to attach to the ad's creative. REQUIRED when `goal` is `lead_generation`. Create one via POST /v1/ads/lead-forms. On Meta (facebook/instagram) this is the leadgen_forms ID; the ad set's promoted_object.page_id + LEAD_GENERATION optimization + destination_type ON_AD are derived automatically from the goal. On LinkedIn this is the adForm ID; the creative's `leadgenCallToAction.destination` is set to `urn:li:adForm:{id}` and the campaign objective is set to MAX_LEAD. Forms must be owned by the sponsoredAccount (not the organization) for the URN to resolve. Also required on every Meta ATTACH (`adSetId`) call that targets a lead ad set (the form attaches per-ad; Meta rejects a formless ad in a lead ad set). Both `placementAssets` (per-placement creative) and `dynamicCreative` (multi-text / multi-asset pool, e.g. multiple headlines and primary texts) ARE supported on Meta instant-form lead ads.
32216
32228
  */
32217
32229
  leadGenFormId?: string;
32218
32230
  /**
package/dist/index.d.ts CHANGED
@@ -2770,7 +2770,7 @@ type BulkUploadResult = {
2770
2770
  errors?: Array<(string)>;
2771
2771
  }>;
2772
2772
  /**
2773
- * Top-level advisory warnings (e.g. `rows_exceed_advisory_limit:500`). Empty when none.
2773
+ * Top-level advisory warnings, e.g. `rows_exceed_advisory_limit:500` or `unknown_columns:<a,b,c>` (comma-separated unrecognized CSV column names). Empty when none.
2774
2774
  */
2775
2775
  warnings?: Array<(string)>;
2776
2776
  /**
@@ -30088,8 +30088,8 @@ type UpdateAdData = {
30088
30088
  type?: 'daily' | 'lifetime';
30089
30089
  };
30090
30090
  /**
30091
- * Meta + TikTok (demographics/interests) and Google (keyword edits only).
30092
- * Pinterest / X / LinkedIn return 501.
30091
+ * Meta + TikTok (demographics/interests), Google (keyword edits only),
30092
+ * and LinkedIn (geo countries). Pinterest / X return 501.
30093
30093
  *
30094
30094
  */
30095
30095
  targeting?: {
@@ -30123,7 +30123,7 @@ type UpdateAdData = {
30123
30123
  advantage_audience?: 0 | 1;
30124
30124
  };
30125
30125
  /**
30126
- * Replace the ad's creative. Meta + TikTok only.
30126
+ * Replace the ad's creative. Meta, TikTok, and LinkedIn.
30127
30127
  *
30128
30128
  * - **Meta**: requires `headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`. The
30129
30129
  * ad's existing creative is replaced via a new `/act_X/adcreatives` upload + ad
@@ -30131,6 +30131,9 @@ type UpdateAdData = {
30131
30131
  * - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives
30132
30132
  * have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes
30133
30133
  * `landing_page_url`; `videoUrl` triggers a fresh upload.
30134
+ * - **LinkedIn**: uploads new media (image via `imageUrl` or video via `videoUrl`),
30135
+ * creates a new inline media creative on the same campaign, and pauses the old
30136
+ * creative (best-effort). The old creative is retained for historical reporting.
30134
30137
  *
30135
30138
  */
30136
30139
  creative?: {
@@ -32041,6 +32044,14 @@ type BoostPostData = {
32041
32044
  *
32042
32045
  */
32043
32046
  dsaPayor?: string;
32047
+ /**
32048
+ * Lead Gen form ID to attach to the boosted ad's creative. REQUIRED when `goal` is `lead_generation`. On Meta this is the leadgen_forms ID (create one via POST /v1/ads/lead-forms). On LinkedIn this is the adForm ID (create one via POST /v1/ads/lead-forms with a LinkedIn account); the creative's `leadgenCallToAction.destination` is set to `urn:li:adForm:{id}`. Ignored for other goals.
32049
+ */
32050
+ leadGenFormId?: string;
32051
+ /**
32052
+ * Meta, TikTok, and LinkedIn. Publish state of the created entities. Omitted or ACTIVE publishes live (default); PAUSED creates them paused so you can review before they spend. On LinkedIn the whole campaign group, campaign, and creative hierarchy stays PAUSED (intendedStatus PAUSED on each).
32053
+ */
32054
+ status?: 'ACTIVE' | 'PAUSED';
32044
32055
  /**
32045
32056
  * Meta only. Explicit ad-set `optimization_goal` override. When omitted,
32046
32057
  * defaults to the value derived from `goal`. The value must be compatible
@@ -32117,8 +32128,9 @@ type CreateStandaloneAdData = {
32117
32128
  *
32118
32129
  * **LinkedIn**
32119
32130
  * - `engagement`, `traffic`, `awareness` and `video_views` create standalone Direct Sponsored Content ads. `traffic` requires `linkUrl`; `video_views` requires `video`.
32131
+ * - `lead_generation`: requires `leadGenFormId` (an adForm ID from POST /v1/ads/lead-forms). The campaign objective is set to MAX_LEAD and the creative's `leadgenCallToAction` destination is set to `urn:li:adForm:{id}`.
32120
32132
  * - `job_applicants` requires a `platformSpecificData.jobs` creative.
32121
- * - For `lead_generation` or `conversions` on LinkedIn, or to promote an existing post, use POST /v1/ads/boost.
32133
+ * - For `conversions` on LinkedIn, or to promote an existing post, use POST /v1/ads/boost.
32122
32134
  *
32123
32135
  * **OpenAI Ads**
32124
32136
  * - Only `traffic`, `awareness`, and `conversions` are supported (other goals return 400). Maps to OpenAI's `bidding_type` (clicks, impressions, conversions respectively). `conversions` requires an active conversion event setting on the account; create a tracking tag with `defaultEventType` via the tracking-tags API (`POST /v1/accounts/{accountId}/tracking-tags`), or configure a conversion event in OpenAI Ads Manager, or the request returns 422.
@@ -32164,7 +32176,7 @@ type CreateStandaloneAdData = {
32164
32176
  */
32165
32177
  budgetType?: 'daily' | 'lifetime';
32166
32178
  /**
32167
- * Meta and TikTok. Publish state of the created entities. Omitted or ACTIVE publishes live (default, back-compat); PAUSED creates them paused so you can review before they spend. On Meta the pause is held on the campaign this call creates, leaving the ad set and ad switched on, so a single PUT /v1/ads/campaigns/{campaignId}/status with `active` brings the whole thing live. It is held at every level instead when the pause cannot rely on the campaign: `existingCampaignId` (that campaign may be running and is never touched) or `campaignStatus: ACTIVE`. On TikTok the whole campaign > ad group > ad hierarchy stays paused.
32179
+ * Meta, TikTok, and LinkedIn. Publish state of the created entities. Omitted or ACTIVE publishes live (default, back-compat); PAUSED creates them paused so you can review before they spend. On Meta the pause is held on the campaign this call creates, leaving the ad set and ad switched on, so a single PUT /v1/ads/campaigns/{campaignId}/status with `active` brings the whole thing live. It is held at every level instead when the pause cannot rely on the campaign: `existingCampaignId` (that campaign may be running and is never touched) or `campaignStatus: ACTIVE`. On TikTok the whole campaign > ad group > ad hierarchy stays paused. On LinkedIn the whole campaign group, campaign, and creative hierarchy stays PAUSED (intendedStatus PAUSED on each).
32168
32180
  */
32169
32181
  status?: 'ACTIVE' | 'PAUSED';
32170
32182
  /**
@@ -32212,7 +32224,7 @@ type CreateStandaloneAdData = {
32212
32224
  */
32213
32225
  linkUrl?: string;
32214
32226
  /**
32215
- * Meta Lead Gen forms only (facebook/instagram). The leadgen_forms ID to attach to the ad's creative — create one via POST /v1/ads/lead-forms. REQUIRED when `goal` is `lead_generation`, and on every ATTACH (`adSetId`) call that targets a lead ad set (the form attaches per-ad; Meta rejects a formless ad in a lead ad set). Ignored otherwise. The ad set's promoted_object.page_id + LEAD_GENERATION optimization + destination_type ON_AD are derived automatically from the goal. Both `placementAssets` (per-placement creative) and `dynamicCreative` (multi-text / multi-asset pool, e.g. multiple headlines and primary texts) ARE supported on instant-form lead ads — the form is attached for you, and for `dynamicCreative` the ad set is created as a Dynamic Creative ad set automatically (Meta requires that for any multi-text feed; there is no non-DCO multi-text path). Send a single `imageUrls` (or `videoUrls`) entry plus your text variations to get Meta's "Multiple Text Options" behavior on a lead ad.
32227
+ * Lead Gen form ID to attach to the ad's creative. REQUIRED when `goal` is `lead_generation`. Create one via POST /v1/ads/lead-forms. On Meta (facebook/instagram) this is the leadgen_forms ID; the ad set's promoted_object.page_id + LEAD_GENERATION optimization + destination_type ON_AD are derived automatically from the goal. On LinkedIn this is the adForm ID; the creative's `leadgenCallToAction.destination` is set to `urn:li:adForm:{id}` and the campaign objective is set to MAX_LEAD. Forms must be owned by the sponsoredAccount (not the organization) for the URN to resolve. Also required on every Meta ATTACH (`adSetId`) call that targets a lead ad set (the form attaches per-ad; Meta rejects a formless ad in a lead ad set). Both `placementAssets` (per-placement creative) and `dynamicCreative` (multi-text / multi-asset pool, e.g. multiple headlines and primary texts) ARE supported on Meta instant-form lead ads.
32216
32228
  */
32217
32229
  leadGenFormId?: string;
32218
32230
  /**
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.676",
39
+ version: "0.2.677",
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.676",
8
+ version: "0.2.677",
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.676",
3
+ "version": "0.2.677",
4
4
  "description": "The official Node.js library for the Zernio API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -908,6 +908,25 @@ export const deletePost = <ThrowOnError extends boolean = false>(options: Option
908
908
  /**
909
909
  * Bulk upload from CSV
910
910
  * Create multiple posts by uploading a CSV file. Use dryRun=true to validate without creating posts.
911
+ *
912
+ * CSV columns:
913
+ * - Required: `platforms`, `profiles`, and a schedule (one of `schedule_time`, a `schedule_time_<platform>` override, `publish_now=true`, `use_queue=true`, or `is_draft=true`).
914
+ * - Content: at least one of `post_content`, `title`, or `media_urls` is required.
915
+ * - Aliases: a handful of columns accept the JSON field name from POST /v1/posts, since integrators infer the CSV shape from that endpoint's body. When both are present the real CSV column wins, unless it is blank for that row, in which case the alias value is used.
916
+ * - `content` aliases `post_content`
917
+ * - `timezone` aliases `tz`
918
+ * - `scheduledFor` aliases `schedule_time`
919
+ * - `mediaUrls` aliases `media_urls`
920
+ * - Per-platform overrides use three dynamic column prefixes, one column per platform (e.g. `schedule_time_instagram`, `custom_content_tiktok`, `custom_media_youtube`): `schedule_time_<platform>`, `custom_content_<platform>`, `custom_media_<platform>`.
921
+ * - Any other column is not read. It does not error, but it is reported in the response's `warnings` array as `unknown_columns:<a,b,c>` (see BulkUploadResult), so a misnamed or unsupported column is never silently dropped.
922
+ * - Row limits: 5000 rows is a hard cap that returns 400 above it. 500 rows is only an advisory threshold, it adds `rows_exceed_advisory_limit:500` to `warnings` and the request still processes.
923
+ *
924
+ * Example row (header + one data row):
925
+ * ```
926
+ * post_content,platforms,profiles,schedule_time,tz
927
+ * "Hello world",instagram,MyProfile,2026-09-01 10:00,America/New_York
928
+ * ```
929
+ *
911
930
  */
912
931
  export const bulkUploadPosts = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<BulkUploadPostsData, ThrowOnError>) => {
913
932
  return (options?.client ?? client).post<BulkUploadPostsResponse, BulkUploadPostsError, ThrowOnError>({
@@ -8006,7 +8025,10 @@ export const getAd = <ThrowOnError extends boolean = false>(options: OptionsLega
8006
8025
  * kind on the ad group (criteria not in the list are removed); a kind left out is
8007
8026
  * untouched. Any other `targeting` field returns 400: Google cannot mutate broad
8008
8027
  * targeting post-create without recreating the campaign. `creative` returns 501.
8009
- * - **Pinterest / X / LinkedIn / OpenAI Ads**: status + budget only. Sending
8028
+ * - **LinkedIn**: status, budget, targeting (geo countries only, applied to the
8029
+ * LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a
8030
+ * replacement inline creative on the same campaign, pauses the old one).
8031
+ * - **Pinterest / X / OpenAI Ads**: status + budget only. Sending
8010
8032
  * `targeting` or `creative` returns 501 with code `unsupported_platform_operation`.
8011
8033
  * OpenAI Ads budget is lifetime-only (see `budget.type` below).
8012
8034
  *
@@ -1478,7 +1478,7 @@ export type BulkUploadResult = {
1478
1478
  errors?: Array<(string)>;
1479
1479
  }>;
1480
1480
  /**
1481
- * Top-level advisory warnings (e.g. `rows_exceed_advisory_limit:500`). Empty when none.
1481
+ * Top-level advisory warnings, e.g. `rows_exceed_advisory_limit:500` or `unknown_columns:<a,b,c>` (comma-separated unrecognized CSV column names). Empty when none.
1482
1482
  */
1483
1483
  warnings?: Array<(string)>;
1484
1484
  /**
@@ -30553,8 +30553,8 @@ export type UpdateAdData = {
30553
30553
  type?: 'daily' | 'lifetime';
30554
30554
  };
30555
30555
  /**
30556
- * Meta + TikTok (demographics/interests) and Google (keyword edits only).
30557
- * Pinterest / X / LinkedIn return 501.
30556
+ * Meta + TikTok (demographics/interests), Google (keyword edits only),
30557
+ * and LinkedIn (geo countries). Pinterest / X return 501.
30558
30558
  *
30559
30559
  */
30560
30560
  targeting?: {
@@ -30588,7 +30588,7 @@ export type UpdateAdData = {
30588
30588
  advantage_audience?: 0 | 1;
30589
30589
  };
30590
30590
  /**
30591
- * Replace the ad's creative. Meta + TikTok only.
30591
+ * Replace the ad's creative. Meta, TikTok, and LinkedIn.
30592
30592
  *
30593
30593
  * - **Meta**: requires `headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`. The
30594
30594
  * ad's existing creative is replaced via a new `/act_X/adcreatives` upload + ad
@@ -30596,6 +30596,9 @@ export type UpdateAdData = {
30596
30596
  * - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives
30597
30597
  * have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes
30598
30598
  * `landing_page_url`; `videoUrl` triggers a fresh upload.
30599
+ * - **LinkedIn**: uploads new media (image via `imageUrl` or video via `videoUrl`),
30600
+ * creates a new inline media creative on the same campaign, and pauses the old
30601
+ * creative (best-effort). The old creative is retained for historical reporting.
30599
30602
  *
30600
30603
  */
30601
30604
  creative?: {
@@ -32635,6 +32638,14 @@ export type BoostPostData = {
32635
32638
  *
32636
32639
  */
32637
32640
  dsaPayor?: string;
32641
+ /**
32642
+ * Lead Gen form ID to attach to the boosted ad's creative. REQUIRED when `goal` is `lead_generation`. On Meta this is the leadgen_forms ID (create one via POST /v1/ads/lead-forms). On LinkedIn this is the adForm ID (create one via POST /v1/ads/lead-forms with a LinkedIn account); the creative's `leadgenCallToAction.destination` is set to `urn:li:adForm:{id}`. Ignored for other goals.
32643
+ */
32644
+ leadGenFormId?: string;
32645
+ /**
32646
+ * Meta, TikTok, and LinkedIn. Publish state of the created entities. Omitted or ACTIVE publishes live (default); PAUSED creates them paused so you can review before they spend. On LinkedIn the whole campaign group, campaign, and creative hierarchy stays PAUSED (intendedStatus PAUSED on each).
32647
+ */
32648
+ status?: 'ACTIVE' | 'PAUSED';
32638
32649
  /**
32639
32650
  * Meta only. Explicit ad-set `optimization_goal` override. When omitted,
32640
32651
  * defaults to the value derived from `goal`. The value must be compatible
@@ -32714,8 +32725,9 @@ export type CreateStandaloneAdData = {
32714
32725
  *
32715
32726
  * **LinkedIn**
32716
32727
  * - `engagement`, `traffic`, `awareness` and `video_views` create standalone Direct Sponsored Content ads. `traffic` requires `linkUrl`; `video_views` requires `video`.
32728
+ * - `lead_generation`: requires `leadGenFormId` (an adForm ID from POST /v1/ads/lead-forms). The campaign objective is set to MAX_LEAD and the creative's `leadgenCallToAction` destination is set to `urn:li:adForm:{id}`.
32717
32729
  * - `job_applicants` requires a `platformSpecificData.jobs` creative.
32718
- * - For `lead_generation` or `conversions` on LinkedIn, or to promote an existing post, use POST /v1/ads/boost.
32730
+ * - For `conversions` on LinkedIn, or to promote an existing post, use POST /v1/ads/boost.
32719
32731
  *
32720
32732
  * **OpenAI Ads**
32721
32733
  * - Only `traffic`, `awareness`, and `conversions` are supported (other goals return 400). Maps to OpenAI's `bidding_type` (clicks, impressions, conversions respectively). `conversions` requires an active conversion event setting on the account; create a tracking tag with `defaultEventType` via the tracking-tags API (`POST /v1/accounts/{accountId}/tracking-tags`), or configure a conversion event in OpenAI Ads Manager, or the request returns 422.
@@ -32761,7 +32773,7 @@ export type CreateStandaloneAdData = {
32761
32773
  */
32762
32774
  budgetType?: 'daily' | 'lifetime';
32763
32775
  /**
32764
- * Meta and TikTok. Publish state of the created entities. Omitted or ACTIVE publishes live (default, back-compat); PAUSED creates them paused so you can review before they spend. On Meta the pause is held on the campaign this call creates, leaving the ad set and ad switched on, so a single PUT /v1/ads/campaigns/{campaignId}/status with `active` brings the whole thing live. It is held at every level instead when the pause cannot rely on the campaign: `existingCampaignId` (that campaign may be running and is never touched) or `campaignStatus: ACTIVE`. On TikTok the whole campaign > ad group > ad hierarchy stays paused.
32776
+ * Meta, TikTok, and LinkedIn. Publish state of the created entities. Omitted or ACTIVE publishes live (default, back-compat); PAUSED creates them paused so you can review before they spend. On Meta the pause is held on the campaign this call creates, leaving the ad set and ad switched on, so a single PUT /v1/ads/campaigns/{campaignId}/status with `active` brings the whole thing live. It is held at every level instead when the pause cannot rely on the campaign: `existingCampaignId` (that campaign may be running and is never touched) or `campaignStatus: ACTIVE`. On TikTok the whole campaign > ad group > ad hierarchy stays paused. On LinkedIn the whole campaign group, campaign, and creative hierarchy stays PAUSED (intendedStatus PAUSED on each).
32765
32777
  */
32766
32778
  status?: 'ACTIVE' | 'PAUSED';
32767
32779
  /**
@@ -32809,7 +32821,7 @@ export type CreateStandaloneAdData = {
32809
32821
  */
32810
32822
  linkUrl?: string;
32811
32823
  /**
32812
- * Meta Lead Gen forms only (facebook/instagram). The leadgen_forms ID to attach to the ad's creative — create one via POST /v1/ads/lead-forms. REQUIRED when `goal` is `lead_generation`, and on every ATTACH (`adSetId`) call that targets a lead ad set (the form attaches per-ad; Meta rejects a formless ad in a lead ad set). Ignored otherwise. The ad set's promoted_object.page_id + LEAD_GENERATION optimization + destination_type ON_AD are derived automatically from the goal. Both `placementAssets` (per-placement creative) and `dynamicCreative` (multi-text / multi-asset pool, e.g. multiple headlines and primary texts) ARE supported on instant-form lead ads — the form is attached for you, and for `dynamicCreative` the ad set is created as a Dynamic Creative ad set automatically (Meta requires that for any multi-text feed; there is no non-DCO multi-text path). Send a single `imageUrls` (or `videoUrls`) entry plus your text variations to get Meta's "Multiple Text Options" behavior on a lead ad.
32824
+ * Lead Gen form ID to attach to the ad's creative. REQUIRED when `goal` is `lead_generation`. Create one via POST /v1/ads/lead-forms. On Meta (facebook/instagram) this is the leadgen_forms ID; the ad set's promoted_object.page_id + LEAD_GENERATION optimization + destination_type ON_AD are derived automatically from the goal. On LinkedIn this is the adForm ID; the creative's `leadgenCallToAction.destination` is set to `urn:li:adForm:{id}` and the campaign objective is set to MAX_LEAD. Forms must be owned by the sponsoredAccount (not the organization) for the URN to resolve. Also required on every Meta ATTACH (`adSetId`) call that targets a lead ad set (the form attaches per-ad; Meta rejects a formless ad in a lead ad set). Both `placementAssets` (per-placement creative) and `dynamicCreative` (multi-text / multi-asset pool, e.g. multiple headlines and primary texts) ARE supported on Meta instant-form lead ads.
32813
32825
  */
32814
32826
  leadGenFormId?: string;
32815
32827
  /**