@zernio/node 0.2.406 → 0.2.408

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.
@@ -86,7 +86,7 @@ export type AccountWithFollowerStats = SocialAccount & {
86
86
  export type Ad = {
87
87
  _id?: string;
88
88
  name?: string;
89
- platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
89
+ platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
90
90
  status?: AdStatus;
91
91
  adType?: 'boost' | 'standalone';
92
92
  /**
@@ -281,7 +281,7 @@ export type Ad = {
281
281
  updatedAt?: string;
282
282
  };
283
283
 
284
- export type platform = 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
284
+ export type platform = 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
285
285
 
286
286
  export type adType = 'boost' | 'standalone';
287
287
 
@@ -302,7 +302,7 @@ export type AdBudget = {
302
302
 
303
303
  export type AdCampaign = {
304
304
  platformCampaignId?: string;
305
- platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
305
+ platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
306
306
  campaignName?: string;
307
307
  /**
308
308
  * Delivery status derived from child ad statuses. Distinct from `reviewStatus`.
@@ -576,7 +576,7 @@ export type AdTreeAdSet = {
576
576
  */
577
577
  export type AdTreeCampaign = {
578
578
  platformCampaignId?: string;
579
- platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
579
+ platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
580
580
  campaignName?: string;
581
581
  /**
582
582
  * Delivery status derived from child ad statuses. Distinct from `reviewStatus`, which reflects the platform-side review state.
@@ -1215,12 +1215,14 @@ export type ConversionEvent = {
1215
1215
  * Standard event name (Purchase, Lead, CompleteRegistration, AddToCart,
1216
1216
  * InitiateCheckout, AddPaymentInfo, Subscribe, StartTrial, ViewContent,
1217
1217
  * Search, Contact, SubmitApplication, Schedule) or a custom string
1218
- * (only supported on platforms that accept custom events — Meta).
1218
+ * (only supported on platforms that accept custom events — Meta and
1219
+ * OpenAI Ads).
1219
1220
  *
1220
1221
  * Per-platform behavior:
1221
1222
  * - Meta: free-form; standard names match Meta's built-ins.
1222
1223
  * - Google: ignored — the conversion action's category determines the type.
1223
1224
  * - LinkedIn: ignored — the conversion rule's `type` is locked to the destination.
1225
+ * - OpenAI Ads: a fixed subset of standard names (Purchase, Lead, AddToCart, ViewContent, InitiateCheckout, CompleteRegistration, Subscribe, StartTrial, Schedule) maps 1:1 onto OpenAI's own event-type enum; anything else is sent as a custom event with the name preserved.
1224
1226
  *
1225
1227
  */
1226
1228
  eventName: string;
@@ -4017,7 +4019,7 @@ export type contentType3 = 'story' | 'saved_story' | 'spotlight';
4017
4019
 
4018
4020
  export type SocialAccount = {
4019
4021
  _id: string;
4020
- platform: 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'whatsapp' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads';
4022
+ platform: 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'whatsapp' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads' | 'openaiads';
4021
4023
  profileId: (string | Profile);
4022
4024
  username?: string;
4023
4025
  displayName?: string;
@@ -4077,7 +4079,7 @@ export type SocialAccount = {
4077
4079
  };
4078
4080
  };
4079
4081
 
4080
- export type platform5 = 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'whatsapp' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads';
4082
+ export type platform5 = 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'whatsapp' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads' | 'openaiads';
4081
4083
 
4082
4084
  /**
4083
4085
  * Normalized, platform-agnostic ad-targeting spec. Every field is optional, an
@@ -12117,6 +12119,35 @@ export type ConnectBlueskyCredentialsError = (unknown | {
12117
12119
  error?: string;
12118
12120
  });
12119
12121
 
12122
+ export type ConnectOpenAiAdsCredentialsData = {
12123
+ body: {
12124
+ /**
12125
+ * API key from ChatGPT Ads Manager (Settings). Grants full read/write access on OpenAI's side; Zernio only ever reads with it.
12126
+ */
12127
+ apiKey: string;
12128
+ /**
12129
+ * Your Zernio profile ID
12130
+ */
12131
+ profileId: string;
12132
+ /**
12133
+ * Optional state passthrough for the connect flow.
12134
+ */
12135
+ state?: string;
12136
+ /**
12137
+ * Optional URL to redirect to after successful connection
12138
+ */
12139
+ redirectUri?: string;
12140
+ };
12141
+ };
12142
+
12143
+ export type ConnectOpenAiAdsCredentialsResponse = ({
12144
+ accountId?: string;
12145
+ adAccountName?: string;
12146
+ redirectUrl?: string;
12147
+ });
12148
+
12149
+ export type ConnectOpenAiAdsCredentialsError = (ErrorResponse | unknown);
12150
+
12120
12151
  export type ConnectWhatsAppCredentialsData = {
12121
12152
  body: {
12122
12153
  /**
@@ -19729,7 +19760,7 @@ export type GetPhoneNumberKycFormResponse = ({
19729
19760
  localTo?: (string) | null;
19730
19761
  }>;
19731
19762
  /**
19732
- * Present when this account already has an approved verification for the country that can be reused (skip the form). `fromPhoneNumber`/`details` mirror the newest option; `options` lists ALL approved verifications (agencies hold one per end client) pass the chosen option's `fromPhoneNumber` as `reuseFrom` on POST.
19763
+ * Present when this account already has a reusable verification for the country (skip the form). `fromPhoneNumber`/`details` mirror the first option; `options` lists ALL reusable verifications (agencies hold one per end client), approved-first. Pass the chosen option's `id` as `reuseOptionId` on POST. Each option's `instant` says whether it activates in minutes (group-approved) or still queues for carrier review (1-3 days).
19733
19764
  */
19734
19765
  reusable?: {
19735
19766
  available?: boolean;
@@ -19745,10 +19776,25 @@ export type GetPhoneNumberKycFormResponse = ({
19745
19776
  * One entry per distinct approved verification, newest first.
19746
19777
  */
19747
19778
  options?: Array<{
19779
+ /**
19780
+ * Opaque option id — pass as `reuseOptionId` on POST. Stable selection key (a phone number is not unique across verifications).
19781
+ */
19782
+ id?: string;
19783
+ /**
19784
+ * Display only — the number this verification was submitted for. Not a selection key.
19785
+ */
19748
19786
  fromPhoneNumber?: string;
19787
+ /**
19788
+ * true = group-approved, a new order activates in minutes; false = documents are reused but the order still queues for carrier review (1-3 days).
19789
+ */
19790
+ instant?: boolean;
19749
19791
  details?: Array<{
19750
19792
  label?: string;
19751
19793
  value?: string;
19794
+ /**
19795
+ * Present on document rows — the Telnyx document id. GET /v1/whatsapp/phone-numbers/kyc/document/{documentId} streams it (auth-scoped, inline PDF).
19796
+ */
19797
+ documentId?: string;
19752
19798
  }>;
19753
19799
  }>;
19754
19800
  } | null;
@@ -19775,7 +19821,11 @@ export type SubmitPhoneNumberKycData = {
19775
19821
  */
19776
19822
  reuse?: boolean;
19777
19823
  /**
19778
- * Which approved verification to reuse when several exist: the phone number it was originally approved for (GET reusable.options[].fromPhoneNumber). Omitted = newest. No match = 409.
19824
+ * Which reusable verification to use (GET reusable.options[].id). The unambiguous selection key. Omitted = the approved default. No match = 409.
19825
+ */
19826
+ reuseOptionId?: string;
19827
+ /**
19828
+ * Legacy fallback for `reuseOptionId`: the source phone number (GET reusable.options[].fromPhoneNumber). Ambiguous when a number labels two verifications — prefer `reuseOptionId`. Omitted = the approved default. No match = 409.
19779
19829
  */
19780
19830
  reuseFrom?: string;
19781
19831
  /**
@@ -19845,6 +19895,21 @@ export type SubmitPhoneNumberKycError = (unknown | {
19845
19895
  error?: string;
19846
19896
  });
19847
19897
 
19898
+ export type ViewPhoneNumberKycDocumentData = {
19899
+ path: {
19900
+ /**
19901
+ * The Telnyx document id (from `reusable.options[].details[].documentId`).
19902
+ */
19903
+ documentId: string;
19904
+ };
19905
+ };
19906
+
19907
+ export type ViewPhoneNumberKycDocumentResponse = ((Blob | File));
19908
+
19909
+ export type ViewPhoneNumberKycDocumentError = (ErrorResponse | {
19910
+ error?: string;
19911
+ } | unknown);
19912
+
19848
19913
  export type UploadPhoneNumberKycDocumentData = {
19849
19914
  body: (Blob | File);
19850
19915
  headers: {
@@ -20352,6 +20417,40 @@ export type RemediatePhoneNumberError = (unknown | {
20352
20417
  error?: string;
20353
20418
  });
20354
20419
 
20420
+ export type ReplyToPhoneNumberReviewerData = {
20421
+ body: {
20422
+ /**
20423
+ * The reply message to the reviewer.
20424
+ */
20425
+ text?: string;
20426
+ /**
20427
+ * Files (PDF/JPG/PNG/WEBP, max 10 MB each) whose links are added to the reply.
20428
+ */
20429
+ attachments?: Array<{
20430
+ filename: string;
20431
+ /**
20432
+ * Base64-encoded file bytes.
20433
+ */
20434
+ base64: string;
20435
+ }>;
20436
+ };
20437
+ path: {
20438
+ id: string;
20439
+ };
20440
+ };
20441
+
20442
+ export type ReplyToPhoneNumberReviewerResponse = ({
20443
+ posted?: boolean;
20444
+ /**
20445
+ * Number of attachments uploaded.
20446
+ */
20447
+ attachments?: number;
20448
+ });
20449
+
20450
+ export type ReplyToPhoneNumberReviewerError = (ErrorResponse | {
20451
+ error?: string;
20452
+ } | unknown);
20453
+
20355
20454
  export type GetWhatsAppNumberKycFormData = {
20356
20455
  query: {
20357
20456
  country: string;
@@ -20387,7 +20486,7 @@ export type GetWhatsAppNumberKycFormResponse = ({
20387
20486
  audience?: ('business' | 'individual') | null;
20388
20487
  }>;
20389
20488
  /**
20390
- * Present when this account already has an approved verification for the country that can be reused (skip the form). `fromPhoneNumber`/`details` mirror the newest option; `options` lists ALL approved verifications (agencies hold one per end client) pass the chosen option's `fromPhoneNumber` as `reuseFrom` on POST.
20489
+ * Present when this account already has a reusable verification for the country (skip the form). `fromPhoneNumber`/`details` mirror the first option; `options` lists ALL reusable verifications (agencies hold one per end client), approved-first. Pass the chosen option's `id` as `reuseOptionId` on POST. Each option's `instant` says whether it activates in minutes (group-approved) or still queues for carrier review (1-3 days).
20391
20490
  */
20392
20491
  reusable?: {
20393
20492
  available?: boolean;
@@ -20403,10 +20502,25 @@ export type GetWhatsAppNumberKycFormResponse = ({
20403
20502
  * One entry per distinct approved verification, newest first.
20404
20503
  */
20405
20504
  options?: Array<{
20505
+ /**
20506
+ * Opaque option id — pass as `reuseOptionId` on POST. Stable selection key (a phone number is not unique across verifications).
20507
+ */
20508
+ id?: string;
20509
+ /**
20510
+ * Display only — the number this verification was submitted for. Not a selection key.
20511
+ */
20406
20512
  fromPhoneNumber?: string;
20513
+ /**
20514
+ * true = group-approved, a new order activates in minutes; false = documents are reused but the order still queues for carrier review (1-3 days).
20515
+ */
20516
+ instant?: boolean;
20407
20517
  details?: Array<{
20408
20518
  label?: string;
20409
20519
  value?: string;
20520
+ /**
20521
+ * Present on document rows — the Telnyx document id. GET /v1/whatsapp/phone-numbers/kyc/document/{documentId} streams it (auth-scoped, inline PDF).
20522
+ */
20523
+ documentId?: string;
20410
20524
  }>;
20411
20525
  }>;
20412
20526
  } | null;
@@ -20433,7 +20547,11 @@ export type SubmitWhatsAppNumberKycData = {
20433
20547
  */
20434
20548
  reuse?: boolean;
20435
20549
  /**
20436
- * Which approved verification to reuse when several exist: the phone number it was originally approved for (GET reusable.options[].fromPhoneNumber). Omitted = newest. No match = 409.
20550
+ * Which reusable verification to use (GET reusable.options[].id). The unambiguous selection key. Omitted = the approved default. No match = 409.
20551
+ */
20552
+ reuseOptionId?: string;
20553
+ /**
20554
+ * Legacy fallback for `reuseOptionId`: the source phone number (GET reusable.options[].fromPhoneNumber). Ambiguous when a number labels two verifications — prefer `reuseOptionId`. Omitted = the approved default. No match = 409.
20437
20555
  */
20438
20556
  reuseFrom?: string;
20439
20557
  /**
@@ -23858,7 +23976,7 @@ export type ListAdsData = {
23858
23976
  * Page number (1-based)
23859
23977
  */
23860
23978
  page?: number;
23861
- platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
23979
+ platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
23862
23980
  /**
23863
23981
  * Meta ad ID. Returns the ad with this platform-side ad ID.
23864
23982
  */
@@ -23911,7 +24029,7 @@ export type ListAdCampaignsData = {
23911
24029
  * Page number (1-based)
23912
24030
  */
23913
24031
  page?: number;
23914
- platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
24032
+ platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
23915
24033
  /**
23916
24034
  * Profile ID
23917
24035
  */
@@ -23985,7 +24103,7 @@ export type CreateAdCampaignError = (unknown | {
23985
24103
  export type UpdateAdCampaignStatusData = {
23986
24104
  body: {
23987
24105
  status: 'active' | 'paused';
23988
- platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
24106
+ platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
23989
24107
  };
23990
24108
  path: {
23991
24109
  /**
@@ -24097,7 +24215,7 @@ export type BulkUpdateAdCampaignStatusData = {
24097
24215
  status: 'active' | 'paused';
24098
24216
  campaigns: Array<{
24099
24217
  platformCampaignId: string;
24100
- platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
24218
+ platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
24101
24219
  }>;
24102
24220
  };
24103
24221
  };
@@ -24290,7 +24408,7 @@ export type GetAdSetDetailsError = (unknown | {
24290
24408
 
24291
24409
  export type UpdateAdSetData = {
24292
24410
  body: {
24293
- platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
24411
+ platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
24294
24412
  /**
24295
24413
  * Omit if not updating budget
24296
24414
  */
@@ -24308,23 +24426,27 @@ export type UpdateAdSetData = {
24308
24426
  name?: string;
24309
24427
  /**
24310
24428
  * Ad-set-level bid strategy. Overrides the campaign-level default.
24311
- * Supported on Meta (facebook, instagram) and TikTok. On TikTok the
24429
+ * Supported on Meta (facebook, instagram), TikTok, and OpenAI. On TikTok the
24312
24430
  * Meta-style enum is mapped to bid_type / bid_price / deep_bid_type
24313
- * automatically. Other platforms (linkedin, pinterest, google, twitter)
24314
- * return 501 Not Implemented when bidStrategy is set.
24431
+ * automatically. On OpenAI, LOWEST_COST_WITH_BID_CAP and COST_CAP both map to
24432
+ * the ad group's `bidding_config.max_bid_micros` (one knob covers both);
24433
+ * LOWEST_COST_WITH_MIN_ROAS is rejected with 422 (OpenAI has no ROAS-based
24434
+ * bidding). Other platforms (linkedin, pinterest, google, twitter) return 501
24435
+ * Not Implemented when bidStrategy is set.
24315
24436
  *
24316
24437
  */
24317
24438
  bidStrategy?: (BidStrategy);
24318
24439
  /**
24319
24440
  * Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
24320
24441
  * bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. Internally converted to Meta's
24321
- * smallest-denomination integer.
24442
+ * smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000).
24322
24443
  *
24323
24444
  */
24324
24445
  bidAmount?: number;
24325
24446
  /**
24326
24447
  * Minimum ROAS as a decimal multiplier (2.0 = 2.0x). Required when bidStrategy is
24327
24448
  * LOWEST_COST_WITH_MIN_ROAS. Sent to Meta as `bid_constraints.roas_average_floor` × 10000.
24449
+ * Not supported on OpenAI (422).
24328
24450
  *
24329
24451
  */
24330
24452
  roasAverageFloor?: number;
@@ -24396,7 +24518,7 @@ export type UpdateAdSetError = (unknown | {
24396
24518
  export type UpdateAdSetStatusData = {
24397
24519
  body: {
24398
24520
  status: 'active' | 'paused';
24399
- platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
24521
+ platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
24400
24522
  };
24401
24523
  path: {
24402
24524
  /**
@@ -24445,7 +24567,7 @@ export type GetAdTreeData = {
24445
24567
  * Page number (1-based)
24446
24568
  */
24447
24569
  page?: number;
24448
- platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
24570
+ platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
24449
24571
  /**
24450
24572
  * Profile ID
24451
24573
  */
@@ -24503,7 +24625,7 @@ export type GetAdsTimelineData = {
24503
24625
  /**
24504
24626
  * Restrict to one platform.
24505
24627
  */
24506
- platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter';
24628
+ platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
24507
24629
  /**
24508
24630
  * Inclusive end of metrics range (YYYY-MM-DD). Defaults to today. Max 730-day range.
24509
24631
  */
@@ -24596,6 +24718,9 @@ export type UpdateAdData = {
24596
24718
  * Minimum varies by platform: TikTok=$20, Pinterest=$5, others=$1
24597
24719
  */
24598
24720
  amount?: number;
24721
+ /**
24722
+ * OpenAI Ads accepts lifetime only; sending daily returns 422.
24723
+ */
24599
24724
  type?: 'daily' | 'lifetime';
24600
24725
  };
24601
24726
  /**
@@ -26260,6 +26385,9 @@ export type CreateStandaloneAdData = {
26260
26385
  * - `job_applicants` requires a `platformSpecificData.jobs` creative.
26261
26386
  * - For `lead_generation` or `conversions` on LinkedIn, or to promote an existing post, use POST /v1/ads/boost.
26262
26387
  *
26388
+ * **OpenAI Ads**
26389
+ * - Only `traffic`, `awareness`, and `conversions` are supported (other goals return 400). Maps to OpenAI's `bidding_type` (clicks, impressions, conversions respectively). `conversions` requires an active conversion event setting on the account; create a tracking tag with `defaultEventType` via the tracking-tags API (`POST /v1/accounts/{accountId}/tracking-tags`), or configure a conversion event in OpenAI Ads Manager, or the request returns 422.
26390
+ *
26263
26391
  */
26264
26392
  goal?: 'engagement' | 'traffic' | 'awareness' | 'video_views' | 'lead_generation' | 'lead_conversion' | 'conversions' | 'app_promotion' | 'catalog_sales' | 'job_applicants';
26265
26393
  /**
@@ -26289,11 +26417,11 @@ export type CreateStandaloneAdData = {
26289
26417
  */
26290
26418
  validateOnly?: boolean;
26291
26419
  /**
26292
- * Required on legacy + multi-creative shapes. Inherited on attach.
26420
+ * Required on legacy + multi-creative shapes. Inherited on attach. OpenAI Ads requires a $1 minimum (its budget is lifetime-only, see budgetType).
26293
26421
  */
26294
26422
  budgetAmount?: number;
26295
26423
  /**
26296
- * Required on legacy + multi-creative shapes. Inherited on attach.
26424
+ * Required on legacy + multi-creative shapes. Inherited on attach. OpenAI Ads accepts lifetime only (no daily-budget concept on the platform); sending daily returns 422. OpenAI Ads lifetime budgets require `endDate` to give the lifetime cap a spend window.
26297
26425
  */
26298
26426
  budgetType?: 'daily' | 'lifetime';
26299
26427
  /**
@@ -26314,7 +26442,7 @@ export type CreateStandaloneAdData = {
26314
26442
  budgetLevel?: 'adset' | 'campaign';
26315
26443
  currency?: string;
26316
26444
  /**
26317
- * Required for Meta, Google, Pinterest, and LinkedIn on legacy + attach shapes (skip for multi-creative — use `creatives[].headline`). Ignored for TikTok and X/Twitter. Max: Meta=255, Google=30, Pinterest=100, LinkedIn=400. On LinkedIn this is the ad's headline (the bold text on the creative); for traffic ads it's the link card title.
26445
+ * Required for Meta, Google, Pinterest, LinkedIn, and OpenAI Ads on legacy + attach shapes (skip for multi-creative — use `creatives[].headline`). Ignored for TikTok and X/Twitter. Max: Meta=255, Google=30, Pinterest=100, LinkedIn=400, OpenAI=50 (min 3). On LinkedIn this is the ad's headline (the bold text on the creative); for traffic ads it's the link card title. On OpenAI Ads this is the chat card's title.
26318
26446
  */
26319
26447
  headline?: string;
26320
26448
  /**
@@ -26322,7 +26450,7 @@ export type CreateStandaloneAdData = {
26322
26450
  */
26323
26451
  longHeadline?: string;
26324
26452
  /**
26325
- * Required on legacy + attach shapes. For X/Twitter this is the tweet text (max 280 chars including a ~24-char URL when `linkUrl` is set). On LinkedIn this is the post commentary (the intro text shown above the ad). Max: Google=90, Pinterest=500.
26453
+ * Required on legacy + attach shapes. For X/Twitter this is the tweet text (max 280 chars including a ~24-char URL when `linkUrl` is set). On LinkedIn this is the post commentary (the intro text shown above the ad). On OpenAI Ads this is the chat card's body text. Max: Google=90, Pinterest=500, OpenAI=100.
26326
26454
  */
26327
26455
  body?: string;
26328
26456
  /**
@@ -26334,7 +26462,7 @@ export type CreateStandaloneAdData = {
26334
26462
  */
26335
26463
  callToAction?: 'LEARN_MORE' | 'SHOP_NOW' | 'SIGN_UP' | 'BOOK_TRAVEL' | 'CONTACT_US' | 'DOWNLOAD' | 'GET_OFFER' | 'GET_QUOTE' | 'SUBSCRIBE' | 'WATCH_MORE' | 'ADD_TO_CART' | 'APPLY_NOW' | 'BOOK_NOW' | 'BUY_TICKETS' | 'DONATE' | 'DONATE_NOW' | 'GET_DIRECTIONS' | 'GET_SHOWTIMES' | 'LISTEN_NOW' | 'ORDER_NOW' | 'PLAY_GAME' | 'REQUEST_TIME' | 'SEE_MENU' | 'START_ORDER' | 'INSTALL_MOBILE_APP' | 'USE_APP' | 'REGISTER' | 'JOIN' | 'ATTEND' | 'REQUEST_DEMO' | 'VIEW_QUOTE' | 'APPLY' | 'SEE_MORE' | 'BUY_NOW';
26336
26464
  /**
26337
- * Required on legacy + attach shapes (skip for multi-creative). On LinkedIn it's the ad's destination URL; required for `traffic` ads, optional for `engagement` / `awareness`. NOT required when `goal` is `lead_generation` (the ad opens a Lead Gen form instead of a destination). On LinkedIn, `imageUrl` + `linkUrl` publishes an ARTICLE-content creative; this is LinkedIn's article ad format, with the image as thumbnail and `longHeadline` as description.
26465
+ * Required on legacy + attach shapes (skip for multi-creative). On LinkedIn it's the ad's destination URL; required for `traffic` ads, optional for `engagement` / `awareness`. NOT required when `goal` is `lead_generation` (the ad opens a Lead Gen form instead of a destination). On LinkedIn, `imageUrl` + `linkUrl` publishes an ARTICLE-content creative; this is LinkedIn's article ad format, with the image as thumbnail and `longHeadline` as description. Required for OpenAI Ads (the chat card's target_url).
26338
26466
  */
26339
26467
  linkUrl?: string;
26340
26468
  /**
@@ -26342,7 +26470,7 @@ export type CreateStandaloneAdData = {
26342
26470
  */
26343
26471
  leadGenFormId?: string;
26344
26472
  /**
26345
- * Image creative for Meta/Google/Pinterest/LinkedIn on legacy + attach shapes (mutually exclusive with `video`). Required for LinkedIn ads unless `video` is set. Not required for Google Search campaigns. For TikTok, this field carries the VIDEO URL (the TikTok ads endpoint is video-only; the field retains the `imageUrl` name for cross-platform consistency). Ignored for X/Twitter. For Google Display, treated as the landscape image (alias of `images.landscape`); supply `images.square` alongside or the request is rejected. For LinkedIn the image is uploaded to LinkedIn under the authoring Company Page (see `organizationId`); recommended ratio 1.91:1 (e.g. 1200×627).
26473
+ * Image creative for Meta/Google/Pinterest/LinkedIn on legacy + attach shapes (mutually exclusive with `video`). Required for LinkedIn ads unless `video` is set. Not required for Google Search campaigns. For TikTok, this field carries the VIDEO URL (the TikTok ads endpoint is video-only; the field retains the `imageUrl` name for cross-platform consistency). Ignored for X/Twitter. For Google Display, treated as the landscape image (alias of `images.landscape`); supply `images.square` alongside or the request is rejected. For LinkedIn the image is uploaded to LinkedIn under the authoring Company Page (see `organizationId`); recommended ratio 1.91:1 (e.g. 1200×627). Required for OpenAI Ads (uploaded as the chat card's image; OpenAI has no video ad format).
26346
26474
  */
26347
26475
  imageUrl?: string;
26348
26476
  /**
@@ -26483,7 +26611,7 @@ export type CreateStandaloneAdData = {
26483
26611
  */
26484
26612
  targeting?: (TargetingSpec);
26485
26613
  /**
26486
- * ISO 3166-1 alpha-2 country codes (e.g. ['NL']). Defaults to ['US'] when no other geo targeting (flat or nested `targeting`) is provided. (LinkedIn currently honours country-level targeting only.)
26614
+ * ISO 3166-1 alpha-2 country codes (e.g. ['NL']). Defaults to ['US'] when no other geo targeting (flat or nested `targeting`) is provided. (LinkedIn and OpenAI Ads currently honour country-level targeting only; any other targeting field returns 400 for OpenAI Ads.)
26487
26615
  */
26488
26616
  countries?: Array<(string)>;
26489
26617
  /**
@@ -28010,20 +28138,21 @@ export type GetConversionsQualityError = (ErrorResponse | {
28010
28138
  export type SendConversionsData = {
28011
28139
  body: {
28012
28140
  /**
28013
- * SocialAccount ID (metaads, googleads, linkedinads, or tiktokads).
28141
+ * SocialAccount ID (metaads, googleads, linkedinads, tiktokads, or openaiads).
28014
28142
  */
28015
28143
  accountId: string;
28016
28144
  /**
28017
28145
  * Platform destination identifier. For Meta, the pixel/dataset
28018
28146
  * ID. For Google, the conversion action resource name. For
28019
28147
  * LinkedIn, the conversion rule ID or full
28020
- * `urn:lla:llaPartnerConversion:{id}` URN.
28148
+ * `urn:lla:llaPartnerConversion:{id}` URN. For OpenAI Ads, the
28149
+ * pixel wire id.
28021
28150
  *
28022
28151
  */
28023
28152
  destinationId: string;
28024
28153
  events: Array<ConversionEvent>;
28025
28154
  /**
28026
- * Meta `test_event_code` passthrough. Ignored by Google and LinkedIn.
28155
+ * Meta `test_event_code` passthrough. Ignored by Google, LinkedIn, and OpenAI Ads.
28027
28156
  */
28028
28157
  testCode?: string;
28029
28158
  /**
@@ -28044,7 +28173,7 @@ export type SendConversionsData = {
28044
28173
  };
28045
28174
 
28046
28175
  export type SendConversionsResponse = ({
28047
- platform?: 'metaads' | 'googleads' | 'linkedinads' | 'tiktokads';
28176
+ platform?: 'metaads' | 'googleads' | 'linkedinads' | 'tiktokads' | 'openaiads';
28048
28177
  /**
28049
28178
  * Events accepted by the platform.
28050
28179
  */
@@ -28068,7 +28197,8 @@ export type SendConversionsResponse = ({
28068
28197
  /**
28069
28198
  * Platform trace ID for debugging. fbtrace_id for Meta,
28070
28199
  * requestId for Google. Absent for LinkedIn (LinkedIn's
28071
- * conversionEvents endpoint does not surface a trace ID).
28200
+ * conversionEvents endpoint does not surface a trace ID)
28201
+ * and OpenAI Ads (no trace ID surfaced).
28072
28202
  *
28073
28203
  */
28074
28204
  traceId?: string;
@@ -28157,19 +28287,20 @@ export type AdjustConversionsError = (unknown | {
28157
28287
  export type ListConversionDestinationsData = {
28158
28288
  path: {
28159
28289
  /**
28160
- * SocialAccount ID (metaads, googleads, linkedinads, or tiktokads).
28290
+ * SocialAccount ID (metaads, googleads, linkedinads, tiktokads, or openaiads).
28161
28291
  */
28162
28292
  accountId: string;
28163
28293
  };
28164
28294
  };
28165
28295
 
28166
28296
  export type ListConversionDestinationsResponse = ({
28167
- platform?: 'metaads' | 'googleads' | 'linkedinads' | 'tiktokads';
28297
+ platform?: 'metaads' | 'googleads' | 'linkedinads' | 'tiktokads' | 'openaiads';
28168
28298
  destinations?: Array<{
28169
28299
  /**
28170
28300
  * Destination identifier. Meta: pixel ID. Google:
28171
28301
  * conversion action resource name. LinkedIn:
28172
- * numeric conversion rule ID.
28302
+ * numeric conversion rule ID. OpenAI Ads: pixel wire
28303
+ * id.
28173
28304
  *
28174
28305
  */
28175
28306
  id?: string;
@@ -28731,20 +28862,20 @@ export type CreateCtwaAdError = (unknown | {
28731
28862
  export type ListTrackingTagsData = {
28732
28863
  path: {
28733
28864
  /**
28734
- * Meta ads SocialAccount id (platform `metaads`).
28865
+ * Ads SocialAccount id (platform `metaads` or `openaiads`).
28735
28866
  */
28736
28867
  accountId: string;
28737
28868
  };
28738
28869
  query?: {
28739
28870
  /**
28740
- * Optional. Scope to one ad account, e.g. `act_123456789`.
28871
+ * Optional, Meta only. Scope to one ad account, e.g. `act_123456789`. Ignored for OpenAI Ads.
28741
28872
  */
28742
28873
  adAccountId?: string;
28743
28874
  };
28744
28875
  };
28745
28876
 
28746
28877
  export type ListTrackingTagsResponse = ({
28747
- platform?: 'metaads';
28878
+ platform?: 'metaads' | 'openaiads';
28748
28879
  tags?: Array<TrackingTag>;
28749
28880
  });
28750
28881
 
@@ -28755,21 +28886,21 @@ export type ListTrackingTagsError = (unknown | {
28755
28886
  export type CreateTrackingTagData = {
28756
28887
  body: {
28757
28888
  /**
28758
- * Meta ad account id, e.g. `act_123456789`.
28889
+ * Meta ad account id, e.g. `act_123456789`. Required by this endpoint but ignored for OpenAI Ads.
28759
28890
  */
28760
28891
  adAccountId: string;
28761
28892
  name: string;
28762
28893
  };
28763
28894
  path: {
28764
28895
  /**
28765
- * Meta ads SocialAccount id (platform `metaads`).
28896
+ * Ads SocialAccount id (platform `metaads` or `openaiads`).
28766
28897
  */
28767
28898
  accountId: string;
28768
28899
  };
28769
28900
  };
28770
28901
 
28771
28902
  export type CreateTrackingTagResponse = ({
28772
- platform?: 'metaads';
28903
+ platform?: 'metaads' | 'openaiads';
28773
28904
  tag?: TrackingTag;
28774
28905
  });
28775
28906