@zernio/node 0.2.731 → 0.2.733

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.
@@ -255,6 +255,18 @@ export type Ad = {
255
255
  * Platform-specific creative data. Fields vary by platform.
256
256
  */
257
257
  creative?: {
258
+ /**
259
+ * Google RSA only. Replaces the complete headline list. No padding or truncation on update.
260
+ */
261
+ headlines?: Array<GoogleRsaHeadline>;
262
+ /**
263
+ * Google RSA only. Replaces the complete description list. No padding or truncation on update.
264
+ */
265
+ descriptions?: Array<GoogleRsaDescription>;
266
+ /**
267
+ * Google RSA only. Replaces final URLs. Omitted lists stay unchanged.
268
+ */
269
+ finalUrls?: Array<(string)>;
258
270
  /**
259
271
  * Primary thumbnail/image URL
260
272
  */
@@ -910,6 +922,124 @@ export type AdNegativeKeywordListKeyword = {
910
922
 
911
923
  export type matchType2 = 'broad' | 'phrase' | 'exact';
912
924
 
925
+ /**
926
+ * What the ad optimises against. Behaviour depends on the platform.
927
+ *
928
+ * **Meta**: forwarded to the ad set's `promoted_object` (snake-cased).
929
+ * For `goal: app_promotion`, it is also sent on the campaign only when
930
+ * `isSkadnetworkAttribution: true`. Plain Android app installs keep the
931
+ * existing campaign payload, with the promoted object only on the ad set.
932
+ * POST /v1/ads/campaigns forwards this object only for that explicit SKAN flag.
933
+ * Required for goals whose ad-set optimization_goal points at a specific
934
+ * event/page/app (without it Meta rejects the ad-set create with
935
+ * `error_subcode: 1815430` "Please select a promoted object for your ad set"):
936
+ * - `goal: conversions` / `lead_conversion` (OFFSITE_CONVERSIONS): requires `pixelId` + `customEventType`, or `customConversionId` when optimising against a Custom Conversion (the conversion carries its own event definition). For a pixel CUSTOM event (one you named yourself in CAPI/Events Manager), send `customEventType: OTHER` + `customEventStr` with the event name.
937
+ * - `goal: app_promotion` (APP_INSTALLS): requires `applicationId` + `objectStoreUrl`
938
+ * - `goal: lead_generation` (LEAD_GENERATION): `pageId` is auto-filled from the connected Page when omitted
939
+ *
940
+ * Other Meta goals (engagement, traffic, awareness, video_views) ignore this field.
941
+ *
942
+ * **TikTok**: used by `goal: conversions` and the Smart+ goals (`smartPlus: true`).
943
+ * - `pixelId` maps to the ad group's `pixel_id`. Required: a TikTok website-conversion
944
+ * ad group without a pixel is rejected with `40002: Please select a pixel`.
945
+ * - `customEventType` maps to the ad group's `optimization_event` (the pixel event to
946
+ * optimise for). Optional on the regular conversions flow, required on Smart+.
947
+ * See the `customEventType` field below for the valid TikTok codes.
948
+ * - `applicationId` (Smart+ `goal: app_promotion` only) maps to the ad group's `app_id`:
949
+ * the App ID of an app registered on the TikTok Ads account (Assets → Events →
950
+ * App Events). Install optimization needs the app's MMP tracking configured.
951
+ *
952
+ * The remaining `promotedObject.*` fields are Meta-only. Platforms other than
953
+ * Meta and TikTok ignore `promotedObject` entirely.
954
+ *
955
+ */
956
+ export type AdPromotedObject = {
957
+ /**
958
+ * Pixel ID. **Meta:** Facebook Pixel ID, required for `goal: conversions`.
959
+ * Requires `customEventType` alongside it; Meta rejects any promoted_object
960
+ * carrying `pixel_id` without `custom_event_type` (error_subcode 1885014),
961
+ * even when `customConversionId` is also present.
962
+ * **TikTok:** TikTok Pixel ID, required for `goal: conversions`.
963
+ * To discover the pixels an ad account can use, call
964
+ * `GET /v1/accounts/{accountId}/tracking-tags?adAccountId=act_...` (each entry
965
+ * carries `kind` and `ownerAdAccountId`), or
966
+ * `GET /v1/accounts/{accountId}/conversion-destinations`. Note this is a
967
+ * different resource from `GET /v1/ads/{adId}/tracking-tags`, which reads an
968
+ * ad's click-URL params (`url_tags`), not pixels.
969
+ *
970
+ */
971
+ pixelId?: string;
972
+ /**
973
+ * The event the campaign/ad group optimises against.
974
+ *
975
+ * **Meta:** standard event like `PURCHASE`, `LEAD`, `COMPLETE_REGISTRATION`,
976
+ * `ADD_TO_CART`. Uppercased internally so callers can pass any case. Required
977
+ * for `goal: conversions`.
978
+ *
979
+ * **TikTok:** an `optimization_event` code (UPPER_SNAKE, not Meta's vocabulary
980
+ * and not PascalCase), OR the exact event name shown in TikTok Events Manager
981
+ * (auto-resolved to its code). Must be one of the event types your TikTok
982
+ * Pixel tracks; custom events are not optimizable. Current taxonomy:
983
+ * `SHOPPING` (Purchase), `ON_WEB_CART` (Add to Cart), `INITIATE_ORDER`
984
+ * (Initiate Checkout), `FORM` (Lead), `ON_WEB_REGISTER` (Complete
985
+ * Registration), `ON_WEB_DETAIL` (View Content). `ON_WEB_ORDER` is
986
+ * deprecated. On rejection the error lists the event types your pixel
987
+ * actually tracks. Optional for `goal: conversions`.
988
+ *
989
+ */
990
+ customEventType?: string;
991
+ /**
992
+ * Meta only. Pixel custom-event name to optimise against (Meta's
993
+ * `custom_event_str`), exactly as it appears in Events Manager and in your
994
+ * CAPI payloads (case-sensitive, not uppercased). Requires
995
+ * `customEventType: OTHER`, and `OTHER` requires this field (400 either way).
996
+ * The same as picking a custom event in Ads Manager's conversion-event
997
+ * dropdown. For rule-based Custom Conversions use `customConversionId`
998
+ * instead.
999
+ *
1000
+ */
1001
+ customEventStr?: string;
1002
+ /**
1003
+ * Facebook Page ID. Used by `goal: lead_generation`. Auto-filled from the
1004
+ * connected Page when omitted.
1005
+ *
1006
+ */
1007
+ pageId?: string;
1008
+ /**
1009
+ * App ID. Required for `goal: app_promotion`.
1010
+ */
1011
+ applicationId?: string;
1012
+ /**
1013
+ * App Store / Play Store listing URL. Required for `goal: app_promotion`.
1014
+ */
1015
+ objectStoreUrl?: string;
1016
+ /**
1017
+ * Custom Conversion ID, when optimising against one instead of a standard
1018
+ * event. Accepted alone by this API, without `pixelId` or `customEventType`.
1019
+ * If `pixelId` is also sent, `customEventType` is still required on the
1020
+ * promoted_object (Meta rejects `pixel_id` without `custom_event_type`,
1021
+ * error_subcode 1885014).
1022
+ *
1023
+ */
1024
+ customConversionId?: string;
1025
+ /**
1026
+ * Optional catalog ID. If supplied with productSetId, the set must belong to this catalog. A catalog ID cannot replace productSetId.
1027
+ */
1028
+ productCatalogId?: string;
1029
+ /**
1030
+ * Meta product SET ID from GET /v1/ads/catalogs/{catalogId}/product-sets. Zernio checks that the token can read the set and its product_catalog before creation. A catalog ID or inaccessible set returns a precise 400 naming promotedObject.productSetId. A mismatch with productCatalogId names promotedObject.productCatalogId.
1031
+ */
1032
+ productSetId?: string;
1033
+ /**
1034
+ * Meta only. Offline event set (dataset) to optimise toward. Post-merger these are datasets: the id is the dataset id (for pixel-backed datasets, the pixel id).
1035
+ */
1036
+ offlineConversionDataSetId?: string;
1037
+ /**
1038
+ * Meta only. WhatsApp number on messaging-destination ad sets.
1039
+ */
1040
+ whatsappPhoneNumber?: string;
1041
+ };
1042
+
913
1043
  /**
914
1044
  * Platform-side review state, independent of the delivery `status` and the `configuredStatus` on/off toggle. `in_review` means the platform is still reviewing. Absent when the platform reports no review signal (e.g. a paused ad whose review state is masked behind the pause).
915
1045
  */
@@ -988,6 +1118,23 @@ export type AdsTimelineResponse = {
988
1118
  }>;
989
1119
  };
990
1120
 
1121
+ /**
1122
+ * Meta only. Attaches pixel measurement to the ad regardless of the optimization goal (the "Website events" tracking row in Ads Manager). `pixelId` becomes the ad's `tracking_specs` (offsite_conversion + fb_pixel); `urlTags` is stored on the new creative as `url_tags` and retained on the ad for compatibility. Applied on the legacy single-creative shape, every ad of the multi-creative shape, and the attach shape. NOTE: tracking lives on the AD object and is not inherited from the ad set, so pass it on EVERY attach call that should carry the pixel.
1123
+ */
1124
+ export type AdTracking = {
1125
+ /**
1126
+ * Meta Pixel ID to attach for offsite-conversion measurement.
1127
+ */
1128
+ pixelId?: string;
1129
+ /**
1130
+ * Click-URL params stored on the creative as `url_tags` and returned by GET /v1/ads/{adId}/tracking-tags. App-promotion linkUrl stays byte-identical to promotedObject.objectStoreUrl. Meta dynamic macros ({{ad.id}}, {{campaign.id}}, {{placement}}, ...) are sent through unescaped so Meta expands them; every other character is percent-encoded.
1131
+ */
1132
+ urlTags?: Array<{
1133
+ key: string;
1134
+ value: string;
1135
+ }>;
1136
+ };
1137
+
991
1138
  /**
992
1139
  * Ad set (or ad group/line item depending on platform) with rolled-up metrics and child ads
993
1140
  */
@@ -2823,6 +2970,7 @@ export type CtwaAdRequestBody = {
2823
2970
  * Meta enhancement settings for single or attached ads, and defaults for creatives[]. An item replaces the entire map, including with an empty object.
2824
2971
  */
2825
2972
  creativeFeatures?: MetaCreativeFeatures;
2973
+ tracking?: AdTracking;
2826
2974
  /**
2827
2975
  * Facebook or Instagram SocialAccount ID.
2828
2976
  */
@@ -4144,6 +4292,30 @@ export type GeoRestriction = {
4144
4292
  countries: Array<(string)>;
4145
4293
  };
4146
4294
 
4295
+ /**
4296
+ * Supply fields for exactly one asset type per update. finalUrls may accompany sitelinkAsset. Shared asset edits affect every attachment using the asset.
4297
+ */
4298
+ export type GoogleAssetUpdate = {
4299
+ /**
4300
+ * Asset resource name returned by a list operation. Must belong to the selected customer.
4301
+ */
4302
+ assetResourceName: string;
4303
+ sitelinkAsset?: {
4304
+ linkText?: string;
4305
+ description1?: string;
4306
+ description2?: string;
4307
+ /**
4308
+ * Alias for finalUrls with one URL. Do not supply both.
4309
+ */
4310
+ linkUrl?: string;
4311
+ };
4312
+ finalUrls?: Array<(string)>;
4313
+ calloutAsset?: {
4314
+ calloutText: string;
4315
+ };
4316
+ structuredSnippetAsset?: GoogleStructuredSnippet;
4317
+ };
4318
+
4147
4319
  /**
4148
4320
  * Text and single image only (no videos). Supports STANDARD, EVENT, OFFER, and ALERT post types. Posts appear on Google Business Profile, Google Search, and Maps. Use locationId for multi-location posting. Schedule dates accept both ISO 8601 strings (e.g. '2026-04-15T09:00:00Z') and Google's native {year, month, day} objects.
4149
4321
  */
@@ -4301,6 +4473,46 @@ export type GoogleBusinessReview = {
4301
4473
  */
4302
4474
  export type starRating = 'ONE' | 'TWO' | 'THREE' | 'FOUR' | 'FIVE';
4303
4475
 
4476
+ export type GoogleRsaDescription = {
4477
+ text: string;
4478
+ /**
4479
+ * Optional fixed description position. Omit to leave the asset unpinned.
4480
+ */
4481
+ pinnedField?: 'DESCRIPTION_1' | 'DESCRIPTION_2';
4482
+ };
4483
+
4484
+ /**
4485
+ * Optional fixed description position. Omit to leave the asset unpinned.
4486
+ */
4487
+ export type pinnedField = 'DESCRIPTION_1' | 'DESCRIPTION_2';
4488
+
4489
+ export type GoogleRsaHeadline = {
4490
+ text: string;
4491
+ /**
4492
+ * Optional fixed headline position. Omit to leave the asset unpinned.
4493
+ */
4494
+ pinnedField?: 'HEADLINE_1' | 'HEADLINE_2' | 'HEADLINE_3';
4495
+ };
4496
+
4497
+ /**
4498
+ * Optional fixed headline position. Omit to leave the asset unpinned.
4499
+ */
4500
+ export type pinnedField2 = 'HEADLINE_1' | 'HEADLINE_2' | 'HEADLINE_3';
4501
+
4502
+ export type GoogleSitelink = {
4503
+ text: string;
4504
+ linkUrl: string;
4505
+ description1?: string;
4506
+ description2?: string;
4507
+ };
4508
+
4509
+ export type GoogleStructuredSnippet = {
4510
+ header: 'Amenities' | 'Brands' | 'Courses' | 'Degree programs' | 'Destinations' | 'Featured hotels' | 'Insurance coverage' | 'Models' | 'Neighborhoods' | 'Service catalog' | 'Shows' | 'Styles' | 'Types';
4511
+ values: Array<(string)>;
4512
+ };
4513
+
4514
+ export type header = 'Amenities' | 'Brands' | 'Courses' | 'Degree programs' | 'Destinations' | 'Featured hotels' | 'Insurance coverage' | 'Models' | 'Neighborhoods' | 'Service catalog' | 'Shows' | 'Styles' | 'Types';
4515
+
4304
4516
  /**
4305
4517
  * Attachment snapshot inside an edit-history entry.
4306
4518
  */
@@ -5410,6 +5622,21 @@ export type MetaCreativeFeatures = {
5410
5622
  [key: string]: ('OPT_IN' | 'OPT_OUT');
5411
5623
  };
5412
5624
 
5625
+ export type MetaInstagramIdentityRef = {
5626
+ /**
5627
+ * Instagram identity ID.
5628
+ */
5629
+ igUserId: string;
5630
+ /**
5631
+ * Instagram username; empty when Meta does not expose it.
5632
+ */
5633
+ username: string;
5634
+ /**
5635
+ * Profile picture URL when available.
5636
+ */
5637
+ profilePictureUrl?: string;
5638
+ };
5639
+
5413
5640
  /**
5414
5641
  * Meta explicit Promotion offer. Maps to creative_sourcing_spec.promotion_metadata_spec with promotion_source ADVERTISER_INPUT. Dates become Unix seconds. Send null to omit an explicit offer on a new creative or remove it when rebuilding. Creation success alone does not confirm application: inspect promotionStatus in the response.
5415
5642
  */
@@ -6429,6 +6656,14 @@ export type platform8 = 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linke
6429
6656
  *
6430
6657
  */
6431
6658
  export type TargetingSpec = {
6659
+ /**
6660
+ * Meta only. Operating systems and version ranges, such as iOS_ver_14.0_and_above or Android. Emitted as user_os. May also be supplied inside targeting.
6661
+ */
6662
+ userOs?: Array<(string)>;
6663
+ /**
6664
+ * Meta only. Device models such as iPhone. Emitted as user_device. May also be supplied inside targeting.
6665
+ */
6666
+ userDevice?: Array<(string)>;
6432
6667
  /**
6433
6668
  * ISO 3166-1 alpha-2 country codes (e.g. ['US']).
6434
6669
  */
@@ -31950,6 +32185,19 @@ export type CreateAdCampaignData = {
31950
32185
  * Mapped to the ODAX objective (same mapping as POST /v1/ads/create).
31951
32186
  */
31952
32187
  goal: 'engagement' | 'traffic' | 'awareness' | 'video_views' | 'lead_generation' | 'lead_conversion' | 'job_applicants' | 'conversions' | 'app_promotion' | 'catalog_sales' | 'page_likes';
32188
+ /**
32189
+ * Meta app promotion only. Immutable campaign flag. Set true for iOS 14+ SKAdNetwork campaigns and supply promotedObject.applicationId plus promotedObject.objectStoreUrl. The campaign receives promotedObject only when this flag is true. Cannot be changed on an existing campaign.
32190
+ */
32191
+ isSkadnetworkAttribution?: boolean;
32192
+ promotedObject?: AdPromotedObject;
32193
+ /**
32194
+ * Meta only. SKAdNetwork app promotion requires AUCTION.
32195
+ */
32196
+ buyingType?: 'AUCTION' | 'RESERVED';
32197
+ /**
32198
+ * Meta only. Runs campaign validation without creating or persisting a campaign; Idempotency-Key storage is bypassed. Returns HTTP 200 with validateOnly true and status VALIDATED.
32199
+ */
32200
+ validateOnly?: boolean;
31953
32201
  specialAdCategories?: Array<('HOUSING' | 'EMPLOYMENT' | 'CREDIT' | 'ISSUES_ELECTIONS_POLITICS' | 'FINANCIAL_PRODUCTS_SERVICES' | 'ONLINE_GAMBLING_AND_GAMING')>;
31954
32202
  /**
31955
32203
  * Campaign-level (CBO) budget in WHOLE currency units (USD: 50 = $50.00), NOT cents. Meta's own Marketing API takes this same number in minor units, so it is an easy and expensive mix-up. Requires budgetType.
@@ -31983,6 +32231,18 @@ export type CreateAdCampaignData = {
31983
32231
  };
31984
32232
 
31985
32233
  export type CreateAdCampaignResponse = ({
32234
+ /**
32235
+ * Always true.
32236
+ */
32237
+ validateOnly?: boolean;
32238
+ adAccountId?: string;
32239
+ /**
32240
+ * Empty because no campaign was created.
32241
+ */
32242
+ campaignId?: "";
32243
+ objective?: string;
32244
+ status?: "VALIDATED";
32245
+ } | {
31986
32246
  adAccountId?: string;
31987
32247
  /**
31988
32248
  * Platform id of the new campaign
@@ -33088,6 +33348,14 @@ export type GetAdData = {
33088
33348
 
33089
33349
  export type GetAdResponse = ({
33090
33350
  ad?: Ad;
33351
+ /**
33352
+ * Google RSA details cache timestamp.
33353
+ */
33354
+ cachedAt?: (string) | null;
33355
+ /**
33356
+ * Whether Google RSA details use the last successful cached response.
33357
+ */
33358
+ stale?: boolean;
33091
33359
  });
33092
33360
 
33093
33361
  export type GetAdError = (ErrorResponse | {
@@ -33096,6 +33364,18 @@ export type GetAdError = (ErrorResponse | {
33096
33364
 
33097
33365
  export type UpdateAdData = {
33098
33366
  body: {
33367
+ /**
33368
+ * Google RSA only. Replaces the complete headline list. No padding or truncation on update.
33369
+ */
33370
+ headlines?: Array<GoogleRsaHeadline>;
33371
+ /**
33372
+ * Google RSA only. Replaces the complete description list. No padding or truncation on update.
33373
+ */
33374
+ descriptions?: Array<GoogleRsaDescription>;
33375
+ /**
33376
+ * Google RSA only. Replaces final URLs. Omitted lists stay unchanged.
33377
+ */
33378
+ finalUrls?: Array<(string)>;
33099
33379
  status?: 'active' | 'paused';
33100
33380
  budget?: {
33101
33381
  /**
@@ -33285,34 +33565,71 @@ export type UpdateAdStatusError = (unknown | {
33285
33565
  error?: string;
33286
33566
  });
33287
33567
 
33568
+ export type ListCampaignAssetsData = {
33569
+ path: {
33570
+ /**
33571
+ * Numeric Google platform id.
33572
+ */
33573
+ campaignId: string;
33574
+ };
33575
+ query: {
33576
+ accountId: string;
33577
+ customerId?: string;
33578
+ };
33579
+ };
33580
+
33581
+ export type ListCampaignAssetsResponse = ({
33582
+ campaignId?: string;
33583
+ sitelinks?: Array<{
33584
+ assetResourceName?: string;
33585
+ campaignAssetResourceName?: string;
33586
+ text?: string;
33587
+ linkUrl?: string;
33588
+ description1?: string;
33589
+ description2?: string;
33590
+ }>;
33591
+ callouts?: Array<{
33592
+ assetResourceName?: string;
33593
+ campaignAssetResourceName?: string;
33594
+ calloutText?: string;
33595
+ }>;
33596
+ structuredSnippets?: Array<{
33597
+ assetResourceName?: string;
33598
+ campaignAssetResourceName?: string;
33599
+ header?: string;
33600
+ values?: Array<(string)>;
33601
+ }>;
33602
+ /**
33603
+ * Time of the cached Google read. Null when no cache was used.
33604
+ */
33605
+ cachedAt?: (string) | null;
33606
+ /**
33607
+ * True when exhausted quota required returning the last successful read.
33608
+ */
33609
+ stale?: boolean;
33610
+ });
33611
+
33612
+ export type ListCampaignAssetsError = (ErrorResponse | {
33613
+ error?: string;
33614
+ } | unknown);
33615
+
33288
33616
  export type AttachCampaignAssetsData = {
33289
33617
  body: {
33290
33618
  /**
33291
- * Zernio Google Ads SocialAccount id. Resolves the customer id + refresh token.
33619
+ * Zernio Google Ads connection id.
33292
33620
  */
33293
33621
  accountId: string;
33294
33622
  /**
33295
- * Numeric Google Ads customer id. Required when the connection has multiple Google Ads accounts; optional (and inferred) when it has only one.
33623
+ * Google customer id without dashes. Required when the connection has multiple customers.
33296
33624
  */
33297
33625
  customerId?: string;
33298
- /**
33299
- * See POST /v1/ads/create sitelinks, same shape.
33300
- */
33301
- sitelinks?: Array<{
33302
- text: string;
33303
- linkUrl: string;
33304
- description1?: string;
33305
- description2?: string;
33306
- }>;
33626
+ sitelinks?: Array<GoogleSitelink>;
33307
33627
  callouts?: Array<(string)>;
33308
- structuredSnippets?: Array<{
33309
- header: 'Amenities' | 'Brands' | 'Courses' | 'Degree programs' | 'Destinations' | 'Featured hotels' | 'Insurance coverage' | 'Models' | 'Neighborhoods' | 'Service catalog' | 'Shows' | 'Styles' | 'Types';
33310
- values: Array<(string)>;
33311
- }>;
33628
+ structuredSnippets?: Array<GoogleStructuredSnippet>;
33312
33629
  };
33313
33630
  path: {
33314
33631
  /**
33315
- * Numeric Google platform campaign id.
33632
+ * Numeric Google platform id.
33316
33633
  */
33317
33634
  campaignId: string;
33318
33635
  };
@@ -33325,10 +33642,205 @@ export type AttachCampaignAssetsResponse = ({
33325
33642
  structuredSnippetAssetResourceNames?: Array<(string)>;
33326
33643
  });
33327
33644
 
33328
- export type AttachCampaignAssetsError = (unknown | {
33645
+ export type AttachCampaignAssetsError = (ErrorResponse | {
33646
+ error?: string;
33647
+ } | unknown);
33648
+
33649
+ export type UpdateCampaignAssetsData = {
33650
+ body: {
33651
+ /**
33652
+ * Zernio Google Ads connection id.
33653
+ */
33654
+ accountId: string;
33655
+ /**
33656
+ * Google customer id without dashes. Required when the connection has multiple customers.
33657
+ */
33658
+ customerId?: string;
33659
+ updates: Array<GoogleAssetUpdate>;
33660
+ };
33661
+ path: {
33662
+ /**
33663
+ * Numeric Google platform id.
33664
+ */
33665
+ campaignId: string;
33666
+ };
33667
+ };
33668
+
33669
+ export type UpdateCampaignAssetsResponse = ({
33670
+ updated?: number;
33671
+ });
33672
+
33673
+ export type UpdateCampaignAssetsError = (ErrorResponse | {
33329
33674
  error?: string;
33675
+ } | unknown);
33676
+
33677
+ export type RemoveCampaignAssetsData = {
33678
+ body: {
33679
+ /**
33680
+ * Zernio Google Ads connection id.
33681
+ */
33682
+ accountId: string;
33683
+ /**
33684
+ * Google customer id without dashes. Required when the connection has multiple customers.
33685
+ */
33686
+ customerId?: string;
33687
+ assetResourceNames: Array<(string)>;
33688
+ campaignAssetResourceNames: Array<(string)>;
33689
+ };
33690
+ path: {
33691
+ /**
33692
+ * Numeric Google platform id.
33693
+ */
33694
+ campaignId: string;
33695
+ };
33696
+ };
33697
+
33698
+ export type RemoveCampaignAssetsResponse = ({
33699
+ removed?: boolean;
33330
33700
  });
33331
33701
 
33702
+ export type RemoveCampaignAssetsError = (ErrorResponse | {
33703
+ error?: string;
33704
+ } | unknown);
33705
+
33706
+ export type ListAdGroupAssetsData = {
33707
+ path: {
33708
+ /**
33709
+ * Numeric Google platform id.
33710
+ */
33711
+ adSetId: string;
33712
+ };
33713
+ query: {
33714
+ accountId: string;
33715
+ customerId?: string;
33716
+ };
33717
+ };
33718
+
33719
+ export type ListAdGroupAssetsResponse = ({
33720
+ adGroupId?: string;
33721
+ sitelinks?: Array<{
33722
+ assetResourceName?: string;
33723
+ adGroupAssetResourceName?: string;
33724
+ text?: string;
33725
+ linkUrl?: string;
33726
+ description1?: string;
33727
+ description2?: string;
33728
+ }>;
33729
+ callouts?: Array<{
33730
+ assetResourceName?: string;
33731
+ adGroupAssetResourceName?: string;
33732
+ calloutText?: string;
33733
+ }>;
33734
+ structuredSnippets?: Array<{
33735
+ assetResourceName?: string;
33736
+ adGroupAssetResourceName?: string;
33737
+ header?: string;
33738
+ values?: Array<(string)>;
33739
+ }>;
33740
+ /**
33741
+ * Time of the cached Google read. Null when no cache was used.
33742
+ */
33743
+ cachedAt?: (string) | null;
33744
+ /**
33745
+ * True when exhausted quota required returning the last successful read.
33746
+ */
33747
+ stale?: boolean;
33748
+ });
33749
+
33750
+ export type ListAdGroupAssetsError = (ErrorResponse | {
33751
+ error?: string;
33752
+ } | unknown);
33753
+
33754
+ export type AttachAdGroupAssetsData = {
33755
+ body: {
33756
+ /**
33757
+ * Zernio Google Ads connection id.
33758
+ */
33759
+ accountId: string;
33760
+ /**
33761
+ * Google customer id without dashes. Required when the connection has multiple customers.
33762
+ */
33763
+ customerId?: string;
33764
+ sitelinks?: Array<GoogleSitelink>;
33765
+ callouts?: Array<(string)>;
33766
+ structuredSnippets?: Array<GoogleStructuredSnippet>;
33767
+ };
33768
+ path: {
33769
+ /**
33770
+ * Numeric Google platform id.
33771
+ */
33772
+ adSetId: string;
33773
+ };
33774
+ };
33775
+
33776
+ export type AttachAdGroupAssetsResponse = ({
33777
+ adGroupId?: string;
33778
+ sitelinkAssetResourceNames?: Array<(string)>;
33779
+ calloutAssetResourceNames?: Array<(string)>;
33780
+ structuredSnippetAssetResourceNames?: Array<(string)>;
33781
+ });
33782
+
33783
+ export type AttachAdGroupAssetsError = (ErrorResponse | {
33784
+ error?: string;
33785
+ } | unknown);
33786
+
33787
+ export type UpdateAdGroupAssetsData = {
33788
+ body: {
33789
+ /**
33790
+ * Zernio Google Ads connection id.
33791
+ */
33792
+ accountId: string;
33793
+ /**
33794
+ * Google customer id without dashes. Required when the connection has multiple customers.
33795
+ */
33796
+ customerId?: string;
33797
+ updates: Array<GoogleAssetUpdate>;
33798
+ };
33799
+ path: {
33800
+ /**
33801
+ * Numeric Google platform id.
33802
+ */
33803
+ adSetId: string;
33804
+ };
33805
+ };
33806
+
33807
+ export type UpdateAdGroupAssetsResponse = ({
33808
+ updated?: number;
33809
+ });
33810
+
33811
+ export type UpdateAdGroupAssetsError = (ErrorResponse | {
33812
+ error?: string;
33813
+ } | unknown);
33814
+
33815
+ export type RemoveAdGroupAssetsData = {
33816
+ body: {
33817
+ /**
33818
+ * Zernio Google Ads connection id.
33819
+ */
33820
+ accountId: string;
33821
+ /**
33822
+ * Google customer id without dashes. Required when the connection has multiple customers.
33823
+ */
33824
+ customerId?: string;
33825
+ assetResourceNames: Array<(string)>;
33826
+ adGroupAssetResourceNames: Array<(string)>;
33827
+ };
33828
+ path: {
33829
+ /**
33830
+ * Numeric Google platform id.
33831
+ */
33832
+ adSetId: string;
33833
+ };
33834
+ };
33835
+
33836
+ export type RemoveAdGroupAssetsResponse = ({
33837
+ removed?: boolean;
33838
+ });
33839
+
33840
+ export type RemoveAdGroupAssetsError = (ErrorResponse | {
33841
+ error?: string;
33842
+ } | unknown);
33843
+
33332
33844
  export type GetCampaignAnalyticsData = {
33333
33845
  path: {
33334
33846
  /**
@@ -33955,7 +34467,7 @@ export type UpdateAdTrackingTagsError = ({
33955
34467
  export type GetAdCommentsData = {
33956
34468
  path: {
33957
34469
  /**
33958
- * Internal Zernio ad ID (ObjectId).
34470
+ * Internal Zernio ad ID or indexed platform ad/post ID.
33959
34471
  */
33960
34472
  adId: string;
33961
34473
  };
@@ -33969,6 +34481,14 @@ export type GetAdCommentsData = {
33969
34481
  * Which side of the ad to return comments for. Omit to default to the Instagram side when present, else Facebook. Returns ad_not_commentable if the ad has no such placement.
33970
34482
  */
33971
34483
  placement?: 'facebook' | 'instagram';
34484
+ /**
34485
+ * TikTok-only start date. Defaults to 30 days before until. Maximum window is 30 days.
34486
+ */
34487
+ since?: string;
34488
+ /**
34489
+ * TikTok-only end date. Defaults to today in UTC.
34490
+ */
34491
+ until?: string;
33972
34492
  };
33973
34493
  };
33974
34494
 
@@ -33983,25 +34503,37 @@ export type GetAdCommentsResponse = ({
33983
34503
  };
33984
34504
  meta: {
33985
34505
  /**
33986
- * Which side these comments are on (same as `placement`).
34506
+ * Platform of the comments.
33987
34507
  */
33988
- platform: 'facebook' | 'instagram';
34508
+ platform: 'facebook' | 'instagram' | 'tiktok';
33989
34509
  /**
33990
34510
  * The placement these comments are for, useful when you didn't pass ?placement= and want to know which one you got.
33991
34511
  */
33992
- placement: 'facebook' | 'instagram';
34512
+ placement?: 'facebook' | 'instagram';
33993
34513
  /**
33994
34514
  * Internal Zernio ad ID.
33995
34515
  */
33996
34516
  adId: string;
33997
34517
  /**
33998
- * Meta ad ID.
34518
+ * Platform ad ID.
33999
34519
  */
34000
- platformAdId: string;
34520
+ platformAdId?: string;
34001
34521
  /**
34002
34522
  * Underlying post ID the comments belong to. effective_object_story_id for the Facebook side, effective_instagram_media_id for the Instagram side.
34003
34523
  */
34004
- effectiveStoryId: string;
34524
+ effectiveStoryId?: string;
34525
+ /**
34526
+ * TikTok-only video item ID. Null when the ad and comments do not expose it.
34527
+ */
34528
+ tiktokItemId?: (string) | null;
34529
+ /**
34530
+ * TikTok-only resolved start date.
34531
+ */
34532
+ since?: string;
34533
+ /**
34534
+ * TikTok-only resolved end date.
34535
+ */
34536
+ until?: string;
34005
34537
  /**
34006
34538
  * Facebook-only. The connected Facebook Page SocialAccount these comments were read through. Pass it as `accountId` (with `effectiveStoryId` as the postId) to /v1/inbox/comments to reply/hide/delete. Null when no connected Page was used (then moderation isn't possible).
34007
34539
  */
@@ -34030,6 +34562,127 @@ export type GetAdCommentsError = (unknown | {
34030
34562
  error?: string;
34031
34563
  });
34032
34564
 
34565
+ export type ReplyToAdCommentData = {
34566
+ body: {
34567
+ /**
34568
+ * Non-empty reply text.
34569
+ */
34570
+ text: string;
34571
+ };
34572
+ path: {
34573
+ /**
34574
+ * Internal Zernio ad ID or indexed platform ad ID.
34575
+ */
34576
+ adId: string;
34577
+ /**
34578
+ * TikTok comment ID from the ad comment listing.
34579
+ */
34580
+ commentId: string;
34581
+ };
34582
+ query?: {
34583
+ /**
34584
+ * Start date of the comment lookup window. Defaults to 30 days before until.
34585
+ */
34586
+ since?: string;
34587
+ /**
34588
+ * End date of the comment lookup window. Defaults to today in UTC.
34589
+ */
34590
+ until?: string;
34591
+ };
34592
+ };
34593
+
34594
+ export type ReplyToAdCommentResponse = ({
34595
+ status: 'success';
34596
+ /**
34597
+ * ID of the created reply or moderated comment.
34598
+ */
34599
+ commentId: string;
34600
+ });
34601
+
34602
+ export type ReplyToAdCommentError = (ErrorResponse | {
34603
+ error?: string;
34604
+ } | unknown);
34605
+
34606
+ export type HideAdCommentData = {
34607
+ body: {
34608
+ /**
34609
+ * True to hide the comment; false to restore it.
34610
+ */
34611
+ hidden: boolean;
34612
+ };
34613
+ path: {
34614
+ /**
34615
+ * Internal Zernio ad ID or indexed platform ad ID.
34616
+ */
34617
+ adId: string;
34618
+ /**
34619
+ * TikTok comment ID from the ad comment listing.
34620
+ */
34621
+ commentId: string;
34622
+ };
34623
+ query?: {
34624
+ /**
34625
+ * Start date of the comment lookup window. Defaults to 30 days before until.
34626
+ */
34627
+ since?: string;
34628
+ /**
34629
+ * End date of the comment lookup window. Defaults to today in UTC.
34630
+ */
34631
+ until?: string;
34632
+ };
34633
+ };
34634
+
34635
+ export type HideAdCommentResponse = ({
34636
+ status: 'success';
34637
+ /**
34638
+ * ID of the created reply or moderated comment.
34639
+ */
34640
+ commentId: string;
34641
+ /**
34642
+ * The requested visibility state.
34643
+ */
34644
+ hidden?: boolean;
34645
+ });
34646
+
34647
+ export type HideAdCommentError = (ErrorResponse | {
34648
+ error?: string;
34649
+ } | unknown);
34650
+
34651
+ export type DeleteAdCommentData = {
34652
+ path: {
34653
+ /**
34654
+ * Internal Zernio ad ID or indexed platform ad ID.
34655
+ */
34656
+ adId: string;
34657
+ /**
34658
+ * TikTok comment ID from the ad comment listing.
34659
+ */
34660
+ commentId: string;
34661
+ };
34662
+ query?: {
34663
+ /**
34664
+ * Start date of the comment lookup window. Defaults to 30 days before until.
34665
+ */
34666
+ since?: string;
34667
+ /**
34668
+ * End date of the comment lookup window. Defaults to today in UTC.
34669
+ */
34670
+ until?: string;
34671
+ };
34672
+ };
34673
+
34674
+ export type DeleteAdCommentResponse = ({
34675
+ status: 'success';
34676
+ /**
34677
+ * ID of the created reply or moderated comment.
34678
+ */
34679
+ commentId: string;
34680
+ });
34681
+
34682
+ export type DeleteAdCommentError = (ErrorResponse | {
34683
+ error?: string;
34684
+ } | unknown);
34685
+
34033
34686
  export type ListAdsBusinessCentersData = {
34034
34687
  query: {
34035
34688
  /**
@@ -34246,6 +34899,140 @@ export type ListAdStudiesError = (unknown | {
34246
34899
  error?: string;
34247
34900
  });
34248
34901
 
34902
+ export type ListAdsInstagramAccountsData = {
34903
+ query: {
34904
+ /**
34905
+ * Zernio Meta Ads or Facebook SocialAccount ID.
34906
+ */
34907
+ accountId: string;
34908
+ /**
34909
+ * Meta ad account ID including the act_ prefix.
34910
+ */
34911
+ adAccountId: string;
34912
+ };
34913
+ };
34914
+
34915
+ export type ListAdsInstagramAccountsResponse = ({
34916
+ accounts: Array<(MetaInstagramIdentityRef & {
34917
+ /**
34918
+ * Whether this is a Page-backed Instagram identity.
34919
+ */
34920
+ isPageBacked: boolean;
34921
+ /**
34922
+ * Discovery source; Page linkage also uses page_backed.
34923
+ */
34924
+ source: 'ad_account' | 'page_backed' | 'business';
34925
+ })>;
34926
+ pages: Array<{
34927
+ /**
34928
+ * Facebook Page ID.
34929
+ */
34930
+ pageId: string;
34931
+ /**
34932
+ * Facebook Page name.
34933
+ */
34934
+ name: string;
34935
+ instagramBusinessAccount?: MetaInstagramIdentityRef;
34936
+ connectedInstagramAccount?: MetaInstagramIdentityRef;
34937
+ }>;
34938
+ resolved: {
34939
+ /**
34940
+ * Page selected by the shared ad-creation resolver.
34941
+ */
34942
+ pageId: (string) | null;
34943
+ /**
34944
+ * Instagram identity selected by the shared ad-creation resolver.
34945
+ */
34946
+ igUserId: (string) | null;
34947
+ /**
34948
+ * Discovery source of the resolved identity; null when absent from discovery.
34949
+ */
34950
+ source: ('ad_account' | 'page_backed' | 'business') | null;
34951
+ };
34952
+ });
34953
+
34954
+ export type ListAdsInstagramAccountsError = (ErrorResponse | {
34955
+ error?: string;
34956
+ } | unknown);
34957
+
34958
+ export type ListAdvertisableApplicationsData = {
34959
+ query: {
34960
+ /**
34961
+ * Zernio Meta Ads or Facebook SocialAccount ID.
34962
+ */
34963
+ accountId: string;
34964
+ /**
34965
+ * Meta ad account ID including the act_ prefix.
34966
+ */
34967
+ adAccountId: string;
34968
+ };
34969
+ };
34970
+
34971
+ export type ListAdvertisableApplicationsResponse = ({
34972
+ applications: Array<{
34973
+ /**
34974
+ * Meta application ID.
34975
+ */
34976
+ id: string;
34977
+ /**
34978
+ * Application name.
34979
+ */
34980
+ name: string;
34981
+ /**
34982
+ * Platform identifiers reported by Meta.
34983
+ */
34984
+ supportedPlatforms: Array<(string)>;
34985
+ /**
34986
+ * Platform-keyed store URLs returned unchanged by Meta.
34987
+ */
34988
+ storeUrls: {
34989
+ [key: string]: (string);
34990
+ };
34991
+ }>;
34992
+ });
34993
+
34994
+ export type ListAdvertisableApplicationsError = (ErrorResponse | {
34995
+ error?: string;
34996
+ } | unknown);
34997
+
34998
+ export type GetIosFourteenCampaignLimitsData = {
34999
+ query: {
35000
+ /**
35001
+ * Zernio Meta Ads or Facebook SocialAccount ID.
35002
+ */
35003
+ accountId: string;
35004
+ /**
35005
+ * Meta ad account ID including the act_ prefix.
35006
+ */
35007
+ adAccountId: string;
35008
+ /**
35009
+ * Meta application ID from advertisable-applications.
35010
+ */
35011
+ applicationId: string;
35012
+ };
35013
+ };
35014
+
35015
+ export type GetIosFourteenCampaignLimitsResponse = ({
35016
+ limits: {
35017
+ /**
35018
+ * Campaign group limit reported by Meta.
35019
+ */
35020
+ campaignGroupLimit?: (number) | null;
35021
+ /**
35022
+ * Campaign limit reported by Meta.
35023
+ */
35024
+ campaignLimit?: (number) | null;
35025
+ /**
35026
+ * Campaign group limit details returned by Meta.
35027
+ */
35028
+ campaignGroupLimitsDetails?: Array<unknown>;
35029
+ } | null;
35030
+ });
35031
+
35032
+ export type GetIosFourteenCampaignLimitsError = (ErrorResponse | {
35033
+ error?: string;
35034
+ } | unknown);
35035
+
34249
35036
  export type ListMetaBusinessesData = {
34250
35037
  query: {
34251
35038
  /**
@@ -35026,13 +35813,7 @@ export type ReplaceCampaignNegativeKeywordListsError = (ErrorResponse | {
35026
35813
 
35027
35814
  export type ListAccountCalloutsData = {
35028
35815
  query: {
35029
- /**
35030
- * Google ads SocialAccount id.
35031
- */
35032
35816
  accountId: string;
35033
- /**
35034
- * Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer.
35035
- */
35036
35817
  customerId?: string;
35037
35818
  };
35038
35819
  };
@@ -35041,18 +35822,15 @@ export type ListAccountCalloutsResponse = ({
35041
35822
  customerId?: string;
35042
35823
  callouts?: Array<{
35043
35824
  assetId?: string;
35044
- text?: string;
35045
- /**
35046
- * customer_asset.status, e.g. ENABLED, REMOVED, PAUSED.
35047
- */
35048
35825
  status?: string;
35826
+ text?: string;
35049
35827
  }>;
35050
35828
  /**
35051
- * When this list was fetched from Google. Null when it was never served from cache.
35829
+ * Time of the cached Google read. Null when no cache was used.
35052
35830
  */
35053
35831
  cachedAt?: (string) | null;
35054
35832
  /**
35055
- * True when Google's daily API quota was exhausted and this is the last successful fetch, not a live read.
35833
+ * True when exhausted quota required returning the last successful read.
35056
35834
  */
35057
35835
  stale?: boolean;
35058
35836
  });
@@ -35064,16 +35842,13 @@ export type ListAccountCalloutsError = (ErrorResponse | {
35064
35842
  export type AddAccountCalloutsData = {
35065
35843
  body: {
35066
35844
  /**
35067
- * Zernio SocialAccount id owning the Google Ads connection.
35845
+ * Zernio Google Ads connection id.
35068
35846
  */
35069
35847
  accountId: string;
35070
35848
  /**
35071
- * Numeric Google Ads customer id. Only required when the connection has more than one.
35849
+ * Google customer id without dashes. Required when the connection has multiple customers.
35072
35850
  */
35073
35851
  customerId?: string;
35074
- /**
35075
- * Callout text, 1-25 characters each; up to 20 per request (Google's CalloutAsset limits).
35076
- */
35077
35852
  callouts: Array<(string)>;
35078
35853
  };
35079
35854
  };
@@ -35090,19 +35865,47 @@ export type AddAccountCalloutsError = (ErrorResponse | {
35090
35865
  error?: string;
35091
35866
  } | unknown);
35092
35867
 
35093
- export type RemoveAccountCalloutData = {
35868
+ export type UpdateAccountCalloutsData = {
35094
35869
  body: {
35095
35870
  /**
35096
- * Zernio SocialAccount id owning the Google Ads connection.
35871
+ * Zernio Google Ads connection id.
35097
35872
  */
35098
35873
  accountId: string;
35099
35874
  /**
35100
- * Numeric Google Ads customer id. Only required when the connection has more than one.
35875
+ * Google customer id without dashes. Required when the connection has multiple customers.
35101
35876
  */
35102
35877
  customerId?: string;
35878
+ updates: Array<{
35879
+ /**
35880
+ * Asset resource name returned by a list operation. Must belong to the selected customer.
35881
+ */
35882
+ assetResourceName: string;
35883
+ calloutAsset?: {
35884
+ calloutText: string;
35885
+ };
35886
+ }>;
35887
+ };
35888
+ };
35889
+
35890
+ export type UpdateAccountCalloutsResponse = ({
35891
+ updated?: number;
35892
+ customerId?: string;
35893
+ });
35894
+
35895
+ export type UpdateAccountCalloutsError = (ErrorResponse | {
35896
+ error?: string;
35897
+ } | unknown);
35898
+
35899
+ export type RemoveAccountCalloutData = {
35900
+ body: {
35103
35901
  /**
35104
- * Numeric asset id from GET /v1/ads/accounts/callouts.
35902
+ * Zernio Google Ads connection id.
35105
35903
  */
35904
+ accountId: string;
35905
+ /**
35906
+ * Google customer id without dashes. Required when the connection has multiple customers.
35907
+ */
35908
+ customerId?: string;
35106
35909
  assetId: string;
35107
35910
  };
35108
35911
  };
@@ -35116,6 +35919,239 @@ export type RemoveAccountCalloutError = (ErrorResponse | {
35116
35919
  error?: string;
35117
35920
  } | unknown);
35118
35921
 
35922
+ export type ListAccountSitelinksData = {
35923
+ query: {
35924
+ accountId: string;
35925
+ customerId?: string;
35926
+ };
35927
+ };
35928
+
35929
+ export type ListAccountSitelinksResponse = ({
35930
+ customerId?: string;
35931
+ sitelinks?: Array<{
35932
+ assetId?: string;
35933
+ status?: string;
35934
+ assetResourceName?: string;
35935
+ customerAssetResourceName?: string;
35936
+ text?: string;
35937
+ linkUrl?: string;
35938
+ description1?: string;
35939
+ description2?: string;
35940
+ }>;
35941
+ /**
35942
+ * Time of the cached Google read. Null when no cache was used.
35943
+ */
35944
+ cachedAt?: (string) | null;
35945
+ /**
35946
+ * True when exhausted quota required returning the last successful read.
35947
+ */
35948
+ stale?: boolean;
35949
+ });
35950
+
35951
+ export type ListAccountSitelinksError = (ErrorResponse | {
35952
+ error?: string;
35953
+ } | unknown);
35954
+
35955
+ export type AddAccountSitelinksData = {
35956
+ body: {
35957
+ /**
35958
+ * Zernio Google Ads connection id.
35959
+ */
35960
+ accountId: string;
35961
+ /**
35962
+ * Google customer id without dashes. Required when the connection has multiple customers.
35963
+ */
35964
+ customerId?: string;
35965
+ sitelinks: Array<GoogleSitelink>;
35966
+ };
35967
+ };
35968
+
35969
+ export type AddAccountSitelinksResponse = ({
35970
+ customerId?: string;
35971
+ sitelinks?: Array<{
35972
+ assetId?: string;
35973
+ text?: string;
35974
+ linkUrl?: string;
35975
+ description1?: string;
35976
+ description2?: string;
35977
+ }>;
35978
+ });
35979
+
35980
+ export type AddAccountSitelinksError = (ErrorResponse | {
35981
+ error?: string;
35982
+ } | unknown);
35983
+
35984
+ export type UpdateAccountSitelinksData = {
35985
+ body: {
35986
+ /**
35987
+ * Zernio Google Ads connection id.
35988
+ */
35989
+ accountId: string;
35990
+ /**
35991
+ * Google customer id without dashes. Required when the connection has multiple customers.
35992
+ */
35993
+ customerId?: string;
35994
+ updates: Array<{
35995
+ /**
35996
+ * Asset resource name returned by a list operation. Must belong to the selected customer.
35997
+ */
35998
+ assetResourceName: string;
35999
+ sitelinkAsset?: {
36000
+ linkText?: string;
36001
+ description1?: string;
36002
+ description2?: string;
36003
+ /**
36004
+ * Alias for finalUrls with one URL. Do not supply both.
36005
+ */
36006
+ linkUrl?: string;
36007
+ };
36008
+ finalUrls?: Array<(string)>;
36009
+ }>;
36010
+ };
36011
+ };
36012
+
36013
+ export type UpdateAccountSitelinksResponse = ({
36014
+ updated?: number;
36015
+ customerId?: string;
36016
+ });
36017
+
36018
+ export type UpdateAccountSitelinksError = (ErrorResponse | {
36019
+ error?: string;
36020
+ } | unknown);
36021
+
36022
+ export type RemoveAccountSitelinkData = {
36023
+ body: {
36024
+ /**
36025
+ * Zernio Google Ads connection id.
36026
+ */
36027
+ accountId: string;
36028
+ /**
36029
+ * Google customer id without dashes. Required when the connection has multiple customers.
36030
+ */
36031
+ customerId?: string;
36032
+ assetId: string;
36033
+ };
36034
+ };
36035
+
36036
+ export type RemoveAccountSitelinkResponse = ({
36037
+ removed?: boolean;
36038
+ customerId?: string;
36039
+ });
36040
+
36041
+ export type RemoveAccountSitelinkError = (ErrorResponse | {
36042
+ error?: string;
36043
+ } | unknown);
36044
+
36045
+ export type ListAccountStructuredSnippetsData = {
36046
+ query: {
36047
+ accountId: string;
36048
+ customerId?: string;
36049
+ };
36050
+ };
36051
+
36052
+ export type ListAccountStructuredSnippetsResponse = ({
36053
+ customerId?: string;
36054
+ structuredSnippets?: Array<{
36055
+ assetId?: string;
36056
+ status?: string;
36057
+ assetResourceName?: string;
36058
+ customerAssetResourceName?: string;
36059
+ header?: string;
36060
+ values?: Array<(string)>;
36061
+ }>;
36062
+ /**
36063
+ * Time of the cached Google read. Null when no cache was used.
36064
+ */
36065
+ cachedAt?: (string) | null;
36066
+ /**
36067
+ * True when exhausted quota required returning the last successful read.
36068
+ */
36069
+ stale?: boolean;
36070
+ });
36071
+
36072
+ export type ListAccountStructuredSnippetsError = (ErrorResponse | {
36073
+ error?: string;
36074
+ } | unknown);
36075
+
36076
+ export type AddAccountStructuredSnippetsData = {
36077
+ body: {
36078
+ /**
36079
+ * Zernio Google Ads connection id.
36080
+ */
36081
+ accountId: string;
36082
+ /**
36083
+ * Google customer id without dashes. Required when the connection has multiple customers.
36084
+ */
36085
+ customerId?: string;
36086
+ structuredSnippets: Array<GoogleStructuredSnippet>;
36087
+ };
36088
+ };
36089
+
36090
+ export type AddAccountStructuredSnippetsResponse = ({
36091
+ customerId?: string;
36092
+ structuredSnippets?: Array<{
36093
+ assetId?: string;
36094
+ header?: 'Amenities' | 'Brands' | 'Courses' | 'Degree programs' | 'Destinations' | 'Featured hotels' | 'Insurance coverage' | 'Models' | 'Neighborhoods' | 'Service catalog' | 'Shows' | 'Styles' | 'Types';
36095
+ values?: Array<(string)>;
36096
+ }>;
36097
+ });
36098
+
36099
+ export type AddAccountStructuredSnippetsError = (ErrorResponse | {
36100
+ error?: string;
36101
+ } | unknown);
36102
+
36103
+ export type UpdateAccountStructuredSnippetsData = {
36104
+ body: {
36105
+ /**
36106
+ * Zernio Google Ads connection id.
36107
+ */
36108
+ accountId: string;
36109
+ /**
36110
+ * Google customer id without dashes. Required when the connection has multiple customers.
36111
+ */
36112
+ customerId?: string;
36113
+ updates: Array<{
36114
+ /**
36115
+ * Asset resource name returned by a list operation. Must belong to the selected customer.
36116
+ */
36117
+ assetResourceName: string;
36118
+ structuredSnippetAsset?: GoogleStructuredSnippet;
36119
+ }>;
36120
+ };
36121
+ };
36122
+
36123
+ export type UpdateAccountStructuredSnippetsResponse = ({
36124
+ updated?: number;
36125
+ customerId?: string;
36126
+ });
36127
+
36128
+ export type UpdateAccountStructuredSnippetsError = (ErrorResponse | {
36129
+ error?: string;
36130
+ } | unknown);
36131
+
36132
+ export type RemoveAccountStructuredSnippetData = {
36133
+ body: {
36134
+ /**
36135
+ * Zernio Google Ads connection id.
36136
+ */
36137
+ accountId: string;
36138
+ /**
36139
+ * Google customer id without dashes. Required when the connection has multiple customers.
36140
+ */
36141
+ customerId?: string;
36142
+ assetId: string;
36143
+ };
36144
+ };
36145
+
36146
+ export type RemoveAccountStructuredSnippetResponse = ({
36147
+ removed?: boolean;
36148
+ customerId?: string;
36149
+ });
36150
+
36151
+ export type RemoveAccountStructuredSnippetError = (ErrorResponse | {
36152
+ error?: string;
36153
+ } | unknown);
36154
+
35119
36155
  export type GetAdAccountFinanceData = {
35120
36156
  query: {
35121
36157
  /**
@@ -35696,22 +36732,7 @@ export type CreateStandaloneAdData = {
35696
36732
  * Meta only. Exact ad name (the single-creative ad object's name). Overrides the default, which is `name`. (For per-ad names on the multi-creative shape, set `name` on each `creatives[]` entry instead.)
35697
36733
  */
35698
36734
  adName?: string;
35699
- /**
35700
- * Meta only. Attaches pixel measurement to the ad regardless of the optimization goal (the "Website events" tracking row in Ads Manager). `pixelId` becomes the ad's `tracking_specs` (offsite_conversion + fb_pixel); `urlTags` becomes the ad's `url_tags` (click-tracking query params). Applied on the legacy single-creative shape, every ad of the multi-creative shape, and the attach shape. NOTE: tracking lives on the AD object and is not inherited from the ad set, so pass it on EVERY attach call that should carry the pixel.
35701
- */
35702
- tracking?: {
35703
- /**
35704
- * Meta Pixel ID to attach for offsite-conversion measurement.
35705
- */
35706
- pixelId?: string;
35707
- /**
35708
- * Click-URL params appended to the ad's destination as `url_tags` (e.g. utm_source). Meta dynamic macros ({{ad.id}}, {{campaign.id}}, {{placement}}, ...) are sent through unescaped so Meta expands them; every other character is percent-encoded.
35709
- */
35710
- urlTags?: Array<{
35711
- key: string;
35712
- value: string;
35713
- }>;
35714
- };
36735
+ tracking?: AdTracking;
35715
36736
  /**
35716
36737
  * Required on legacy and multi-creative shapes; the attach shape inherits it from the ad set. Available goals vary by platform.
35717
36738
  *
@@ -35763,7 +36784,7 @@ export type CreateStandaloneAdData = {
35763
36784
  */
35764
36785
  multiAdvertiser?: 'OPT_IN' | 'OPT_OUT';
35765
36786
  /**
35766
- * Meta only, single standalone shape only (no creatives[], adSetId, or RESERVED). Dry-run: each node runs Meta's execution_options validate_only and NOTHING is created or persisted. Children need real parents, so a fresh tree validates the campaign + creative (the ad set needs its campaign to exist, so pass existingCampaignId to validate it too; the ad itself is never validatable pre-create). A Meta validation failure returns the 400 verbatim; success returns 200 with per-node results instead of an ad.
36787
+ * Meta only. 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.
35767
36788
  */
35768
36789
  validateOnly?: boolean;
35769
36790
  /**
@@ -36487,13 +37508,13 @@ export type CreateStandaloneAdData = {
36487
37508
  */
36488
37509
  campaignNegativeKeywords?: Array<KeywordEntry>;
36489
37510
  /**
36490
- * Google Search RSA only. Extra headlines.
37511
+ * Google Search RSA only. Extra text assets as strings or objects with text and optional pinnedField. Existing string input remains supported. The effective create lists, including primary text and deduplication, must contain 3-15 headlines and 2-4 descriptions; excess entries return 400.
36491
37512
  */
36492
- additionalHeadlines?: Array<(string)>;
37513
+ additionalHeadlines?: Array<(string | GoogleRsaHeadline)>;
36493
37514
  /**
36494
- * Google Search RSA only. Extra descriptions.
37515
+ * Google Search RSA only. Extra text assets as strings or objects with text and optional pinnedField. Existing string input remains supported. The effective create lists, including primary text and deduplication, must contain 3-15 headlines and 2-4 descriptions; excess entries return 400.
36495
37516
  */
36496
- additionalDescriptions?: Array<(string)>;
37517
+ additionalDescriptions?: Array<(string | GoogleRsaDescription)>;
36497
37518
  /**
36498
37519
  * Google Search only. Sitelink assets to create and attach at the campaign level.
36499
37520
  * Each entry becomes an Asset (with sitelink_asset + Asset.final_urls) plus a
@@ -36732,118 +37753,22 @@ export type CreateStandaloneAdData = {
36732
37753
  */
36733
37754
  smartPlus?: boolean;
36734
37755
  /**
36735
- * What the ad optimises against. Behaviour depends on the platform.
36736
- *
36737
- * **Meta**: forwarded to the ad set's `promoted_object` (snake-cased).
36738
- * Required for goals whose ad-set optimization_goal points at a specific
36739
- * event/page/app (without it Meta rejects the ad-set create with
36740
- * `error_subcode: 1815430` "Please select a promoted object for your ad set"):
36741
- * - `goal: conversions` / `lead_conversion` (OFFSITE_CONVERSIONS): requires `pixelId` + `customEventType`, or `customConversionId` when optimising against a Custom Conversion (the conversion carries its own event definition). For a pixel CUSTOM event (one you named yourself in CAPI/Events Manager), send `customEventType: OTHER` + `customEventStr` with the event name.
36742
- * - `goal: app_promotion` (APP_INSTALLS): requires `applicationId` + `objectStoreUrl`
36743
- * - `goal: lead_generation` (LEAD_GENERATION): `pageId` is auto-filled from the connected Page when omitted
36744
- *
36745
- * Other Meta goals (engagement, traffic, awareness, video_views) ignore this field.
36746
- *
36747
- * **TikTok**: used by `goal: conversions` and the Smart+ goals (`smartPlus: true`).
36748
- * - `pixelId` maps to the ad group's `pixel_id`. Required: a TikTok website-conversion
36749
- * ad group without a pixel is rejected with `40002: Please select a pixel`.
36750
- * - `customEventType` maps to the ad group's `optimization_event` (the pixel event to
36751
- * optimise for). Optional on the regular conversions flow, required on Smart+.
36752
- * See the `customEventType` field below for the valid TikTok codes.
36753
- * - `applicationId` (Smart+ `goal: app_promotion` only) maps to the ad group's `app_id`:
36754
- * the App ID of an app registered on the TikTok Ads account (Assets → Events →
36755
- * App Events). Install optimization needs the app's MMP tracking configured.
36756
- *
36757
- * The remaining `promotedObject.*` fields are Meta-only. Platforms other than
36758
- * Meta and TikTok ignore `promotedObject` entirely.
36759
- *
36760
- */
36761
- promotedObject?: {
36762
- /**
36763
- * Pixel ID. **Meta:** Facebook Pixel ID, required for `goal: conversions`.
36764
- * Requires `customEventType` alongside it; Meta rejects any promoted_object
36765
- * carrying `pixel_id` without `custom_event_type` (error_subcode 1885014),
36766
- * even when `customConversionId` is also present.
36767
- * **TikTok:** TikTok Pixel ID, required for `goal: conversions`.
36768
- * To discover the pixels an ad account can use, call
36769
- * `GET /v1/accounts/{accountId}/tracking-tags?adAccountId=act_...` (each entry
36770
- * carries `kind` and `ownerAdAccountId`), or
36771
- * `GET /v1/accounts/{accountId}/conversion-destinations`. Note this is a
36772
- * different resource from `GET /v1/ads/{adId}/tracking-tags`, which reads an
36773
- * ad's click-URL params (`url_tags`), not pixels.
36774
- *
36775
- */
36776
- pixelId?: string;
36777
- /**
36778
- * The event the campaign/ad group optimises against.
36779
- *
36780
- * **Meta:** standard event like `PURCHASE`, `LEAD`, `COMPLETE_REGISTRATION`,
36781
- * `ADD_TO_CART`. Uppercased internally so callers can pass any case. Required
36782
- * for `goal: conversions`.
36783
- *
36784
- * **TikTok:** an `optimization_event` code (UPPER_SNAKE, not Meta's vocabulary
36785
- * and not PascalCase), OR the exact event name shown in TikTok Events Manager
36786
- * (auto-resolved to its code). Must be one of the event types your TikTok
36787
- * Pixel tracks; custom events are not optimizable. Current taxonomy:
36788
- * `SHOPPING` (Purchase), `ON_WEB_CART` (Add to Cart), `INITIATE_ORDER`
36789
- * (Initiate Checkout), `FORM` (Lead), `ON_WEB_REGISTER` (Complete
36790
- * Registration), `ON_WEB_DETAIL` (View Content). `ON_WEB_ORDER` is
36791
- * deprecated. On rejection the error lists the event types your pixel
36792
- * actually tracks. Optional for `goal: conversions`.
36793
- *
36794
- */
36795
- customEventType?: string;
36796
- /**
36797
- * Meta only. Pixel custom-event name to optimise against (Meta's
36798
- * `custom_event_str`), exactly as it appears in Events Manager and in your
36799
- * CAPI payloads (case-sensitive, not uppercased). Requires
36800
- * `customEventType: OTHER`, and `OTHER` requires this field (400 either way).
36801
- * The same as picking a custom event in Ads Manager's conversion-event
36802
- * dropdown. For rule-based Custom Conversions use `customConversionId`
36803
- * instead.
36804
- *
36805
- */
36806
- customEventStr?: string;
36807
- /**
36808
- * Facebook Page ID. Used by `goal: lead_generation`. Auto-filled from the
36809
- * connected Page when omitted.
36810
- *
36811
- */
36812
- pageId?: string;
36813
- /**
36814
- * App ID. Required for `goal: app_promotion`.
36815
- */
36816
- applicationId?: string;
36817
- /**
36818
- * App Store / Play Store listing URL. Required for `goal: app_promotion`.
36819
- */
36820
- objectStoreUrl?: string;
36821
- /**
36822
- * Custom Conversion ID, when optimising against one instead of a standard
36823
- * event. Accepted alone by this API, without `pixelId` or `customEventType`.
36824
- * If `pixelId` is also sent, `customEventType` is still required on the
36825
- * promoted_object (Meta rejects `pixel_id` without `custom_event_type`,
36826
- * error_subcode 1885014).
36827
- *
36828
- */
36829
- customConversionId?: string;
36830
- /**
36831
- * Optional catalog ID. If supplied with productSetId, the set must belong to this catalog. A catalog ID cannot replace productSetId.
36832
- */
36833
- productCatalogId?: string;
36834
- /**
36835
- * Meta product SET ID from GET /v1/ads/catalogs/{catalogId}/product-sets. Zernio checks that the token can read the set and its product_catalog before creation. A catalog ID or inaccessible set returns a precise 400 naming promotedObject.productSetId. A mismatch with productCatalogId names promotedObject.productCatalogId.
36836
- */
36837
- productSetId?: string;
36838
- /**
36839
- * Meta only. Offline event set (dataset) to optimise toward. Post-merger these are datasets: the id is the dataset id (for pixel-backed datasets, the pixel id).
36840
- */
36841
- offlineConversionDataSetId?: string;
36842
- /**
36843
- * Meta only. WhatsApp number on messaging-destination ad sets.
36844
- */
36845
- whatsappPhoneNumber?: string;
36846
- };
37756
+ * Meta only. Operating systems and version ranges, such as iOS_ver_14.0_and_above or Android. Emitted as user_os. May also be supplied inside targeting.
37757
+ */
37758
+ userOs?: Array<(string)>;
37759
+ /**
37760
+ * Meta only. Device models such as iPhone. Emitted as user_device. May also be supplied inside targeting.
37761
+ */
37762
+ userDevice?: Array<(string)>;
37763
+ /**
37764
+ * Meta app promotion only. Immutable campaign flag. Set true for iOS 14+ SKAdNetwork campaigns and supply promotedObject.applicationId plus promotedObject.objectStoreUrl. The campaign receives promotedObject only when this flag is true. Cannot be changed on an existing campaign.
37765
+ */
37766
+ isSkadnetworkAttribution?: boolean;
37767
+ /**
37768
+ * Meta ad-set attribution. Required as SKADNETWORK for iOS 14+ app promotion or a SKAdNetwork campaign. Requires AUCTION buying. Standalone Meta ad-set creation is not supported; use this field on /v1/ads/create.
37769
+ */
37770
+ campaignAttribution?: 'AEM' | 'SKADNETWORK';
37771
+ promotedObject?: AdPromotedObject;
36847
37772
  };
36848
37773
  headers?: {
36849
37774
  /**