@zernio/node 0.2.680 → 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
  };
@@ -27127,7 +27148,7 @@ type ListContactsData = {
27127
27148
  accountId?: string;
27128
27149
  isSubscribed?: 'true' | 'false';
27129
27150
  limit?: number;
27130
- platform?: 'instagram' | 'facebook' | 'telegram' | 'twitter' | 'bluesky' | 'reddit' | 'whatsapp';
27151
+ platform?: 'instagram' | 'facebook' | 'telegram' | 'twitter' | 'bluesky' | 'reddit' | 'whatsapp' | 'slack';
27131
27152
  /**
27132
27153
  * Filter by profile. Omit to list across all profiles. Matches the profile recorded on the contact itself, which is set when the contact is created and is independent of the profile its account currently belongs to. Filter by accountId to list a contact through its channel instead.
27133
27154
  */
@@ -27194,7 +27215,10 @@ type CreateContactData = {
27194
27215
  * Optional. Creates a channel if provided with platform + platformIdentifier
27195
27216
  */
27196
27217
  accountId?: string;
27197
- platform?: string;
27218
+ /**
27219
+ * Channel platform. Only the enum values support contact channels; any other platform is rejected with code platform_not_supported.
27220
+ */
27221
+ platform?: 'instagram' | 'facebook' | 'telegram' | 'twitter' | 'bluesky' | 'reddit' | 'whatsapp' | 'slack';
27198
27222
  platformIdentifier?: string;
27199
27223
  displayIdentifier?: string;
27200
27224
  };
@@ -29127,6 +29151,10 @@ type ListAdsData = {
29127
29151
  * Platform ad account ID (e.g. act_123 for Meta). Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree.
29128
29152
  */
29129
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;
29130
29158
  /**
29131
29159
  * Platform campaign ID (filter ads within a campaign)
29132
29160
  */
@@ -30278,29 +30306,51 @@ type UpdateAdData = {
30278
30306
  advantage_audience?: 0 | 1;
30279
30307
  };
30280
30308
  /**
30281
- * Replace the ad's creative. Meta, TikTok, and LinkedIn.
30282
- *
30283
- * - **Meta**: requires `headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`. The
30284
- * ad's existing creative is replaced via a new `/act_X/adcreatives` upload + ad
30285
- * 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.
30286
30322
  * - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives
30287
30323
  * have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes
30288
- * `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.
30289
30326
  * - **LinkedIn**: uploads new media (image via `imageUrl` or video via `videoUrl`),
30290
30327
  * creates a new inline media creative on the same campaign, and pauses the old
30291
30328
  * creative (best-effort). The old creative is retained for historical reporting.
30329
+ * `videoId` and `existingCreativeId` are Meta-only and return 400.
30292
30330
  *
30293
30331
  */
30294
30332
  creative?: {
30295
30333
  /**
30296
- * Meta only
30334
+ * Meta and LinkedIn (TikTok has no headline slot)
30297
30335
  */
30298
30336
  headline?: string;
30299
30337
  body?: string;
30338
+ /**
30339
+ * Link description slot (Meta `link_data.description` / `video_data.link_description`, LinkedIn creative description).
30340
+ */
30341
+ description?: string;
30300
30342
  callToAction?: string;
30301
30343
  linkUrl?: string;
30302
30344
  imageUrl?: string;
30303
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;
30304
30354
  };
30305
30355
  /**
30306
30356
  * Rename the ad. Now propagated to Meta (POST /{ad-id}); non-Meta platforms return 501.
@@ -32603,6 +32653,27 @@ type CreateStandaloneAdData = {
32603
32653
  id: string;
32604
32654
  name?: string;
32605
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
+ }>;
32606
32677
  /**
32607
32678
  * Normalized household-income tier. Meta and TikTok express all four; Google maps only
32608
32679
  * `top_10`; rejected on LinkedIn, X, and Pinterest. On Meta, income targeting is incompatible
@@ -33920,9 +33991,9 @@ type SearchAdTargetingData = {
33920
33991
  */
33921
33992
  countryCode?: string;
33922
33993
  /**
33923
- * 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.
33924
33995
  */
33925
- dimension?: 'geo' | 'interest' | 'behavior' | 'income';
33996
+ dimension?: 'geo' | 'interest' | 'behavior' | 'income' | 'workPosition' | 'workEmployer' | 'workIndustry';
33926
33997
  /**
33927
33998
  * Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`.
33928
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
  };
@@ -27127,7 +27148,7 @@ type ListContactsData = {
27127
27148
  accountId?: string;
27128
27149
  isSubscribed?: 'true' | 'false';
27129
27150
  limit?: number;
27130
- platform?: 'instagram' | 'facebook' | 'telegram' | 'twitter' | 'bluesky' | 'reddit' | 'whatsapp';
27151
+ platform?: 'instagram' | 'facebook' | 'telegram' | 'twitter' | 'bluesky' | 'reddit' | 'whatsapp' | 'slack';
27131
27152
  /**
27132
27153
  * Filter by profile. Omit to list across all profiles. Matches the profile recorded on the contact itself, which is set when the contact is created and is independent of the profile its account currently belongs to. Filter by accountId to list a contact through its channel instead.
27133
27154
  */
@@ -27194,7 +27215,10 @@ type CreateContactData = {
27194
27215
  * Optional. Creates a channel if provided with platform + platformIdentifier
27195
27216
  */
27196
27217
  accountId?: string;
27197
- platform?: string;
27218
+ /**
27219
+ * Channel platform. Only the enum values support contact channels; any other platform is rejected with code platform_not_supported.
27220
+ */
27221
+ platform?: 'instagram' | 'facebook' | 'telegram' | 'twitter' | 'bluesky' | 'reddit' | 'whatsapp' | 'slack';
27198
27222
  platformIdentifier?: string;
27199
27223
  displayIdentifier?: string;
27200
27224
  };
@@ -29127,6 +29151,10 @@ type ListAdsData = {
29127
29151
  * Platform ad account ID (e.g. act_123 for Meta). Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree.
29128
29152
  */
29129
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;
29130
29158
  /**
29131
29159
  * Platform campaign ID (filter ads within a campaign)
29132
29160
  */
@@ -30278,29 +30306,51 @@ type UpdateAdData = {
30278
30306
  advantage_audience?: 0 | 1;
30279
30307
  };
30280
30308
  /**
30281
- * Replace the ad's creative. Meta, TikTok, and LinkedIn.
30282
- *
30283
- * - **Meta**: requires `headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`. The
30284
- * ad's existing creative is replaced via a new `/act_X/adcreatives` upload + ad
30285
- * 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.
30286
30322
  * - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives
30287
30323
  * have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes
30288
- * `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.
30289
30326
  * - **LinkedIn**: uploads new media (image via `imageUrl` or video via `videoUrl`),
30290
30327
  * creates a new inline media creative on the same campaign, and pauses the old
30291
30328
  * creative (best-effort). The old creative is retained for historical reporting.
30329
+ * `videoId` and `existingCreativeId` are Meta-only and return 400.
30292
30330
  *
30293
30331
  */
30294
30332
  creative?: {
30295
30333
  /**
30296
- * Meta only
30334
+ * Meta and LinkedIn (TikTok has no headline slot)
30297
30335
  */
30298
30336
  headline?: string;
30299
30337
  body?: string;
30338
+ /**
30339
+ * Link description slot (Meta `link_data.description` / `video_data.link_description`, LinkedIn creative description).
30340
+ */
30341
+ description?: string;
30300
30342
  callToAction?: string;
30301
30343
  linkUrl?: string;
30302
30344
  imageUrl?: string;
30303
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;
30304
30354
  };
30305
30355
  /**
30306
30356
  * Rename the ad. Now propagated to Meta (POST /{ad-id}); non-Meta platforms return 501.
@@ -32603,6 +32653,27 @@ type CreateStandaloneAdData = {
32603
32653
  id: string;
32604
32654
  name?: string;
32605
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
+ }>;
32606
32677
  /**
32607
32678
  * Normalized household-income tier. Meta and TikTok express all four; Google maps only
32608
32679
  * `top_10`; rejected on LinkedIn, X, and Pinterest. On Meta, income targeting is incompatible
@@ -33920,9 +33991,9 @@ type SearchAdTargetingData = {
33920
33991
  */
33921
33992
  countryCode?: string;
33922
33993
  /**
33923
- * 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.
33924
33995
  */
33925
- dimension?: 'geo' | 'interest' | 'behavior' | 'income';
33996
+ dimension?: 'geo' | 'interest' | 'behavior' | 'income' | 'workPosition' | 'workEmployer' | 'workIndustry';
33926
33997
  /**
33927
33998
  * Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`.
33928
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.680",
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.680",
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.680",
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
  };
@@ -27372,7 +27393,7 @@ export type ListContactsData = {
27372
27393
  accountId?: string;
27373
27394
  isSubscribed?: 'true' | 'false';
27374
27395
  limit?: number;
27375
- platform?: 'instagram' | 'facebook' | 'telegram' | 'twitter' | 'bluesky' | 'reddit' | 'whatsapp';
27396
+ platform?: 'instagram' | 'facebook' | 'telegram' | 'twitter' | 'bluesky' | 'reddit' | 'whatsapp' | 'slack';
27376
27397
  /**
27377
27398
  * Filter by profile. Omit to list across all profiles. Matches the profile recorded on the contact itself, which is set when the contact is created and is independent of the profile its account currently belongs to. Filter by accountId to list a contact through its channel instead.
27378
27399
  */
@@ -27442,7 +27463,10 @@ export type CreateContactData = {
27442
27463
  * Optional. Creates a channel if provided with platform + platformIdentifier
27443
27464
  */
27444
27465
  accountId?: string;
27445
- platform?: string;
27466
+ /**
27467
+ * Channel platform. Only the enum values support contact channels; any other platform is rejected with code platform_not_supported.
27468
+ */
27469
+ platform?: 'instagram' | 'facebook' | 'telegram' | 'twitter' | 'bluesky' | 'reddit' | 'whatsapp' | 'slack';
27446
27470
  platformIdentifier?: string;
27447
27471
  displayIdentifier?: string;
27448
27472
  };
@@ -29531,6 +29555,10 @@ export type ListAdsData = {
29531
29555
  * Platform ad account ID (e.g. act_123 for Meta). Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree.
29532
29556
  */
29533
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;
29534
29562
  /**
29535
29563
  * Platform campaign ID (filter ads within a campaign)
29536
29564
  */
@@ -30745,29 +30773,51 @@ export type UpdateAdData = {
30745
30773
  advantage_audience?: 0 | 1;
30746
30774
  };
30747
30775
  /**
30748
- * Replace the ad's creative. Meta, TikTok, and LinkedIn.
30749
- *
30750
- * - **Meta**: requires `headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`. The
30751
- * ad's existing creative is replaced via a new `/act_X/adcreatives` upload + ad
30752
- * 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.
30753
30789
  * - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives
30754
30790
  * have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes
30755
- * `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.
30756
30793
  * - **LinkedIn**: uploads new media (image via `imageUrl` or video via `videoUrl`),
30757
30794
  * creates a new inline media creative on the same campaign, and pauses the old
30758
30795
  * creative (best-effort). The old creative is retained for historical reporting.
30796
+ * `videoId` and `existingCreativeId` are Meta-only and return 400.
30759
30797
  *
30760
30798
  */
30761
30799
  creative?: {
30762
30800
  /**
30763
- * Meta only
30801
+ * Meta and LinkedIn (TikTok has no headline slot)
30764
30802
  */
30765
30803
  headline?: string;
30766
30804
  body?: string;
30805
+ /**
30806
+ * Link description slot (Meta `link_data.description` / `video_data.link_description`, LinkedIn creative description).
30807
+ */
30808
+ description?: string;
30767
30809
  callToAction?: string;
30768
30810
  linkUrl?: string;
30769
30811
  imageUrl?: string;
30770
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;
30771
30821
  };
30772
30822
  /**
30773
30823
  * Rename the ad. Now propagated to Meta (POST /{ad-id}); non-Meta platforms return 501.
@@ -33202,6 +33252,27 @@ export type CreateStandaloneAdData = {
33202
33252
  id: string;
33203
33253
  name?: string;
33204
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
+ }>;
33205
33276
  /**
33206
33277
  * Normalized household-income tier. Meta and TikTok express all four; Google maps only
33207
33278
  * `top_10`; rejected on LinkedIn, X, and Pinterest. On Meta, income targeting is incompatible
@@ -34561,9 +34632,9 @@ export type SearchAdTargetingData = {
34561
34632
  */
34562
34633
  countryCode?: string;
34563
34634
  /**
34564
- * 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.
34565
34636
  */
34566
- dimension?: 'geo' | 'interest' | 'behavior' | 'income';
34637
+ dimension?: 'geo' | 'interest' | 'behavior' | 'income' | 'workPosition' | 'workEmployer' | 'workIndustry';
34567
34638
  /**
34568
34639
  * Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`.
34569
34640
  */