@zernio/node 0.2.681 → 0.2.682

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
@@ -6702,6 +6702,27 @@ type TargetingSpec = {
6702
6702
  id: string;
6703
6703
  name?: string;
6704
6704
  }>;
6705
+ /**
6706
+ * Meta only. Job title entities from /v1/ads/targeting/search?dimension=workPosition. Not interchangeable with the LinkedIn `jobTitles` URN fragments.
6707
+ */
6708
+ workPositions?: Array<{
6709
+ id: string;
6710
+ name?: string;
6711
+ }>;
6712
+ /**
6713
+ * Meta only. Employer entities from /v1/ads/targeting/search?dimension=workEmployer.
6714
+ */
6715
+ workEmployers?: Array<{
6716
+ id: string;
6717
+ name?: string;
6718
+ }>;
6719
+ /**
6720
+ * Meta only. Work-industry entities from /v1/ads/targeting/search?dimension=workIndustry. Not interchangeable with the LinkedIn `industries` URN fragments.
6721
+ */
6722
+ workIndustries?: Array<{
6723
+ id: string;
6724
+ name?: string;
6725
+ }>;
6705
6726
  /**
6706
6727
  * LinkedIn B2B only. Industry URN id fragments.
6707
6728
  */
@@ -6719,11 +6740,11 @@ type TargetingSpec = {
6719
6740
  */
6720
6741
  jobFunctions?: Array<(string)>;
6721
6742
  /**
6722
- * Platform audience IDs to include. Not supported on any platform (no builder maps it): rejected with a 400 on ad create, boost, and reach estimate.
6743
+ * Platform audience IDs to include, as returned by GET /v1/ads/audiences (Meta custom audience ids, TikTok audience ids, Pinterest customer list ids, LinkedIn segment ids (bare, urn:li:adSegment or urn:li:dmpSegment forms accepted), Google user list ids, X custom audience ids). Not supported on OpenAI (400).
6723
6744
  */
6724
6745
  audienceInclude?: Array<(string)>;
6725
6746
  /**
6726
- * Platform audience IDs to exclude. Not supported on any platform (no builder maps it): rejected with a 400 on ad create, boost, and reach estimate.
6747
+ * Platform audience IDs to exclude; same ID formats as audienceInclude. Not supported on OpenAI (400).
6727
6748
  */
6728
6749
  audienceExclude?: Array<(string)>;
6729
6750
  };
@@ -29130,6 +29151,10 @@ type ListAdsData = {
29130
29151
  * Platform ad account ID (e.g. act_123 for Meta). Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree.
29131
29152
  */
29132
29153
  adAccountId?: string;
29154
+ /**
29155
+ * Platform ad set ID (filter ads within an ad set, the /{adset_id}/ads read of an adset-centric dashboard).
29156
+ */
29157
+ adSetId?: string;
29133
29158
  /**
29134
29159
  * Platform campaign ID (filter ads within a campaign)
29135
29160
  */
@@ -30281,29 +30306,51 @@ type UpdateAdData = {
30281
30306
  advantage_audience?: 0 | 1;
30282
30307
  };
30283
30308
  /**
30284
- * Replace the ad's creative. Meta, TikTok, and LinkedIn.
30285
- *
30286
- * - **Meta**: requires `headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`. The
30287
- * ad's existing creative is replaced via a new `/act_X/adcreatives` upload + ad
30288
- * update. The old creative is retained on the ad account for historical reporting.
30309
+ * Replace or patch the ad's creative. Meta, TikTok, and LinkedIn.
30310
+ *
30311
+ * - **Meta**: patch-style. Pass any subset — fields you omit are preserved from the
30312
+ * live creative, including media (`image_hash`/`video_id` are reused, no re-upload)
30313
+ * and `url_tags`. Sending the full set (`headline`, `body`, `callToAction`,
30314
+ * `linkUrl`, `imageUrl`) rebuilds the creative from scratch instead. Partial
30315
+ * patching reads the live `object_story_spec`, which Meta strips on SHARE /
30316
+ * page-post / dark / asset_feed creatives — those return 422 asking for the full
30317
+ * set. A `videoUrl`/`videoId` on an image creative is a type change and also
30318
+ * needs the full set. `existingCreativeId` repoints the ad at a creative from
30319
+ * GET /v1/ads/creatives and ignores every other field. Meta creatives are
30320
+ * immutable, so any change creates a new creative and repoints the ad; the old
30321
+ * creative is retained on the ad account for historical reporting.
30289
30322
  * - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives
30290
30323
  * have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes
30291
- * `landing_page_url`; `videoUrl` triggers a fresh upload.
30324
+ * `landing_page_url`; `videoUrl` triggers a fresh upload. `description`, `videoId`
30325
+ * and `existingCreativeId` are Meta-only and return 400.
30292
30326
  * - **LinkedIn**: uploads new media (image via `imageUrl` or video via `videoUrl`),
30293
30327
  * creates a new inline media creative on the same campaign, and pauses the old
30294
30328
  * creative (best-effort). The old creative is retained for historical reporting.
30329
+ * `videoId` and `existingCreativeId` are Meta-only and return 400.
30295
30330
  *
30296
30331
  */
30297
30332
  creative?: {
30298
30333
  /**
30299
- * Meta only
30334
+ * Meta and LinkedIn (TikTok has no headline slot)
30300
30335
  */
30301
30336
  headline?: string;
30302
30337
  body?: string;
30338
+ /**
30339
+ * Link description slot (Meta `link_data.description` / `video_data.link_description`, LinkedIn creative description).
30340
+ */
30341
+ description?: string;
30303
30342
  callToAction?: string;
30304
30343
  linkUrl?: string;
30305
30344
  imageUrl?: string;
30306
30345
  videoUrl?: string;
30346
+ /**
30347
+ * Meta only. Reuse an already-uploaded ad video (from POST /v1/ads/videos or GET /v1/ads/videos) instead of re-uploading via videoUrl.
30348
+ */
30349
+ videoId?: string;
30350
+ /**
30351
+ * Meta only. Repoint the ad at an existing library creative (from GET /v1/ads/creatives); all other creative fields are ignored.
30352
+ */
30353
+ existingCreativeId?: string;
30307
30354
  };
30308
30355
  /**
30309
30356
  * Rename the ad. Now propagated to Meta (POST /{ad-id}); non-Meta platforms return 501.
@@ -32606,6 +32653,27 @@ type CreateStandaloneAdData = {
32606
32653
  id: string;
32607
32654
  name?: string;
32608
32655
  }>;
32656
+ /**
32657
+ * Meta only. Job title entities from /v1/ads/targeting/search?dimension=workPosition. Each must include id. Rejected on other platforms (use LinkedIn's `jobTitles` there).
32658
+ */
32659
+ workPositions?: Array<{
32660
+ id: string;
32661
+ name?: string;
32662
+ }>;
32663
+ /**
32664
+ * Meta only. Employer entities from /v1/ads/targeting/search?dimension=workEmployer. Each must include id.
32665
+ */
32666
+ workEmployers?: Array<{
32667
+ id: string;
32668
+ name?: string;
32669
+ }>;
32670
+ /**
32671
+ * Meta only. Work-industry entities from /v1/ads/targeting/search?dimension=workIndustry. Each must include id. Rejected on other platforms (use LinkedIn's `industries` there).
32672
+ */
32673
+ workIndustries?: Array<{
32674
+ id: string;
32675
+ name?: string;
32676
+ }>;
32609
32677
  /**
32610
32678
  * Normalized household-income tier. Meta and TikTok express all four; Google maps only
32611
32679
  * `top_10`; rejected on LinkedIn, X, and Pinterest. On Meta, income targeting is incompatible
@@ -33923,9 +33991,9 @@ type SearchAdTargetingData = {
33923
33991
  */
33924
33992
  countryCode?: string;
33925
33993
  /**
33926
- * What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
33994
+ * What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
33927
33995
  */
33928
- dimension?: 'geo' | 'interest' | 'behavior' | 'income';
33996
+ dimension?: 'geo' | 'interest' | 'behavior' | 'income' | 'workPosition' | 'workEmployer' | 'workIndustry';
33929
33997
  /**
33930
33998
  * Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`.
33931
33999
  */
package/dist/index.d.ts CHANGED
@@ -6702,6 +6702,27 @@ type TargetingSpec = {
6702
6702
  id: string;
6703
6703
  name?: string;
6704
6704
  }>;
6705
+ /**
6706
+ * Meta only. Job title entities from /v1/ads/targeting/search?dimension=workPosition. Not interchangeable with the LinkedIn `jobTitles` URN fragments.
6707
+ */
6708
+ workPositions?: Array<{
6709
+ id: string;
6710
+ name?: string;
6711
+ }>;
6712
+ /**
6713
+ * Meta only. Employer entities from /v1/ads/targeting/search?dimension=workEmployer.
6714
+ */
6715
+ workEmployers?: Array<{
6716
+ id: string;
6717
+ name?: string;
6718
+ }>;
6719
+ /**
6720
+ * Meta only. Work-industry entities from /v1/ads/targeting/search?dimension=workIndustry. Not interchangeable with the LinkedIn `industries` URN fragments.
6721
+ */
6722
+ workIndustries?: Array<{
6723
+ id: string;
6724
+ name?: string;
6725
+ }>;
6705
6726
  /**
6706
6727
  * LinkedIn B2B only. Industry URN id fragments.
6707
6728
  */
@@ -6719,11 +6740,11 @@ type TargetingSpec = {
6719
6740
  */
6720
6741
  jobFunctions?: Array<(string)>;
6721
6742
  /**
6722
- * Platform audience IDs to include. Not supported on any platform (no builder maps it): rejected with a 400 on ad create, boost, and reach estimate.
6743
+ * Platform audience IDs to include, as returned by GET /v1/ads/audiences (Meta custom audience ids, TikTok audience ids, Pinterest customer list ids, LinkedIn segment ids (bare, urn:li:adSegment or urn:li:dmpSegment forms accepted), Google user list ids, X custom audience ids). Not supported on OpenAI (400).
6723
6744
  */
6724
6745
  audienceInclude?: Array<(string)>;
6725
6746
  /**
6726
- * Platform audience IDs to exclude. Not supported on any platform (no builder maps it): rejected with a 400 on ad create, boost, and reach estimate.
6747
+ * Platform audience IDs to exclude; same ID formats as audienceInclude. Not supported on OpenAI (400).
6727
6748
  */
6728
6749
  audienceExclude?: Array<(string)>;
6729
6750
  };
@@ -29130,6 +29151,10 @@ type ListAdsData = {
29130
29151
  * Platform ad account ID (e.g. act_123 for Meta). Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree.
29131
29152
  */
29132
29153
  adAccountId?: string;
29154
+ /**
29155
+ * Platform ad set ID (filter ads within an ad set, the /{adset_id}/ads read of an adset-centric dashboard).
29156
+ */
29157
+ adSetId?: string;
29133
29158
  /**
29134
29159
  * Platform campaign ID (filter ads within a campaign)
29135
29160
  */
@@ -30281,29 +30306,51 @@ type UpdateAdData = {
30281
30306
  advantage_audience?: 0 | 1;
30282
30307
  };
30283
30308
  /**
30284
- * Replace the ad's creative. Meta, TikTok, and LinkedIn.
30285
- *
30286
- * - **Meta**: requires `headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`. The
30287
- * ad's existing creative is replaced via a new `/act_X/adcreatives` upload + ad
30288
- * update. The old creative is retained on the ad account for historical reporting.
30309
+ * Replace or patch the ad's creative. Meta, TikTok, and LinkedIn.
30310
+ *
30311
+ * - **Meta**: patch-style. Pass any subset — fields you omit are preserved from the
30312
+ * live creative, including media (`image_hash`/`video_id` are reused, no re-upload)
30313
+ * and `url_tags`. Sending the full set (`headline`, `body`, `callToAction`,
30314
+ * `linkUrl`, `imageUrl`) rebuilds the creative from scratch instead. Partial
30315
+ * patching reads the live `object_story_spec`, which Meta strips on SHARE /
30316
+ * page-post / dark / asset_feed creatives — those return 422 asking for the full
30317
+ * set. A `videoUrl`/`videoId` on an image creative is a type change and also
30318
+ * needs the full set. `existingCreativeId` repoints the ad at a creative from
30319
+ * GET /v1/ads/creatives and ignores every other field. Meta creatives are
30320
+ * immutable, so any change creates a new creative and repoints the ad; the old
30321
+ * creative is retained on the ad account for historical reporting.
30289
30322
  * - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives
30290
30323
  * have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes
30291
- * `landing_page_url`; `videoUrl` triggers a fresh upload.
30324
+ * `landing_page_url`; `videoUrl` triggers a fresh upload. `description`, `videoId`
30325
+ * and `existingCreativeId` are Meta-only and return 400.
30292
30326
  * - **LinkedIn**: uploads new media (image via `imageUrl` or video via `videoUrl`),
30293
30327
  * creates a new inline media creative on the same campaign, and pauses the old
30294
30328
  * creative (best-effort). The old creative is retained for historical reporting.
30329
+ * `videoId` and `existingCreativeId` are Meta-only and return 400.
30295
30330
  *
30296
30331
  */
30297
30332
  creative?: {
30298
30333
  /**
30299
- * Meta only
30334
+ * Meta and LinkedIn (TikTok has no headline slot)
30300
30335
  */
30301
30336
  headline?: string;
30302
30337
  body?: string;
30338
+ /**
30339
+ * Link description slot (Meta `link_data.description` / `video_data.link_description`, LinkedIn creative description).
30340
+ */
30341
+ description?: string;
30303
30342
  callToAction?: string;
30304
30343
  linkUrl?: string;
30305
30344
  imageUrl?: string;
30306
30345
  videoUrl?: string;
30346
+ /**
30347
+ * Meta only. Reuse an already-uploaded ad video (from POST /v1/ads/videos or GET /v1/ads/videos) instead of re-uploading via videoUrl.
30348
+ */
30349
+ videoId?: string;
30350
+ /**
30351
+ * Meta only. Repoint the ad at an existing library creative (from GET /v1/ads/creatives); all other creative fields are ignored.
30352
+ */
30353
+ existingCreativeId?: string;
30307
30354
  };
30308
30355
  /**
30309
30356
  * Rename the ad. Now propagated to Meta (POST /{ad-id}); non-Meta platforms return 501.
@@ -32606,6 +32653,27 @@ type CreateStandaloneAdData = {
32606
32653
  id: string;
32607
32654
  name?: string;
32608
32655
  }>;
32656
+ /**
32657
+ * Meta only. Job title entities from /v1/ads/targeting/search?dimension=workPosition. Each must include id. Rejected on other platforms (use LinkedIn's `jobTitles` there).
32658
+ */
32659
+ workPositions?: Array<{
32660
+ id: string;
32661
+ name?: string;
32662
+ }>;
32663
+ /**
32664
+ * Meta only. Employer entities from /v1/ads/targeting/search?dimension=workEmployer. Each must include id.
32665
+ */
32666
+ workEmployers?: Array<{
32667
+ id: string;
32668
+ name?: string;
32669
+ }>;
32670
+ /**
32671
+ * Meta only. Work-industry entities from /v1/ads/targeting/search?dimension=workIndustry. Each must include id. Rejected on other platforms (use LinkedIn's `industries` there).
32672
+ */
32673
+ workIndustries?: Array<{
32674
+ id: string;
32675
+ name?: string;
32676
+ }>;
32609
32677
  /**
32610
32678
  * Normalized household-income tier. Meta and TikTok express all four; Google maps only
32611
32679
  * `top_10`; rejected on LinkedIn, X, and Pinterest. On Meta, income targeting is incompatible
@@ -33923,9 +33991,9 @@ type SearchAdTargetingData = {
33923
33991
  */
33924
33992
  countryCode?: string;
33925
33993
  /**
33926
- * What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
33994
+ * What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
33927
33995
  */
33928
- dimension?: 'geo' | 'interest' | 'behavior' | 'income';
33996
+ dimension?: 'geo' | 'interest' | 'behavior' | 'income' | 'workPosition' | 'workEmployer' | 'workIndustry';
33929
33997
  /**
33930
33998
  * Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`.
33931
33999
  */
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.681",
39
+ version: "0.2.682",
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.681",
8
+ version: "0.2.682",
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.681",
3
+ "version": "0.2.682",
4
4
  "description": "The official Node.js library for the Zernio API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -9072,8 +9072,13 @@ export const searchAdInterests = <ThrowOnError extends boolean = false>(options:
9072
9072
  * `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences.
9073
9073
  *
9074
9074
  * The `dimension` param selects what is searched, `geo` (locations, further scoped
9075
- * by `geoType`), `interest`, `behavior`, or `income`. Availability of each dimension
9076
- * varies by platform (e.g. behaviours are Meta/TikTok only). Results are normalized
9075
+ * by `geoType`), `interest`, `behavior`, `income`, or the Meta-only work
9076
+ * demographics `workPosition`, `workEmployer` and `workIndustry` (their ids feed
9077
+ * `TargetingSpec.workPositions`/`workEmployers`/`workIndustries`). Availability of
9078
+ * each dimension varies by platform (e.g. behaviours are Meta/TikTok only).
9079
+ * Work industries are a fixed ~30-entry Meta catalog with no server-side query,
9080
+ * so `workIndustry` matching, ranking and `limit` happen in Zernio.
9081
+ * Results are normalized
9077
9082
  * across platforms into a single shape, so the same client code consumes Meta,
9078
9083
  * TikTok, LinkedIn, X, Pinterest, and Google results.
9079
9084
  *
@@ -5566,6 +5566,27 @@ export type TargetingSpec = {
5566
5566
  id: string;
5567
5567
  name?: string;
5568
5568
  }>;
5569
+ /**
5570
+ * Meta only. Job title entities from /v1/ads/targeting/search?dimension=workPosition. Not interchangeable with the LinkedIn `jobTitles` URN fragments.
5571
+ */
5572
+ workPositions?: Array<{
5573
+ id: string;
5574
+ name?: string;
5575
+ }>;
5576
+ /**
5577
+ * Meta only. Employer entities from /v1/ads/targeting/search?dimension=workEmployer.
5578
+ */
5579
+ workEmployers?: Array<{
5580
+ id: string;
5581
+ name?: string;
5582
+ }>;
5583
+ /**
5584
+ * Meta only. Work-industry entities from /v1/ads/targeting/search?dimension=workIndustry. Not interchangeable with the LinkedIn `industries` URN fragments.
5585
+ */
5586
+ workIndustries?: Array<{
5587
+ id: string;
5588
+ name?: string;
5589
+ }>;
5569
5590
  /**
5570
5591
  * LinkedIn B2B only. Industry URN id fragments.
5571
5592
  */
@@ -5583,11 +5604,11 @@ export type TargetingSpec = {
5583
5604
  */
5584
5605
  jobFunctions?: Array<(string)>;
5585
5606
  /**
5586
- * Platform audience IDs to include. Not supported on any platform (no builder maps it): rejected with a 400 on ad create, boost, and reach estimate.
5607
+ * Platform audience IDs to include, as returned by GET /v1/ads/audiences (Meta custom audience ids, TikTok audience ids, Pinterest customer list ids, LinkedIn segment ids (bare, urn:li:adSegment or urn:li:dmpSegment forms accepted), Google user list ids, X custom audience ids). Not supported on OpenAI (400).
5587
5608
  */
5588
5609
  audienceInclude?: Array<(string)>;
5589
5610
  /**
5590
- * Platform audience IDs to exclude. Not supported on any platform (no builder maps it): rejected with a 400 on ad create, boost, and reach estimate.
5611
+ * Platform audience IDs to exclude; same ID formats as audienceInclude. Not supported on OpenAI (400).
5591
5612
  */
5592
5613
  audienceExclude?: Array<(string)>;
5593
5614
  };
@@ -29534,6 +29555,10 @@ export type ListAdsData = {
29534
29555
  * Platform ad account ID (e.g. act_123 for Meta). Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree.
29535
29556
  */
29536
29557
  adAccountId?: string;
29558
+ /**
29559
+ * Platform ad set ID (filter ads within an ad set, the /{adset_id}/ads read of an adset-centric dashboard).
29560
+ */
29561
+ adSetId?: string;
29537
29562
  /**
29538
29563
  * Platform campaign ID (filter ads within a campaign)
29539
29564
  */
@@ -30748,29 +30773,51 @@ export type UpdateAdData = {
30748
30773
  advantage_audience?: 0 | 1;
30749
30774
  };
30750
30775
  /**
30751
- * Replace the ad's creative. Meta, TikTok, and LinkedIn.
30752
- *
30753
- * - **Meta**: requires `headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`. The
30754
- * ad's existing creative is replaced via a new `/act_X/adcreatives` upload + ad
30755
- * update. The old creative is retained on the ad account for historical reporting.
30776
+ * Replace or patch the ad's creative. Meta, TikTok, and LinkedIn.
30777
+ *
30778
+ * - **Meta**: patch-style. Pass any subset — fields you omit are preserved from the
30779
+ * live creative, including media (`image_hash`/`video_id` are reused, no re-upload)
30780
+ * and `url_tags`. Sending the full set (`headline`, `body`, `callToAction`,
30781
+ * `linkUrl`, `imageUrl`) rebuilds the creative from scratch instead. Partial
30782
+ * patching reads the live `object_story_spec`, which Meta strips on SHARE /
30783
+ * page-post / dark / asset_feed creatives — those return 422 asking for the full
30784
+ * set. A `videoUrl`/`videoId` on an image creative is a type change and also
30785
+ * needs the full set. `existingCreativeId` repoints the ad at a creative from
30786
+ * GET /v1/ads/creatives and ignores every other field. Meta creatives are
30787
+ * immutable, so any change creates a new creative and repoints the ad; the old
30788
+ * creative is retained on the ad account for historical reporting.
30756
30789
  * - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives
30757
30790
  * have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes
30758
- * `landing_page_url`; `videoUrl` triggers a fresh upload.
30791
+ * `landing_page_url`; `videoUrl` triggers a fresh upload. `description`, `videoId`
30792
+ * and `existingCreativeId` are Meta-only and return 400.
30759
30793
  * - **LinkedIn**: uploads new media (image via `imageUrl` or video via `videoUrl`),
30760
30794
  * creates a new inline media creative on the same campaign, and pauses the old
30761
30795
  * creative (best-effort). The old creative is retained for historical reporting.
30796
+ * `videoId` and `existingCreativeId` are Meta-only and return 400.
30762
30797
  *
30763
30798
  */
30764
30799
  creative?: {
30765
30800
  /**
30766
- * Meta only
30801
+ * Meta and LinkedIn (TikTok has no headline slot)
30767
30802
  */
30768
30803
  headline?: string;
30769
30804
  body?: string;
30805
+ /**
30806
+ * Link description slot (Meta `link_data.description` / `video_data.link_description`, LinkedIn creative description).
30807
+ */
30808
+ description?: string;
30770
30809
  callToAction?: string;
30771
30810
  linkUrl?: string;
30772
30811
  imageUrl?: string;
30773
30812
  videoUrl?: string;
30813
+ /**
30814
+ * Meta only. Reuse an already-uploaded ad video (from POST /v1/ads/videos or GET /v1/ads/videos) instead of re-uploading via videoUrl.
30815
+ */
30816
+ videoId?: string;
30817
+ /**
30818
+ * Meta only. Repoint the ad at an existing library creative (from GET /v1/ads/creatives); all other creative fields are ignored.
30819
+ */
30820
+ existingCreativeId?: string;
30774
30821
  };
30775
30822
  /**
30776
30823
  * Rename the ad. Now propagated to Meta (POST /{ad-id}); non-Meta platforms return 501.
@@ -33205,6 +33252,27 @@ export type CreateStandaloneAdData = {
33205
33252
  id: string;
33206
33253
  name?: string;
33207
33254
  }>;
33255
+ /**
33256
+ * Meta only. Job title entities from /v1/ads/targeting/search?dimension=workPosition. Each must include id. Rejected on other platforms (use LinkedIn's `jobTitles` there).
33257
+ */
33258
+ workPositions?: Array<{
33259
+ id: string;
33260
+ name?: string;
33261
+ }>;
33262
+ /**
33263
+ * Meta only. Employer entities from /v1/ads/targeting/search?dimension=workEmployer. Each must include id.
33264
+ */
33265
+ workEmployers?: Array<{
33266
+ id: string;
33267
+ name?: string;
33268
+ }>;
33269
+ /**
33270
+ * Meta only. Work-industry entities from /v1/ads/targeting/search?dimension=workIndustry. Each must include id. Rejected on other platforms (use LinkedIn's `industries` there).
33271
+ */
33272
+ workIndustries?: Array<{
33273
+ id: string;
33274
+ name?: string;
33275
+ }>;
33208
33276
  /**
33209
33277
  * Normalized household-income tier. Meta and TikTok express all four; Google maps only
33210
33278
  * `top_10`; rejected on LinkedIn, X, and Pinterest. On Meta, income targeting is incompatible
@@ -34564,9 +34632,9 @@ export type SearchAdTargetingData = {
34564
34632
  */
34565
34633
  countryCode?: string;
34566
34634
  /**
34567
- * What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
34635
+ * What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
34568
34636
  */
34569
- dimension?: 'geo' | 'interest' | 'behavior' | 'income';
34637
+ dimension?: 'geo' | 'interest' | 'behavior' | 'income' | 'workPosition' | 'workEmployer' | 'workIndustry';
34570
34638
  /**
34571
34639
  * Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`.
34572
34640
  */