@zernio/node 0.2.1168 → 0.2.1170
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 +227 -117
- package/dist/index.d.ts +227 -117
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/src/generated/sdk.gen.ts +137 -20
- package/src/generated/types.gen.ts +227 -117
|
@@ -105,13 +105,13 @@ export type AccountWithFollowerStats = SocialAccount & {
|
|
|
105
105
|
export type Ad = {
|
|
106
106
|
_id?: string;
|
|
107
107
|
name?: string;
|
|
108
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
108
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
109
109
|
/**
|
|
110
110
|
* Delivery status. Derived from the platform `effective_status`, so it inherits ancestor pauses (an ACTIVE ad under a PAUSED campaign reads `paused`). For the ad's own on/off toggle use `configuredStatus`; for the review state use `reviewStatus`.
|
|
111
111
|
*/
|
|
112
112
|
status?: (AdStatus);
|
|
113
113
|
/**
|
|
114
|
-
* The ad's own on/off switch as configured on the platform, independent of its parents: an ACTIVE ad under a paused ad set or campaign still reads ACTIVE here while `status` reads `paused`. Sources: Meta `configured_status`, TikTok ad `operation_status` (ENABLE -> ACTIVE, DISABLE -> PAUSED), ChatGPT (OpenAI) ad `status` (ACTIVE / PAUSED, plus ARCHIVED on OpenAI). On create it is read back from the platform, not copied from the request: a `PAUSED` create pauses only the top-most object it creates, so an ad under a new paused campaign or ad set reads ACTIVE here with `status: paused`, and only an ad attached to an existing ad set reads PAUSED. Distinct from `status`, which is the ancestor-cascaded delivery status. Only present for Meta, TikTok and
|
|
114
|
+
* The ad's own on/off switch as configured on the platform, independent of its parents: an ACTIVE ad under a paused ad set or campaign still reads ACTIVE here while `status` reads `paused`. Sources: Meta `configured_status`, TikTok ad `operation_status` (ENABLE -> ACTIVE, DISABLE -> PAUSED), ChatGPT (OpenAI) ad `status` (ACTIVE / PAUSED, plus ARCHIVED on OpenAI), Reddit `configured_status` (ACTIVE / PAUSED / ARCHIVED). On create it is read back from the platform, not copied from the request: a `PAUSED` create pauses only the top-most object it creates, so an ad under a new paused campaign or ad set reads ACTIVE here with `status: paused`, and only an ad attached to an existing ad set reads PAUSED. Distinct from `status`, which is the ancestor-cascaded delivery status. Only present for Meta, TikTok, OpenAI and Reddit ads created or synced after the field was added for that platform; null otherwise.
|
|
115
115
|
*/
|
|
116
116
|
configuredStatus?: (string) | null;
|
|
117
117
|
/**
|
|
@@ -135,11 +135,11 @@ export type Ad = {
|
|
|
135
135
|
amount?: number;
|
|
136
136
|
type?: 'daily' | 'lifetime';
|
|
137
137
|
/**
|
|
138
|
-
* LinkedIn only. The parent campaign's `dailyBudget
|
|
138
|
+
* LinkedIn and X only. The daily budget (LinkedIn: the parent campaign's `dailyBudget`; X: the line item's, or the campaign's when the line item has none). Both allow a daily AND a lifetime budget together, which `amount`/`type` cannot express (daily wins there); read `daily` and `lifetime` to see both.
|
|
139
139
|
*/
|
|
140
140
|
daily?: number;
|
|
141
141
|
/**
|
|
142
|
-
* LinkedIn only. The parent campaign's `totalBudget`, readable even when a daily budget is also set.
|
|
142
|
+
* LinkedIn and X only. The lifetime total (LinkedIn: the parent campaign's `totalBudget`; X: `total_budget_amount_local_micro`, for example the `lifetimeBudgetCap` of a boost), readable even when a daily budget is also set.
|
|
143
143
|
*/
|
|
144
144
|
lifetime?: number;
|
|
145
145
|
/**
|
|
@@ -481,7 +481,7 @@ export type Ad = {
|
|
|
481
481
|
updatedAt?: string;
|
|
482
482
|
};
|
|
483
483
|
|
|
484
|
-
export type platform = 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
484
|
+
export type platform = 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
485
485
|
|
|
486
486
|
export type adType = 'boost' | 'standalone';
|
|
487
487
|
|
|
@@ -558,7 +558,7 @@ export type AdBudget = {
|
|
|
558
558
|
|
|
559
559
|
export type AdCampaign = {
|
|
560
560
|
platformCampaignId?: string;
|
|
561
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
561
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
562
562
|
campaignName?: string;
|
|
563
563
|
/**
|
|
564
564
|
* Delivery status derived from child ad statuses. Distinct from `reviewStatus`.
|
|
@@ -569,7 +569,7 @@ export type AdCampaign = {
|
|
|
569
569
|
*/
|
|
570
570
|
reviewStatus?: (AdReviewStatus | null);
|
|
571
571
|
/**
|
|
572
|
-
* Raw platform-level campaign status (Meta `effective_status`; ChatGPT (OpenAI): the campaign's own switch, active / paused / archived; TikTok: the campaign's own switch `operation_status`, ENABLE / DISABLE).
|
|
572
|
+
* Raw platform-level campaign status (Meta `effective_status`; ChatGPT (OpenAI): the campaign's own switch, active / paused / archived; TikTok: the campaign's own switch `operation_status`, ENABLE / DISABLE; Reddit: the campaign's `configured_status`, ACTIVE / PAUSED / ARCHIVED).
|
|
573
573
|
*/
|
|
574
574
|
platformCampaignStatus?: (string) | null;
|
|
575
575
|
/**
|
|
@@ -1157,8 +1157,17 @@ export type matchType2 = 'broad' | 'phrase' | 'exact';
|
|
|
1157
1157
|
* optimizes for (sent as the campaign's `conversion_event_setting_ids`); every other
|
|
1158
1158
|
* `promotedObject` field is rejected with a 400. See `customEventType` below.
|
|
1159
1159
|
*
|
|
1160
|
+
* **Reddit Ads**: Reddit puts a pixel on every ad group, whatever the goal. `pixelId`
|
|
1161
|
+
* (or `tracking.pixelId`) picks it; when omitted the ad account's first pixel is used,
|
|
1162
|
+
* and an ad account with no pixel returns 422 (create the pixel in Reddit Ads Manager).
|
|
1163
|
+
* A `pixelId` that is not a pixel of the ad account returns 400. `goal: conversions`
|
|
1164
|
+
* requires `customEventType` (see below). `goal: lead_generation` optimizes toward the
|
|
1165
|
+
* pixel's Lead event. Reddit only optimizes toward an event the pixel has already
|
|
1166
|
+
* received: when it never fired, the request returns 422 `invalid_resource_state`.
|
|
1167
|
+
* Fire it from your site or send it with POST /v1/ads/conversions first.
|
|
1168
|
+
*
|
|
1160
1169
|
* The remaining `promotedObject.*` fields are Meta-only. Platforms other than
|
|
1161
|
-
* Meta, TikTok and
|
|
1170
|
+
* Meta, TikTok, OpenAI and Reddit ignore `promotedObject` entirely.
|
|
1162
1171
|
*
|
|
1163
1172
|
*/
|
|
1164
1173
|
export type AdPromotedObject = {
|
|
@@ -1168,6 +1177,7 @@ export type AdPromotedObject = {
|
|
|
1168
1177
|
* carrying `pixel_id` without `custom_event_type` (error_subcode 1885014),
|
|
1169
1178
|
* even when `customConversionId` is also present.
|
|
1170
1179
|
* **TikTok:** TikTok Pixel ID, required for `goal: conversions`.
|
|
1180
|
+
* **Reddit:** Reddit pixel ID (e.g. `a2_abc123`), optional on every goal (see above).
|
|
1171
1181
|
* To discover the pixels an ad account can use, call
|
|
1172
1182
|
* `GET /v1/accounts/{accountId}/tracking-tags?adAccountId=act_...` (each entry
|
|
1173
1183
|
* carries `kind` and `ownerAdAccountId`), or
|
|
@@ -1205,6 +1215,11 @@ export type AdPromotedObject = {
|
|
|
1205
1215
|
* the campaign optimizes for the first optimizable event in OpenAI's own list
|
|
1206
1216
|
* order, which is the most recently created one.
|
|
1207
1217
|
*
|
|
1218
|
+
* **Reddit:** required for `goal: conversions` (400 without it). One of `PURCHASE`,
|
|
1219
|
+
* `LEAD`, `COMPLETE_REGISTRATION` or `SIGN_UP` (both sent as Reddit's SIGN_UP),
|
|
1220
|
+
* `ADD_TO_CART`, `PAGE_VISIT`, `VIEW_CONTENT` or `CONTENT_VIEW` (both sent as
|
|
1221
|
+
* PAGE_VISIT), any case. The pixel must already have received the event (422 otherwise).
|
|
1222
|
+
*
|
|
1208
1223
|
*/
|
|
1209
1224
|
customEventType?: string;
|
|
1210
1225
|
/**
|
|
@@ -1367,11 +1382,11 @@ export type AdsTimelineResponse = {
|
|
|
1367
1382
|
};
|
|
1368
1383
|
|
|
1369
1384
|
/**
|
|
1370
|
-
* Meta, plus `urlTags` on ChatGPT (OpenAI). Meta: 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. ChatGPT (OpenAI): `urlTags` becomes the ad's `landing_page_configuration.query_string_template`, which OpenAI appends to `linkUrl` on click.
|
|
1385
|
+
* Meta, plus `urlTags` on ChatGPT (OpenAI) and `pixelId` on Reddit. Meta: 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. ChatGPT (OpenAI): `urlTags` becomes the ad's `landing_page_configuration.query_string_template`, which OpenAI appends to `linkUrl` on click. Reddit: `pixelId` picks the pixel of the new ad group, like `promotedObject.pixelId` (which wins when both are sent).
|
|
1371
1386
|
*/
|
|
1372
1387
|
export type AdTracking = {
|
|
1373
1388
|
/**
|
|
1374
|
-
* Meta Pixel ID to attach for offsite-conversion measurement.
|
|
1389
|
+
* Meta Pixel ID to attach for offsite-conversion measurement, or the Reddit pixel of the new ad group.
|
|
1375
1390
|
*/
|
|
1376
1391
|
pixelId?: string;
|
|
1377
1392
|
/**
|
|
@@ -1405,11 +1420,11 @@ export type AdTreeAdSet = {
|
|
|
1405
1420
|
amount?: number;
|
|
1406
1421
|
type?: 'daily' | 'lifetime';
|
|
1407
1422
|
/**
|
|
1408
|
-
* LinkedIn only. The campaign's `dailyBudget
|
|
1423
|
+
* LinkedIn and X only. The daily budget (LinkedIn: the campaign's `dailyBudget`; X: the line item's `daily_budget_amount_local_micro`). Both allow a daily AND a lifetime budget together, which `amount`/`type` cannot express (daily wins there); read `daily` and `lifetime` to see both.
|
|
1409
1424
|
*/
|
|
1410
1425
|
daily?: number;
|
|
1411
1426
|
/**
|
|
1412
|
-
* LinkedIn only. The campaign's `totalBudget
|
|
1427
|
+
* LinkedIn and X only. The lifetime total (LinkedIn: the campaign's `totalBudget`; X: the line item's `total_budget_amount_local_micro`), readable even when a daily budget is also set.
|
|
1413
1428
|
*/
|
|
1414
1429
|
lifetime?: number;
|
|
1415
1430
|
/**
|
|
@@ -1484,7 +1499,7 @@ export type AdTreeAdSet = {
|
|
|
1484
1499
|
*/
|
|
1485
1500
|
export type AdTreeCampaign = {
|
|
1486
1501
|
platformCampaignId?: string;
|
|
1487
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
1502
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
1488
1503
|
campaignName?: string;
|
|
1489
1504
|
/**
|
|
1490
1505
|
* Earliest `platformCreatedAt` (platform ad creation time; falls back to `createdAt`, Zernio's sync time, for ads synced before that field existed) across every ad in the campaign. Not the platform campaign's own creation time (Meta's `Campaign.created_time` etc. is not synced). A campaign created empty and populated later will show its first ad's time, not the campaign's. Usable for sorting "most recently created" without the numeric-campaign-id heuristic. Same source as `AdTreeAdSet.createdTime` and `Ad.platformCreatedAt`; mirrors `AdCampaign.earliestAd`.
|
|
@@ -1505,7 +1520,7 @@ export type AdTreeCampaign = {
|
|
|
1505
1520
|
*/
|
|
1506
1521
|
reviewStatus?: (AdReviewStatus | null);
|
|
1507
1522
|
/**
|
|
1508
|
-
* Raw platform-level campaign status (Meta `effective_status`: ACTIVE, PAUSED, DELETED, ARCHIVED, IN_PROCESS, WITH_ISSUES; ChatGPT (OpenAI): the campaign's own switch, active / paused / archived, independent of the delivery `status`; TikTok: the campaign's own switch `operation_status`, ENABLE / DISABLE). Distinct from per-ad `platformStatus`.
|
|
1523
|
+
* Raw platform-level campaign status (Meta `effective_status`: ACTIVE, PAUSED, DELETED, ARCHIVED, IN_PROCESS, WITH_ISSUES; ChatGPT (OpenAI): the campaign's own switch, active / paused / archived, independent of the delivery `status`; TikTok: the campaign's own switch `operation_status`, ENABLE / DISABLE; Reddit: the campaign's `configured_status`, ACTIVE / PAUSED / ARCHIVED). Distinct from per-ad `platformStatus`.
|
|
1509
1524
|
*/
|
|
1510
1525
|
platformCampaignStatus?: (string) | null;
|
|
1511
1526
|
/**
|
|
@@ -4128,14 +4143,15 @@ export type ConversionEvent = {
|
|
|
4128
4143
|
* Standard event name (Purchase, Lead, CompleteRegistration, AddToCart,
|
|
4129
4144
|
* InitiateCheckout, AddPaymentInfo, Subscribe, StartTrial, ViewContent,
|
|
4130
4145
|
* Search, Contact, SubmitApplication, Schedule) or a custom string
|
|
4131
|
-
* (only supported on platforms that accept custom events: Meta
|
|
4132
|
-
* OpenAI Ads).
|
|
4146
|
+
* (only supported on platforms that accept custom events: Meta,
|
|
4147
|
+
* OpenAI Ads and Reddit).
|
|
4133
4148
|
*
|
|
4134
4149
|
* Per-platform behavior:
|
|
4135
4150
|
* - Meta: free-form; standard names match Meta's built-ins.
|
|
4136
4151
|
* - Google: ignored. The conversion action's category determines the type.
|
|
4137
4152
|
* - LinkedIn: ignored. The conversion rule's `type` is locked to the destination.
|
|
4138
4153
|
* - 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.
|
|
4154
|
+
* - Reddit: Purchase, Lead, CompleteRegistration (SIGN_UP), AddToCart, AddToWishlist, ViewContent, Search and PageView (PAGE_VISIT) map onto Reddit's tracking types; anything else is sent as a CUSTOM event with the name preserved.
|
|
4139
4155
|
*
|
|
4140
4156
|
*/
|
|
4141
4157
|
eventName: string;
|
|
@@ -4148,7 +4164,8 @@ export type ConversionEvent = {
|
|
|
4148
4164
|
* to prevent double-counting. Mapped to event_id on Meta,
|
|
4149
4165
|
* transactionId on Google, eventId on LinkedIn (LinkedIn deduplicates
|
|
4150
4166
|
* against Insight Tag events with the same eventId; the Insight Tag
|
|
4151
|
-
* event wins when both arrive).
|
|
4167
|
+
* event wins when both arrive), and `metadata.conversion_id` on Reddit
|
|
4168
|
+
* (Reddit's dedup key against Reddit Pixel events).
|
|
4152
4169
|
*
|
|
4153
4170
|
*/
|
|
4154
4171
|
eventId: string;
|
|
@@ -4267,6 +4284,14 @@ export type ConversionEvent = {
|
|
|
4267
4284
|
* Pinterest click ID (the `epik` URL param or `_epik` cookie). Sent to Pinterest as `click_id`, not hashed.
|
|
4268
4285
|
*/
|
|
4269
4286
|
epik?: string;
|
|
4287
|
+
/**
|
|
4288
|
+
* Reddit click ID (the `rdt_cid` URL param Reddit adds to ad clicks). Sent to Reddit as `click_id`, not hashed.
|
|
4289
|
+
*/
|
|
4290
|
+
rdt_cid?: string;
|
|
4291
|
+
/**
|
|
4292
|
+
* Reddit Pixel browser id (the `_rdt_uuid` first-party cookie). Sent to Reddit as `user.uuid`, not hashed.
|
|
4293
|
+
*/
|
|
4294
|
+
rdt_uuid?: string;
|
|
4270
4295
|
};
|
|
4271
4296
|
};
|
|
4272
4297
|
/**
|
|
@@ -9067,7 +9092,7 @@ export type ParameterCatalogTokenAccountId = string;
|
|
|
9067
9092
|
export type ParameterIdempotencyKeyHeader = string;
|
|
9068
9093
|
|
|
9069
9094
|
/**
|
|
9070
|
-
* Read the on/off switches live from the platform instead of returning the synced values. The fresh values are stored (so later reads return them too) and the response carries `statusReadAt`, the time of the read. At most 20 platform objects are read per request. Where a read fails (credentials, platform error, no reader on that platform), the stored values come back with `statusReadAt: null`. See "Status freshness" in the operation description.
|
|
9095
|
+
* Read the on/off switches live from the platform instead of returning the synced values. The fresh values are stored (so later reads return them too) and the response carries `statusReadAt`, the time of the read. At most 20 platform objects are read per request. Where a read fails (credentials, platform error, no reader on that platform), the stored values come back with `statusReadAt: null`. See "Status freshness" in the operation description. On X the budget is read live in the same read: on GET /v1/ads/{adId} `budget`, `adSetBudget`, `campaignBudget` and `budgetLevel` are the line item and campaign budgets X holds now (stored like the switches); on the ad set and campaign listings `budget` is the one that line item or campaign holds now (returned, not stored); a row whose budget the other level holds keeps its synced `budget`.
|
|
9071
9096
|
*/
|
|
9072
9097
|
export type ParameterLiveStatusRead = boolean;
|
|
9073
9098
|
|
|
@@ -10524,7 +10549,7 @@ export type contentType3 = 'story' | 'saved_story' | 'spotlight';
|
|
|
10524
10549
|
|
|
10525
10550
|
export type SocialAccount = {
|
|
10526
10551
|
_id: string;
|
|
10527
|
-
platform: 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'slack' | 'whatsapp' | 'shopify' | 'wordpress' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads' | 'openaiads' | 'sms' | 'phone' | 'rcs' | 'whopads';
|
|
10552
|
+
platform: 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'slack' | 'whatsapp' | 'shopify' | 'wordpress' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads' | 'openaiads' | 'redditads' | 'sms' | 'phone' | 'rcs' | 'whopads';
|
|
10528
10553
|
profileId: (string | Profile);
|
|
10529
10554
|
username?: string;
|
|
10530
10555
|
displayName?: string;
|
|
@@ -10618,7 +10643,7 @@ export type SocialAccount = {
|
|
|
10618
10643
|
};
|
|
10619
10644
|
};
|
|
10620
10645
|
|
|
10621
|
-
export type platform11 = 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'slack' | 'whatsapp' | 'shopify' | 'wordpress' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads' | 'openaiads' | 'sms' | 'phone' | 'rcs' | 'whopads';
|
|
10646
|
+
export type platform11 = 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'slack' | 'whatsapp' | 'shopify' | 'wordpress' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads' | 'openaiads' | 'redditads' | 'sms' | 'phone' | 'rcs' | 'whopads';
|
|
10622
10647
|
|
|
10623
10648
|
/**
|
|
10624
10649
|
* TikTok accounts only. The account type TikTok reported when the account was connected. `personal` accounts cannot use TikTok direct messages through the API (TikTok limits Business Messaging to Business Accounts): skip the inbox for them and tell the user to switch to a Business Account in the TikTok app, then reconnect. `business` is the prerequisite, not a guarantee; messaging also needs the messaging scopes granted and TikTok's regional availability. `unknown` on accounts connected before this was captured or whose grant left out the account-type scope.
|
|
@@ -10920,7 +10945,7 @@ export type TargetingSpec = {
|
|
|
10920
10945
|
}>;
|
|
10921
10946
|
};
|
|
10922
10947
|
/**
|
|
10923
|
-
* Minimum age. Applied on Meta, TikTok, Pinterest, LinkedIn, X and Google Search/Display (Google excludes the age ranges outside the request); rejected with 400 on OpenAI and on Google Performance Max / Demand Gen. Each platform clamps to its own range: Meta and Pinterest effectively cap at 65 (65 = 65+), TikTok maps up to 100. LinkedIn rounds out to its buckets (18-24, 25-34, 35-54, 55+) and has no under-18 audience; X rounds out to the narrowest of its fixed ranges (e.g. 25-34 becomes 25-49, 18-65 becomes 18+). Pinterest has no under-18 bucket, so an ageMin below 18 starts at 18 there.
|
|
10948
|
+
* Minimum age. Applied on Meta, TikTok, Pinterest, LinkedIn, X and Google Search/Display (Google excludes the age ranges outside the request); rejected with 400 on OpenAI, Reddit and on Google Performance Max / Demand Gen. Each platform clamps to its own range: Meta and Pinterest effectively cap at 65 (65 = 65+), TikTok maps up to 100. LinkedIn rounds out to its buckets (18-24, 25-34, 35-54, 55+) and has no under-18 audience; X rounds out to the narrowest of its fixed ranges (e.g. 25-34 becomes 25-49, 18-65 becomes 18+). Pinterest has no under-18 bucket, so an ageMin below 18 starts at 18 there.
|
|
10924
10949
|
*/
|
|
10925
10950
|
ageMin?: number;
|
|
10926
10951
|
/**
|
|
@@ -10928,7 +10953,7 @@ export type TargetingSpec = {
|
|
|
10928
10953
|
*/
|
|
10929
10954
|
ageMax?: number;
|
|
10930
10955
|
/**
|
|
10931
|
-
* Restrict by gender. 'all' (default) targets everyone. Applied on Meta, TikTok, Pinterest, LinkedIn, X and Google Search/Display (Google excludes the other gender); rejected with 400 on OpenAI and on Google Performance Max / Demand Gen.
|
|
10956
|
+
* Restrict by gender. 'all' (default) targets everyone. Applied on Meta, TikTok, Pinterest, LinkedIn, X, Reddit and Google Search/Display (Google excludes the other gender); rejected with 400 on OpenAI and on Google Performance Max / Demand Gen.
|
|
10932
10957
|
*/
|
|
10933
10958
|
gender?: 'all' | 'male' | 'female';
|
|
10934
10959
|
/**
|
|
@@ -10941,7 +10966,7 @@ export type TargetingSpec = {
|
|
|
10941
10966
|
*/
|
|
10942
10967
|
incomeTier?: 'top_5' | 'top_10' | 'top_10_25' | 'top_25_50';
|
|
10943
10968
|
/**
|
|
10944
|
-
* Language codes restricting the audience by language. Applied on Meta, Google, TikTok, LinkedIn, X and
|
|
10969
|
+
* Language codes restricting the audience by language. Applied on Meta, Google, TikTok, LinkedIn, X, Pinterest and Reddit; rejected with 400 on OpenAI. A code the platform cannot target returns 400 listing the ones it can. On Meta, ISO 639-1 codes (e.g. ['en']); a bare code targets all regional variants ("en" = all English), or use a region-qualified code ("en_GB", "pt_BR") for a specific one. Unknown codes are rejected.
|
|
10945
10970
|
*/
|
|
10946
10971
|
languages?: Array<(string)>;
|
|
10947
10972
|
/**
|
|
@@ -10996,13 +11021,29 @@ export type TargetingSpec = {
|
|
|
10996
11021
|
*/
|
|
10997
11022
|
jobFunctions?: Array<(string)>;
|
|
10998
11023
|
/**
|
|
10999
|
-
* 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 (the platformAudienceId from GET /v1/ads/audiences; Zernio resolves it to the targetable LinkedIn ad segment, an unknown id returns 400), Google user list ids, X custom audience ids). Not supported on OpenAI (400).
|
|
11024
|
+
* 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 (the platformAudienceId from GET /v1/ads/audiences; Zernio resolves it to the targetable LinkedIn ad segment, an unknown id returns 400), Google user list ids, X custom audience ids). On Reddit, the ids of custom audiences built in Reddit Ads Manager (GET /v1/ads/audiences does not list Reddit audiences). Not supported on OpenAI (400).
|
|
11000
11025
|
*/
|
|
11001
11026
|
audienceInclude?: Array<(string)>;
|
|
11002
11027
|
/**
|
|
11003
11028
|
* Platform audience IDs to exclude; same ID formats as audienceInclude. Not supported on OpenAI (400).
|
|
11004
11029
|
*/
|
|
11005
11030
|
audienceExclude?: Array<(string)>;
|
|
11031
|
+
/**
|
|
11032
|
+
* Reddit only (400 elsewhere). Subreddits to target, by name, with or without the `r/` prefix (e.g. `['marketing', 'r/startups']`), as returned by /v1/ads/targeting/search?dimension=community.
|
|
11033
|
+
*/
|
|
11034
|
+
communities?: Array<(string)>;
|
|
11035
|
+
/**
|
|
11036
|
+
* Reddit only (400 elsewhere). Subreddits to exclude, named like `communities`.
|
|
11037
|
+
*/
|
|
11038
|
+
excludedCommunities?: Array<(string)>;
|
|
11039
|
+
/**
|
|
11040
|
+
* Reddit only (400 elsewhere). Keywords that place the ad in Reddit conversations about them, as returned by /v1/ads/targeting/search?dimension=conversationKeyword.
|
|
11041
|
+
*/
|
|
11042
|
+
conversationKeywords?: Array<(string)>;
|
|
11043
|
+
/**
|
|
11044
|
+
* Reddit only (400 elsewhere). Conversation keywords to keep the ad away from.
|
|
11045
|
+
*/
|
|
11046
|
+
excludedConversationKeywords?: Array<(string)>;
|
|
11006
11047
|
};
|
|
11007
11048
|
|
|
11008
11049
|
/**
|
|
@@ -19448,7 +19489,7 @@ export type DeleteProfileError = (unknown | ErrorResponse | {
|
|
|
19448
19489
|
export type ListAccountsData = {
|
|
19449
19490
|
query?: {
|
|
19450
19491
|
/**
|
|
19451
|
-
* Only accounts of this kind. ads = ad accounts (Meta, Google, LinkedIn, Pinterest, TikTok, X, OpenAI), communication = WhatsApp, Telegram, Discord, Slack and iMessage, blogs = Shopify and WordPress, social = every other platform.
|
|
19492
|
+
* Only accounts of this kind. ads = ad accounts (Meta, Google, LinkedIn, Pinterest, TikTok, X, OpenAI, Reddit), communication = WhatsApp, Telegram, Discord, Slack and iMessage, blogs = Shopify and WordPress, social = every other platform.
|
|
19452
19493
|
*/
|
|
19453
19494
|
category?: 'social' | 'ads' | 'communication' | 'blogs';
|
|
19454
19495
|
/**
|
|
@@ -19656,7 +19697,7 @@ export type GetAllAccountsHealthData = {
|
|
|
19656
19697
|
/**
|
|
19657
19698
|
* Filter by platform
|
|
19658
19699
|
*/
|
|
19659
|
-
platform?: 'facebook' | 'instagram' | 'linkedin' | 'twitter' | 'tiktok' | 'youtube' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'slack' | 'whatsapp' | 'shopify' | 'wordpress' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads' | 'openaiads' | 'whopads';
|
|
19700
|
+
platform?: 'facebook' | 'instagram' | 'linkedin' | 'twitter' | 'tiktok' | 'youtube' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'slack' | 'whatsapp' | 'shopify' | 'wordpress' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads' | 'openaiads' | 'redditads' | 'whopads';
|
|
19660
19701
|
/**
|
|
19661
19702
|
* Filter by profile ID
|
|
19662
19703
|
*/
|
|
@@ -20652,6 +20693,10 @@ export type GetConnectUrlData = {
|
|
|
20652
20693
|
* x_ads_denied, x_ads_auth_failed, x_ads_config_error, x_ads_account_not_found,
|
|
20653
20694
|
* x_ads_state_error, x_ads_token_failed, x_ads_token_missing, x_ads_callback_error
|
|
20654
20695
|
*
|
|
20696
|
+
* Reddit Ads (platform=redditads):
|
|
20697
|
+
* reddit_ads_auth_failed, reddit_ads_invalid_state, reddit_ads_access_denied,
|
|
20698
|
+
* reddit_ads_scope_not_granted, reddit_ads_no_ad_accounts, reddit_ads_callback_error
|
|
20699
|
+
*
|
|
20655
20700
|
* Shopify (platform=shopify):
|
|
20656
20701
|
* shopify_auth_failed, shopify_config_error, shopify_invalid_state, shopify_invalid_hmac,
|
|
20657
20702
|
* shopify_invalid_shop, shopify_missing_scopes, shopify_callback_error
|
|
@@ -20662,8 +20707,8 @@ export type GetConnectUrlData = {
|
|
|
20662
20707
|
* and `tiktok_ads_auth_failed` may carry the provider's raw error string in `error_message`.
|
|
20663
20708
|
*
|
|
20664
20709
|
* 2. On the tiktok and twitter ads flows `platform` carries the ads platform id
|
|
20665
|
-
* (`tiktokads`, `xads`), not the value used in the request path. The googleads and
|
|
20666
|
-
* flows report `googleads` and `shopify`.
|
|
20710
|
+
* (`tiktokads`, `xads`), not the value used in the request path. The googleads, redditads and
|
|
20711
|
+
* shopify flows report `googleads`, `redditads` and `shopify`.
|
|
20667
20712
|
*
|
|
20668
20713
|
* 3. `missing_tiktok_permissions` means the TikTok authorization left out a permission the
|
|
20669
20714
|
* already-connected account needs, so nothing was changed and it keeps working as before.
|
|
@@ -20887,7 +20932,7 @@ export type ConnectAdsData = {
|
|
|
20887
20932
|
* instagram_login flow no ads account can be created; do not use this value for those accounts.
|
|
20888
20933
|
*
|
|
20889
20934
|
*/
|
|
20890
|
-
platform: 'facebook' | 'instagram' | 'linkedin' | 'tiktok' | 'twitter' | 'pinterest' | 'googleads';
|
|
20935
|
+
platform: 'facebook' | 'instagram' | 'linkedin' | 'tiktok' | 'twitter' | 'pinterest' | 'googleads' | 'redditads';
|
|
20891
20936
|
};
|
|
20892
20937
|
query: {
|
|
20893
20938
|
/**
|
|
@@ -20901,7 +20946,7 @@ export type ConnectAdsData = {
|
|
|
20901
20946
|
* profile's ads connection hangs off: that account is no longer connected, so the
|
|
20902
20947
|
* call returns 409 `reconnect_required` instead of reconnecting another account.
|
|
20903
20948
|
* Reconnect it via GET /v1/connect/{platform} first. Ignored for standalone
|
|
20904
|
-
* platforms (`googleads`).
|
|
20949
|
+
* platforms (`googleads`, `redditads`).
|
|
20905
20950
|
*
|
|
20906
20951
|
*/
|
|
20907
20952
|
accountId?: string;
|
|
@@ -20911,7 +20956,8 @@ export type ConnectAdsData = {
|
|
|
20911
20956
|
* preserve the existing scope; supplied IDs are checked against the new grant. To change
|
|
20912
20957
|
* that scope after migration, call this endpoint with the IDs and omit loginMode. Supported
|
|
20913
20958
|
* on `facebook`/`instagram` (Meta, `act_<digits>`), `linkedin` (bare
|
|
20914
|
-
* numeric sponsored-account id), `googleads` (bare customer id digits)
|
|
20959
|
+
* numeric sponsored-account id), `googleads` (bare customer id digits),
|
|
20960
|
+
* `redditads` (Reddit ad account id, `a2_<id>` or `t2_<id>`)
|
|
20915
20961
|
* and `twitter` (X Ads, base36 account id). `tiktok` scopes advertisers
|
|
20916
20962
|
* at OAuth and `pinterest` has no ads discovery, so both ignore it.
|
|
20917
20963
|
* Meta ids are additionally validated against the connected token:
|
|
@@ -20927,9 +20973,9 @@ export type ConnectAdsData = {
|
|
|
20927
20973
|
* scoped ones, instead of every ad account the login can reach. The scope
|
|
20928
20974
|
* is kept when this call returns an `authUrl`, so the Meta Ads account
|
|
20929
20975
|
* created after OAuth is scoped (and only its scoped ad accounts synced and
|
|
20930
|
-
* subscribed) from the start. On `googleads` the scope is kept through
|
|
20931
|
-
* OAuth when `redirect_url` is set, so the
|
|
20932
|
-
*
|
|
20976
|
+
* subscribed) from the start. On `googleads` and `redditads` the scope is kept through
|
|
20977
|
+
* OAuth when `redirect_url` is set, so the connection created after OAuth
|
|
20978
|
+
* syncs only its scoped ad accounts from the first sync.
|
|
20933
20979
|
* For multiple accounts use `adAccountIds` instead.
|
|
20934
20980
|
*
|
|
20935
20981
|
*/
|
|
@@ -20986,17 +21032,19 @@ export type ConnectAdsData = {
|
|
|
20986
21032
|
/**
|
|
20987
21033
|
* Custom URL the browser is sent to once the OAuth flow finishes. Honored on
|
|
20988
21034
|
* every ads platform, including the separate-token (`tiktok`, `twitter`) and
|
|
20989
|
-
* standalone (`googleads`) flows. MUST be an absolute http(s) URL or a custom
|
|
21035
|
+
* standalone (`googleads`, `redditads`) flows. MUST be an absolute http(s) URL or a custom
|
|
20990
21036
|
* app scheme for mobile deeplinks (e.g. myapp://callback); a relative path is
|
|
20991
21037
|
* rejected with 400 INVALID_REDIRECT_URL. On success
|
|
20992
|
-
* `tiktok
|
|
21038
|
+
* `tiktok` lands on the URL unchanged; `twitter`, `googleads` and `redditads`
|
|
21039
|
+
* append `connected` (the ads platform id: `xads`, `googleads` or `redditads`),
|
|
21040
|
+
* `profileId`, `accountId` (the ads connection) and `username`; and the
|
|
20993
21041
|
* same-token platforms (`facebook`, `instagram`, `linkedin`, `pinterest`)
|
|
20994
21042
|
* append `connected`, `profileId`, `accountId`, `username` and, on API-key
|
|
20995
21043
|
* calls, `connect_token`. On failure the same error contract applies as on
|
|
20996
21044
|
* GET /v1/connect/{platform}: `error` and `platform` are always appended,
|
|
20997
21045
|
* other params are optional, and the value list there is not exhaustive.
|
|
20998
|
-
* On the tiktok, twitter and
|
|
20999
|
-
* the ads platform id (`tiktokads`, `xads`, `googleads`), not the value
|
|
21046
|
+
* On the tiktok, twitter, googleads and redditads flows `platform` carries
|
|
21047
|
+
* the ads platform id (`tiktokads`, `xads`, `googleads`, `redditads`), not the value
|
|
21000
21048
|
* used in the request path. When omitted, the browser lands on
|
|
21001
21049
|
* the Zernio dashboard.
|
|
21002
21050
|
*
|
|
@@ -40303,7 +40351,7 @@ export type ListAdsData = {
|
|
|
40303
40351
|
* Meta only: Facebook Page ID. Returns only ads whose creative is backed by this Page (a Meta ad account serves ads for every Page in the Business Manager). Matches each ad's `creative.pageId`; ads with no page signal (rare IG-only creatives) never match. Mirrors the same filter on /v1/ads/campaigns and /v1/ads/tree.
|
|
40304
40352
|
*/
|
|
40305
40353
|
pageId?: string;
|
|
40306
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
40354
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
40307
40355
|
/**
|
|
40308
40356
|
* Meta ad ID. Returns the ad with this platform-side ad ID.
|
|
40309
40357
|
*/
|
|
@@ -41028,7 +41076,7 @@ export type ListAdCampaignsData = {
|
|
|
41028
41076
|
includeEmpty?: boolean;
|
|
41029
41077
|
limit?: number;
|
|
41030
41078
|
/**
|
|
41031
|
-
* Read the on/off switches live from the platform instead of returning the synced values. The fresh values are stored (so later reads return them too) and the response carries `statusReadAt`, the time of the read. At most 20 platform objects are read per request. Where a read fails (credentials, platform error, no reader on that platform), the stored values come back with `statusReadAt: null`. See "Status freshness" in the operation description.
|
|
41079
|
+
* Read the on/off switches live from the platform instead of returning the synced values. The fresh values are stored (so later reads return them too) and the response carries `statusReadAt`, the time of the read. At most 20 platform objects are read per request. Where a read fails (credentials, platform error, no reader on that platform), the stored values come back with `statusReadAt: null`. See "Status freshness" in the operation description. On X the budget is read live in the same read: on GET /v1/ads/{adId} `budget`, `adSetBudget`, `campaignBudget` and `budgetLevel` are the line item and campaign budgets X holds now (stored like the switches); on the ad set and campaign listings `budget` is the one that line item or campaign holds now (returned, not stored); a row whose budget the other level holds keeps its synced `budget`.
|
|
41032
41080
|
*/
|
|
41033
41081
|
live?: boolean;
|
|
41034
41082
|
/**
|
|
@@ -41043,7 +41091,7 @@ export type ListAdCampaignsData = {
|
|
|
41043
41091
|
* Meta only: Facebook Page ID. Campaigns have no Page of their own, so this keeps campaigns having at least one ad backed by this Page, with adCount and metrics computed over those ads only. Mirrors the same filter on /v1/ads and /v1/ads/tree.
|
|
41044
41092
|
*/
|
|
41045
41093
|
pageId?: string;
|
|
41046
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
41094
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
41047
41095
|
/**
|
|
41048
41096
|
* Profile ID
|
|
41049
41097
|
*/
|
|
@@ -41105,6 +41153,14 @@ export type CreateAdCampaignData = {
|
|
|
41105
41153
|
budgetAmount?: number;
|
|
41106
41154
|
budgetType?: 'daily' | 'lifetime';
|
|
41107
41155
|
status?: 'ACTIVE' | 'PAUSED';
|
|
41156
|
+
/**
|
|
41157
|
+
* Reddit only (400 elsewhere). Campaign start (ISO 8601); a value without an offset is read in the ad account time zone. Requires a campaign budget (`budgetAmount` + `budgetType`, 400 otherwise). Defaults to now.
|
|
41158
|
+
*/
|
|
41159
|
+
startDate?: string;
|
|
41160
|
+
/**
|
|
41161
|
+
* Reddit only (400 elsewhere). Campaign end (ISO 8601); a value without an offset is read in the ad account time zone. Requires a campaign budget (400 otherwise), and is required for `budgetType: lifetime`.
|
|
41162
|
+
*/
|
|
41163
|
+
endDate?: string;
|
|
41108
41164
|
/**
|
|
41109
41165
|
* Google only (400 elsewhere). Written on the new campaign.
|
|
41110
41166
|
*/
|
|
@@ -41170,7 +41226,7 @@ export type CreateAdCampaignError = (unknown | ErrorResponse);
|
|
|
41170
41226
|
export type UpdateAdCampaignStatusData = {
|
|
41171
41227
|
body: {
|
|
41172
41228
|
status: 'active' | 'paused';
|
|
41173
|
-
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
41229
|
+
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
41174
41230
|
};
|
|
41175
41231
|
path: {
|
|
41176
41232
|
/**
|
|
@@ -41186,7 +41242,7 @@ export type UpdateAdCampaignStatusResponse = ({
|
|
|
41186
41242
|
*/
|
|
41187
41243
|
status?: 'active' | 'paused';
|
|
41188
41244
|
/**
|
|
41189
|
-
* The campaign's own switch as read back from the platform, in the raw platform vocabulary (Meta effective_status, TikTok ENABLE / DISABLE, Google ENABLED / PAUSED, ChatGPT (OpenAI) status). Null when the platform could not be read, which is always the case on Pinterest, LinkedIn and X (no single-campaign read).
|
|
41245
|
+
* The campaign's own switch as read back from the platform, in the raw platform vocabulary (Meta effective_status, TikTok ENABLE / DISABLE, Google ENABLED / PAUSED, ChatGPT (OpenAI) status, Reddit configured_status). Null when the platform could not be read, which is always the case on Pinterest, LinkedIn and X (no single-campaign read).
|
|
41190
41246
|
*/
|
|
41191
41247
|
platformCampaignStatus?: (string) | null;
|
|
41192
41248
|
/**
|
|
@@ -41402,7 +41458,7 @@ export type UpdateAdCampaignData = {
|
|
|
41402
41458
|
/**
|
|
41403
41459
|
* Required: platform campaign IDs are not globally unique.
|
|
41404
41460
|
*/
|
|
41405
|
-
platform: 'facebook' | 'instagram' | 'google';
|
|
41461
|
+
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
41406
41462
|
/**
|
|
41407
41463
|
* **Meta only.** Zernio SocialAccount id owning the ad account. Needed only for an EMPTY campaign (zero ads); ignored otherwise.
|
|
41408
41464
|
*/
|
|
@@ -41446,7 +41502,7 @@ export type UpdateAdCampaignData = {
|
|
|
41446
41502
|
*/
|
|
41447
41503
|
sharedBudgetId?: (string) | null;
|
|
41448
41504
|
/**
|
|
41449
|
-
* Meta CBO, Google daily, or OpenAI Ads daily or lifetime campaign budget, in whole currency units.
|
|
41505
|
+
* Meta CBO, Google daily, or OpenAI Ads or Reddit Ads daily or lifetime campaign budget, in whole currency units.
|
|
41450
41506
|
*/
|
|
41451
41507
|
budget?: {
|
|
41452
41508
|
/**
|
|
@@ -41456,7 +41512,7 @@ export type UpdateAdCampaignData = {
|
|
|
41456
41512
|
type: 'daily' | 'lifetime';
|
|
41457
41513
|
};
|
|
41458
41514
|
/**
|
|
41459
|
-
* **Meta
|
|
41515
|
+
* **Meta and Reddit.** Rename the campaign.
|
|
41460
41516
|
*/
|
|
41461
41517
|
name?: string;
|
|
41462
41518
|
/**
|
|
@@ -41509,11 +41565,15 @@ export type UpdateAdCampaignError = (unknown | ErrorResponse);
|
|
|
41509
41565
|
|
|
41510
41566
|
export type DeleteAdCampaignData = {
|
|
41511
41567
|
body: {
|
|
41512
|
-
platform: 'facebook' | 'instagram' | 'google';
|
|
41568
|
+
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
41513
41569
|
/**
|
|
41514
41570
|
* Zernio SocialAccount id owning the ad account. Required only to delete an EMPTY campaign (zero ads), which has no local Ad documents to resolve a token from.
|
|
41515
41571
|
*/
|
|
41516
41572
|
accountId?: string;
|
|
41573
|
+
/**
|
|
41574
|
+
* X only, for an EMPTY campaign that was never synced: the X ad account id the campaign belongs to (lowercase letters and digits). The synced campaign's ad account wins when there is one. Also accepted on the query string.
|
|
41575
|
+
*/
|
|
41576
|
+
adAccountId?: string;
|
|
41517
41577
|
};
|
|
41518
41578
|
path: {
|
|
41519
41579
|
/**
|
|
@@ -41544,7 +41604,7 @@ export type ListCampaignNegativeKeywordsData = {
|
|
|
41544
41604
|
/**
|
|
41545
41605
|
* Optional and NOT authoritative: the resolved campaign's own platform decides 200 vs 501, never this hint.
|
|
41546
41606
|
*/
|
|
41547
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
41607
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
41548
41608
|
};
|
|
41549
41609
|
};
|
|
41550
41610
|
|
|
@@ -41571,7 +41631,7 @@ export type ReplaceCampaignNegativeKeywordsData = {
|
|
|
41571
41631
|
/**
|
|
41572
41632
|
* Optional and NOT authoritative: the resolved campaign's own platform decides 200 vs 501, never this hint.
|
|
41573
41633
|
*/
|
|
41574
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
41634
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
41575
41635
|
keywords: Array<KeywordEntry>;
|
|
41576
41636
|
};
|
|
41577
41637
|
path: {
|
|
@@ -41614,7 +41674,7 @@ export type BulkUpdateAdCampaignStatusData = {
|
|
|
41614
41674
|
/**
|
|
41615
41675
|
* The ad platform, e.g. `google` for Google Ads. The ads connection slug (`googleads`, `tiktokads`, ...) is accepted as an alias. `metaads` is not: send `facebook` or `instagram`.
|
|
41616
41676
|
*/
|
|
41617
|
-
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'googleads' | 'tiktokads' | 'linkedinads' | 'pinterestads' | 'xads' | 'openaiads';
|
|
41677
|
+
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit' | 'googleads' | 'tiktokads' | 'linkedinads' | 'pinterestads' | 'xads' | 'openaiads' | 'redditads';
|
|
41618
41678
|
}>;
|
|
41619
41679
|
};
|
|
41620
41680
|
};
|
|
@@ -41966,10 +42026,10 @@ export type ListAdSetsData = {
|
|
|
41966
42026
|
*/
|
|
41967
42027
|
campaignId?: string;
|
|
41968
42028
|
/**
|
|
41969
|
-
* Read the on/off switches live from the platform instead of returning the synced values. The fresh values are stored (so later reads return them too) and the response carries `statusReadAt`, the time of the read. At most 20 platform objects are read per request. Where a read fails (credentials, platform error, no reader on that platform), the stored values come back with `statusReadAt: null`. See "Status freshness" in the operation description.
|
|
42029
|
+
* Read the on/off switches live from the platform instead of returning the synced values. The fresh values are stored (so later reads return them too) and the response carries `statusReadAt`, the time of the read. At most 20 platform objects are read per request. Where a read fails (credentials, platform error, no reader on that platform), the stored values come back with `statusReadAt: null`. See "Status freshness" in the operation description. On X the budget is read live in the same read: on GET /v1/ads/{adId} `budget`, `adSetBudget`, `campaignBudget` and `budgetLevel` are the line item and campaign budgets X holds now (stored like the switches); on the ad set and campaign listings `budget` is the one that line item or campaign holds now (returned, not stored); a row whose budget the other level holds keeps its synced `budget`.
|
|
41970
42030
|
*/
|
|
41971
42031
|
live?: boolean;
|
|
41972
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
42032
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
41973
42033
|
};
|
|
41974
42034
|
};
|
|
41975
42035
|
|
|
@@ -41992,11 +42052,11 @@ export type ListAdSetsResponse = ({
|
|
|
41992
42052
|
amount?: number;
|
|
41993
42053
|
type?: 'daily' | 'lifetime';
|
|
41994
42054
|
/**
|
|
41995
|
-
* LinkedIn only. The campaign's `dailyBudget
|
|
42055
|
+
* LinkedIn and X only. The daily budget (LinkedIn: the campaign's `dailyBudget`; X: the line item's `daily_budget_amount_local_micro`). Both allow a daily AND a lifetime budget together, which `amount`/`type` cannot express (daily wins there); read `daily` and `lifetime` to see both.
|
|
41996
42056
|
*/
|
|
41997
42057
|
daily?: number;
|
|
41998
42058
|
/**
|
|
41999
|
-
* LinkedIn only. The campaign's `totalBudget
|
|
42059
|
+
* LinkedIn and X only. The lifetime total (LinkedIn: the campaign's `totalBudget`; X: the line item's `total_budget_amount_local_micro`), readable even when a daily budget is also set.
|
|
42000
42060
|
*/
|
|
42001
42061
|
lifetime?: number;
|
|
42002
42062
|
/**
|
|
@@ -42118,7 +42178,7 @@ export type CreateAdSetData = {
|
|
|
42118
42178
|
/**
|
|
42119
42179
|
* Only "google" is implemented today; every other value returns 501.
|
|
42120
42180
|
*/
|
|
42121
|
-
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
42181
|
+
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
42122
42182
|
/**
|
|
42123
42183
|
* Google platform campaign ID (numeric) the ad group is created under.
|
|
42124
42184
|
*/
|
|
@@ -42305,7 +42365,7 @@ export type GetAdSetDetailsError = (unknown | ErrorResponse);
|
|
|
42305
42365
|
|
|
42306
42366
|
export type UpdateAdSetData = {
|
|
42307
42367
|
body: {
|
|
42308
|
-
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
42368
|
+
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
42309
42369
|
/**
|
|
42310
42370
|
* Omit if not updating budget
|
|
42311
42371
|
*/
|
|
@@ -42314,11 +42374,11 @@ export type UpdateAdSetData = {
|
|
|
42314
42374
|
type?: 'daily' | 'lifetime';
|
|
42315
42375
|
};
|
|
42316
42376
|
/**
|
|
42317
|
-
* Writes the ad set's own on/off switch (Meta: `configured_status`
|
|
42377
|
+
* Writes the ad set's own on/off switch (Meta: `configured_status`; X: the line item's `entity_status` ACTIVE / PAUSED), whatever delivery status its ads report. Omit if not toggling delivery state.
|
|
42318
42378
|
*/
|
|
42319
42379
|
status?: 'active' | 'paused';
|
|
42320
42380
|
/**
|
|
42321
|
-
* Rename the ad set (
|
|
42381
|
+
* Rename the ad set (on X, the line item `name`). Platforms without a rename return 501. At least one of budget/status/bidStrategy/name is required.
|
|
42322
42382
|
*/
|
|
42323
42383
|
name?: string;
|
|
42324
42384
|
/**
|
|
@@ -42328,8 +42388,14 @@ export type UpdateAdSetData = {
|
|
|
42328
42388
|
* automatically. On OpenAI, LOWEST_COST_WITH_BID_CAP and COST_CAP both map to
|
|
42329
42389
|
* the ad group's `bidding_config.max_bid_micros` (one knob covers both);
|
|
42330
42390
|
* LOWEST_COST_WITH_MIN_ROAS is rejected with 422 (OpenAI has no ROAS-based
|
|
42331
|
-
* bidding).
|
|
42332
|
-
*
|
|
42391
|
+
* bidding). On X it writes the line item's `bid_strategy`:
|
|
42392
|
+
* LOWEST_COST_WITHOUT_CAP = AUTO, LOWEST_COST_WITH_BID_CAP = MAX and
|
|
42393
|
+
* COST_CAP = TARGET, with `bidAmount` as `bid_amount_local_micro`;
|
|
42394
|
+
* LOWEST_COST_WITH_MIN_ROAS is rejected with 422. X decides which strategy
|
|
42395
|
+
* the line item's objective allows (TARGET only on REACH, FOLLOWERS and
|
|
42396
|
+
* WEBSITE_CLICKS, MAX not on REACH or FOLLOWERS). On Reddit, see the mapping in the
|
|
42397
|
+
* description above (LOWEST_COST_WITH_MIN_ROAS returns 422). Other platforms
|
|
42398
|
+
* (linkedin, pinterest, google) return 501 Not Implemented when bidStrategy is set.
|
|
42333
42399
|
*
|
|
42334
42400
|
*/
|
|
42335
42401
|
bidStrategy?: (BidStrategy);
|
|
@@ -42356,7 +42422,7 @@ export type UpdateAdSetData = {
|
|
|
42356
42422
|
/**
|
|
42357
42423
|
* Bid cap in WHOLE currency units (USD: 5 = $5.00; JPY: 100 = ¥100). Required when
|
|
42358
42424
|
* bidStrategy is LOWEST_COST_WITH_BID_CAP or COST_CAP. Internally converted to Meta's
|
|
42359
|
-
* smallest-denomination integer, or (on OpenAI) to micros (× 1,000,000). Meta only:
|
|
42425
|
+
* smallest-denomination integer, or (on OpenAI and X) to micros (× 1,000,000). Meta only:
|
|
42360
42426
|
* may be sent alone, WITHOUT bidStrategy, to update the cap amount on an ad set whose
|
|
42361
42427
|
* parent campaign is COST_CAP or LOWEST_COST_WITH_BID_CAP (the strategy is inherited
|
|
42362
42428
|
* from the campaign and is left untouched).
|
|
@@ -42513,7 +42579,7 @@ export type DeleteAdSetError = (ErrorResponse | unknown);
|
|
|
42513
42579
|
export type UpdateAdSetStatusData = {
|
|
42514
42580
|
body: {
|
|
42515
42581
|
status: 'active' | 'paused';
|
|
42516
|
-
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
42582
|
+
platform: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
42517
42583
|
};
|
|
42518
42584
|
path: {
|
|
42519
42585
|
/**
|
|
@@ -42529,7 +42595,7 @@ export type UpdateAdSetStatusResponse = ({
|
|
|
42529
42595
|
*/
|
|
42530
42596
|
status?: 'active' | 'paused';
|
|
42531
42597
|
/**
|
|
42532
|
-
* The ad set's own switch as read back from the platform, in the raw platform vocabulary (Meta effective_status, TikTok ENABLE / DISABLE, Google ENABLED / PAUSED, LinkedIn and Pinterest ACTIVE / PAUSED, ChatGPT (OpenAI) status). Null when the platform could not be read, which is always the case on X.
|
|
42598
|
+
* The ad set's own switch as read back from the platform, in the raw platform vocabulary (Meta effective_status, TikTok ENABLE / DISABLE, Google ENABLED / PAUSED, LinkedIn and Pinterest ACTIVE / PAUSED, ChatGPT (OpenAI) status, Reddit configured_status). Null when the platform could not be read, which is always the case on X.
|
|
42533
42599
|
*/
|
|
42534
42600
|
platformAdSetStatus?: (string) | null;
|
|
42535
42601
|
/**
|
|
@@ -42598,7 +42664,7 @@ export type GetAdTreeData = {
|
|
|
42598
42664
|
* Meta only: Facebook Page ID. Prunes the tree to ads whose creative is backed by this Page: campaigns and ad sets with no ad on the Page drop out, and rolled-up metrics cover only the Page's ads. Mirrors the same filter on /v1/ads and /v1/ads/campaigns.
|
|
42599
42665
|
*/
|
|
42600
42666
|
pageId?: string;
|
|
42601
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
42667
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
42602
42668
|
/**
|
|
42603
42669
|
* Profile ID
|
|
42604
42670
|
*/
|
|
@@ -42660,7 +42726,7 @@ export type GetAdsTimelineData = {
|
|
|
42660
42726
|
/**
|
|
42661
42727
|
* Restrict to one platform.
|
|
42662
42728
|
*/
|
|
42663
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
42729
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
42664
42730
|
/**
|
|
42665
42731
|
* Inclusive end of metrics range (YYYY-MM-DD). Defaults to today. Max 730-day range.
|
|
42666
42732
|
*/
|
|
@@ -42687,7 +42753,7 @@ export type GetAdData = {
|
|
|
42687
42753
|
};
|
|
42688
42754
|
query?: {
|
|
42689
42755
|
/**
|
|
42690
|
-
* Read the on/off switches live from the platform instead of returning the synced values. The fresh values are stored (so later reads return them too) and the response carries `statusReadAt`, the time of the read. At most 20 platform objects are read per request. Where a read fails (credentials, platform error, no reader on that platform), the stored values come back with `statusReadAt: null`. See "Status freshness" in the operation description.
|
|
42756
|
+
* Read the on/off switches live from the platform instead of returning the synced values. The fresh values are stored (so later reads return them too) and the response carries `statusReadAt`, the time of the read. At most 20 platform objects are read per request. Where a read fails (credentials, platform error, no reader on that platform), the stored values come back with `statusReadAt: null`. See "Status freshness" in the operation description. On X the budget is read live in the same read: on GET /v1/ads/{adId} `budget`, `adSetBudget`, `campaignBudget` and `budgetLevel` are the line item and campaign budgets X holds now (stored like the switches); on the ad set and campaign listings `budget` is the one that line item or campaign holds now (returned, not stored); a row whose budget the other level holds keeps its synced `budget`.
|
|
42691
42757
|
*/
|
|
42692
42758
|
live?: boolean;
|
|
42693
42759
|
};
|
|
@@ -45642,7 +45708,7 @@ export type ListAdNegativeKeywordListsData = {
|
|
|
45642
45708
|
* @deprecated
|
|
45643
45709
|
*/
|
|
45644
45710
|
customerId?: string;
|
|
45645
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
45711
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
45646
45712
|
};
|
|
45647
45713
|
};
|
|
45648
45714
|
|
|
@@ -45682,7 +45748,7 @@ export type CreateAdNegativeKeywordListData = {
|
|
|
45682
45748
|
/**
|
|
45683
45749
|
* Optional courtesy field. The resolved account or campaign determines support; other platforms return 501.
|
|
45684
45750
|
*/
|
|
45685
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
45751
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
45686
45752
|
/**
|
|
45687
45753
|
* Nonempty list name, trimmed before use.
|
|
45688
45754
|
*/
|
|
@@ -45726,7 +45792,7 @@ export type GetAdNegativeKeywordListData = {
|
|
|
45726
45792
|
* @deprecated
|
|
45727
45793
|
*/
|
|
45728
45794
|
customerId?: string;
|
|
45729
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
45795
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
45730
45796
|
};
|
|
45731
45797
|
};
|
|
45732
45798
|
|
|
@@ -45768,7 +45834,7 @@ export type UpdateAdNegativeKeywordListData = {
|
|
|
45768
45834
|
/**
|
|
45769
45835
|
* Optional courtesy field. The resolved account or campaign determines support; other platforms return 501.
|
|
45770
45836
|
*/
|
|
45771
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
45837
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
45772
45838
|
/**
|
|
45773
45839
|
* Nonempty list name, trimmed before use.
|
|
45774
45840
|
*/
|
|
@@ -45800,7 +45866,7 @@ export type DeleteAdNegativeKeywordListData = {
|
|
|
45800
45866
|
* @deprecated
|
|
45801
45867
|
*/
|
|
45802
45868
|
customerId?: string;
|
|
45803
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
45869
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
45804
45870
|
};
|
|
45805
45871
|
};
|
|
45806
45872
|
|
|
@@ -45832,7 +45898,7 @@ export type ReplaceAdNegativeKeywordListKeywordsData = {
|
|
|
45832
45898
|
/**
|
|
45833
45899
|
* Optional courtesy field. The resolved account or campaign determines support; other platforms return 501.
|
|
45834
45900
|
*/
|
|
45835
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
45901
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
45836
45902
|
/**
|
|
45837
45903
|
* Full desired keyword set. Bare strings use broad match. Send [] to clear the list.
|
|
45838
45904
|
*/
|
|
@@ -45865,7 +45931,7 @@ export type ListCampaignNegativeKeywordListsData = {
|
|
|
45865
45931
|
campaignId: string;
|
|
45866
45932
|
};
|
|
45867
45933
|
query?: {
|
|
45868
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
45934
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
45869
45935
|
};
|
|
45870
45936
|
};
|
|
45871
45937
|
|
|
@@ -45892,7 +45958,7 @@ export type ReplaceCampaignNegativeKeywordListsData = {
|
|
|
45892
45958
|
/**
|
|
45893
45959
|
* Optional courtesy field. The resolved account or campaign determines support; other platforms return 501.
|
|
45894
45960
|
*/
|
|
45895
|
-
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai';
|
|
45961
|
+
platform?: 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' | 'reddit';
|
|
45896
45962
|
listIds: Array<(string)>;
|
|
45897
45963
|
};
|
|
45898
45964
|
path: {
|
|
@@ -46907,9 +46973,17 @@ export type ListAdAccountsResponse = ({
|
|
|
46907
46973
|
*/
|
|
46908
46974
|
accountStatus?: unknown;
|
|
46909
46975
|
/**
|
|
46910
|
-
* X only. X's own ad account approval status
|
|
46976
|
+
* X and Reddit only. X's own ad account approval status, or Reddit's `admin_approval`. Observed X values are `ACCEPTED`, `PENDING` and `REJECTED`, but X does not publish the full vocabulary, so treat an unrecognised value as not usable. Other platforms report `accountStatus` or `status` instead.
|
|
46911
46977
|
*/
|
|
46912
46978
|
approvalStatus?: string;
|
|
46979
|
+
/**
|
|
46980
|
+
* Reddit only. The ad account's time zone as Reddit reports it (`time_zone_id`). Schedules on Reddit ads are read in this zone.
|
|
46981
|
+
*/
|
|
46982
|
+
timezone?: string;
|
|
46983
|
+
/**
|
|
46984
|
+
* Reddit only. Reddit's ad account type, forwarded unchanged.
|
|
46985
|
+
*/
|
|
46986
|
+
type?: string;
|
|
46913
46987
|
/**
|
|
46914
46988
|
* Meta only. Meta's `disable_reason` code, forwarded unchanged. Present when `accountStatus` is `2` (DISABLED) and Meta gives a reason, which is what separates a policy action from a payment problem. Meta does not publish a stable list of values for this field, so none are enumerated here: resolve the code against Meta's own ad account reference. Absent when Meta reports no reason, or when the connected token cannot read the field.
|
|
46915
46989
|
*/
|
|
@@ -47125,11 +47199,11 @@ export type BoostPostData = {
|
|
|
47125
47199
|
*/
|
|
47126
47200
|
postId?: string;
|
|
47127
47201
|
/**
|
|
47128
|
-
* Platform post ID (alternative to postId). Meta: a Page post id (`<pageId>_<postId>` or the bare post id) or an Instagram media id. On a Meta Ads business-login connection (platform metaads) the id is resolved live: an Instagram media id is boosted as that media, running as the Instagram account that owns it.
|
|
47202
|
+
* Platform post ID (alternative to postId). Reddit: the post id, with or without the `t3_` prefix. Meta: a Page post id (`<pageId>_<postId>` or the bare post id) or an Instagram media id. On a Meta Ads business-login connection (platform metaads) the id is resolved live: an Instagram media id is boosted as that media, running as the Instagram account that owns it.
|
|
47129
47203
|
*/
|
|
47130
47204
|
platformPostId?: string;
|
|
47131
47205
|
/**
|
|
47132
|
-
* Zernio account id. Normally the connected posting account (facebook, instagram, tiktok, linkedin, pinterest, twitter) or a
|
|
47206
|
+
* Zernio account id. Normally the connected posting account (facebook, instagram, tiktok, linkedin, pinterest, twitter), a googleads account or a redditads account. TikTok: the TikTok Ads connection (platform tiktokads) is accepted too when the post brings its own authorization (sparkAuthCode or sparkPosts), so Spark ads need no organic TikTok account connected; such a call must use platformPostId, not postId.
|
|
47133
47207
|
*/
|
|
47134
47208
|
accountId: string;
|
|
47135
47209
|
/**
|
|
@@ -47146,7 +47220,7 @@ export type BoostPostData = {
|
|
|
47146
47220
|
*/
|
|
47147
47221
|
adSetName?: string;
|
|
47148
47222
|
/**
|
|
47149
|
-
* Available goals vary by platform. Meta (Facebook/Instagram) and TikTok support all 7. LinkedIn supports all except app_promotion. X supports engagement, traffic, awareness, video_views, app_promotion. Pinterest and Google Ads support only engagement, traffic, awareness, video_views.
|
|
47223
|
+
* Available goals vary by platform. Meta (Facebook/Instagram) and TikTok support all 7. LinkedIn supports all except app_promotion. X supports engagement, traffic, awareness, video_views, app_promotion. Pinterest and Google Ads support only engagement, traffic, awareness, video_views. Reddit supports traffic, awareness, video_views, lead_generation and conversions.
|
|
47150
47224
|
*/
|
|
47151
47225
|
goal: 'engagement' | 'traffic' | 'awareness' | 'video_views' | 'lead_generation' | 'conversions' | 'app_promotion';
|
|
47152
47226
|
/**
|
|
@@ -47173,6 +47247,10 @@ export type BoostPostData = {
|
|
|
47173
47247
|
* Goes together with budgetAmount. lifetime requires schedule.endDate.
|
|
47174
47248
|
*/
|
|
47175
47249
|
budgetType?: 'daily' | 'lifetime';
|
|
47250
|
+
/**
|
|
47251
|
+
* X only. A lifetime total, in whole currency units, that caps a daily budget (budgetType daily): the line item gets both daily_budget_amount_local_micro and total_budget_amount_local_micro, and stops spending once the total is reached. Must be at least budgetAmount. Read back as budget.daily and budget.lifetime. 400 on a lifetime budget or on another platform.
|
|
47252
|
+
*/
|
|
47253
|
+
lifetimeBudgetCap?: number;
|
|
47176
47254
|
/**
|
|
47177
47255
|
* Alias of budgetAmount + budgetType, kept for existing callers
|
|
47178
47256
|
* @deprecated
|
|
@@ -47205,11 +47283,11 @@ export type BoostPostData = {
|
|
|
47205
47283
|
*/
|
|
47206
47284
|
currency?: string;
|
|
47207
47285
|
/**
|
|
47208
|
-
* Ad-set start time (ISO 8601, e.g. "2026-06-10T09:00:00Z"), mapped to the ad set's `start_time`. When omitted the ad starts delivering immediately. On Meta, TikTok, X and
|
|
47286
|
+
* Ad-set start time (ISO 8601, e.g. "2026-06-10T09:00:00Z"), mapped to the ad set's `start_time`. When omitted the ad starts delivering immediately. On Meta, TikTok, X, Pinterest and Reddit a value without an offset (`YYYY-MM-DD`, `YYYY-MM-DD HH:MM:SS` or `YYYY-MM-DDTHH:MM:SS`) is read in the ad account timezone. Same field as on POST /v1/ads/create.
|
|
47209
47287
|
*/
|
|
47210
47288
|
startDate?: string;
|
|
47211
47289
|
/**
|
|
47212
|
-
* Ad-set end time (ISO 8601), mapped to the ad set's `end_time
|
|
47290
|
+
* Ad-set end time (ISO 8601), mapped to the ad set's `end_time` (on X, the line item's `end_time`; X campaigns carry no flight dates). Required for lifetime budgets. On Meta, TikTok, X, Pinterest and Reddit a value without an offset (`YYYY-MM-DD`, `YYYY-MM-DD HH:MM:SS` or `YYYY-MM-DDTHH:MM:SS`) is read in the ad account timezone, and a date-only end runs to 23:59:59 local. Same field as on POST /v1/ads/create.
|
|
47213
47291
|
*/
|
|
47214
47292
|
endDate?: string;
|
|
47215
47293
|
/**
|
|
@@ -47233,18 +47311,22 @@ export type BoostPostData = {
|
|
|
47233
47311
|
* Geo keys (`regions`/`cities`/`zips`/`metros`) resolve via
|
|
47234
47312
|
* GET /v1/ads/targeting/search?dimension=geo. City radius and lat/lng
|
|
47235
47313
|
* `customLocations` are Meta-only and preserve the boosted post's
|
|
47236
|
-
* social proof (the ad references the existing post).
|
|
47314
|
+
* social proof (the ad references the existing post). On Reddit the whole
|
|
47315
|
+
* `TargetingSpec` applies, including `communities`, `excludedCommunities`,
|
|
47316
|
+
* `conversationKeywords`, `excludedConversationKeywords`, `interests`,
|
|
47317
|
+
* `audienceInclude` / `audienceExclude` and `excludedLocations`; without
|
|
47318
|
+
* any geo the ad targets the US.
|
|
47237
47319
|
*
|
|
47238
47320
|
*/
|
|
47239
47321
|
targeting?: {
|
|
47240
47322
|
ageMin?: number;
|
|
47241
47323
|
ageMax?: number;
|
|
47242
47324
|
/**
|
|
47243
|
-
* Applied on Meta, TikTok and
|
|
47325
|
+
* Applied on Meta, TikTok, Pinterest and Reddit. Ignored on Google, LinkedIn and X.
|
|
47244
47326
|
*/
|
|
47245
47327
|
gender?: 'all' | 'male' | 'female';
|
|
47246
47328
|
/**
|
|
47247
|
-
* Meta locale ids (numeric), passed through as given.
|
|
47329
|
+
* Meta locale ids (numeric), passed through as given. Reddit: language codes (e.g. `en`).
|
|
47248
47330
|
*/
|
|
47249
47331
|
languages?: Array<(string)>;
|
|
47250
47332
|
/**
|
|
@@ -47343,7 +47425,9 @@ export type BoostPostData = {
|
|
|
47343
47425
|
* Deprecated: send it inside `platformSpecificData` instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400.
|
|
47344
47426
|
*
|
|
47345
47427
|
* Meta bid strategy applied to the ad set. On TikTok, mapped to
|
|
47346
|
-
* `bid_type` / `bid_price` / `deep_bid_type` automatically.
|
|
47428
|
+
* `bid_type` / `bid_price` / `deep_bid_type` automatically. On Reddit,
|
|
47429
|
+
* applied to the new ad group (see the Reddit section above; 422 for
|
|
47430
|
+
* LOWEST_COST_WITH_MIN_ROAS).
|
|
47347
47431
|
*
|
|
47348
47432
|
* @deprecated
|
|
47349
47433
|
*/
|
|
@@ -47382,7 +47466,7 @@ export type BoostPostData = {
|
|
|
47382
47466
|
*/
|
|
47383
47467
|
platformSpecificData?: (LinkedInAdsPlatformData | MetaAdsPlatformData);
|
|
47384
47468
|
/**
|
|
47385
|
-
* Meta only. Tracking specs (pixel, URL tags).
|
|
47469
|
+
* Meta only, except `pixelId`, which also picks the Reddit pixel of the new ad group (`promotedObject.pixelId` wins when both are sent). Tracking specs (pixel, URL tags).
|
|
47386
47470
|
*/
|
|
47387
47471
|
tracking?: {
|
|
47388
47472
|
pixelId?: string;
|
|
@@ -47425,6 +47509,8 @@ export type BoostPostData = {
|
|
|
47425
47509
|
* (`AdcreateCreatives.landing_page_url`); Spark Ads have no clickable
|
|
47426
47510
|
* destination without it.
|
|
47427
47511
|
*
|
|
47512
|
+
* **Reddit**: the ad's `click_url`, where a click on the promoted post lands.
|
|
47513
|
+
*
|
|
47428
47514
|
* Ignored on LinkedIn / Pinterest / X / Google, which infer the destination
|
|
47429
47515
|
* from the boosted post.
|
|
47430
47516
|
*
|
|
@@ -47500,7 +47586,7 @@ export type BoostPostData = {
|
|
|
47500
47586
|
minimumPurchaseCurrency?: string;
|
|
47501
47587
|
}>;
|
|
47502
47588
|
/**
|
|
47503
|
-
* Meta and
|
|
47589
|
+
* Meta, TikTok and Reddit. What the conversion ad set optimizes toward, so a boost
|
|
47504
47590
|
* of an existing organic post can run for a conversion instead of only
|
|
47505
47591
|
* engagement or traffic. Required when `goal` is `conversions` (Meta also
|
|
47506
47592
|
* `lead_conversion`); ignored on goals that do not optimize for a conversion.
|
|
@@ -47519,10 +47605,17 @@ export type BoostPostData = {
|
|
|
47519
47605
|
* `platformPostId` + `sparkAuthCode`: the pixel lives on the ad group and
|
|
47520
47606
|
* the Spark item on the creative.
|
|
47521
47607
|
*
|
|
47608
|
+
* Reddit: every ad group carries a pixel, whatever the goal. `pixelId` picks
|
|
47609
|
+
* it (default: the ad account's first pixel; 422 when the account has none).
|
|
47610
|
+
* `conversions` requires `customEventType` (PURCHASE, LEAD,
|
|
47611
|
+
* COMPLETE_REGISTRATION, SIGN_UP, ADD_TO_CART, PAGE_VISIT, VIEW_CONTENT or
|
|
47612
|
+
* CONTENT_VIEW), and the pixel must already have received that event (422
|
|
47613
|
+
* otherwise); `lead_generation` needs the pixel to have received Lead.
|
|
47614
|
+
*
|
|
47522
47615
|
*/
|
|
47523
47616
|
promotedObject?: {
|
|
47524
47617
|
/**
|
|
47525
|
-
* Meta Pixel id,
|
|
47618
|
+
* Meta Pixel id, TikTok Pixel (numeric id or the alphanumeric pixel code from Events Manager, resolved for you), or Reddit pixel id.
|
|
47526
47619
|
*/
|
|
47527
47620
|
pixelId?: string;
|
|
47528
47621
|
/**
|
|
@@ -47555,7 +47648,7 @@ export type BoostPostData = {
|
|
|
47555
47648
|
*/
|
|
47556
47649
|
dsaPayor?: string;
|
|
47557
47650
|
/**
|
|
47558
|
-
* Lead Gen form ID to attach to the boosted ad's creative. REQUIRED when `goal` is `lead_generation`. On Meta this is the leadgen_forms ID (create one via POST /v1/ads/lead-forms). On LinkedIn this is the adForm ID (create one via POST /v1/ads/lead-forms with a LinkedIn account); the creative's `leadgenCallToAction.destination` is set to `urn:li:adForm:{id}`. Ignored for other goals.
|
|
47651
|
+
* Lead Gen form ID to attach to the boosted ad's creative. REQUIRED when `goal` is `lead_generation`. On Meta this is the leadgen_forms ID (create one via POST /v1/ads/lead-forms). On LinkedIn this is the adForm ID (create one via POST /v1/ads/lead-forms with a LinkedIn account); the creative's `leadgenCallToAction.destination` is set to `urn:li:adForm:{id}`. Ignored for other goals. Reddit: rejected with 400 on every goal (Reddit retired its native lead forms).
|
|
47559
47652
|
*/
|
|
47560
47653
|
leadGenFormId?: string;
|
|
47561
47654
|
/**
|
|
@@ -47853,11 +47946,11 @@ export type CreateStandaloneAdData = {
|
|
|
47853
47946
|
adAccountId: string;
|
|
47854
47947
|
name: string;
|
|
47855
47948
|
/**
|
|
47856
|
-
* Meta
|
|
47949
|
+
* Meta and Reddit. Exact campaign name. Overrides the default `<name> - Campaign`.
|
|
47857
47950
|
*/
|
|
47858
47951
|
campaignName?: string;
|
|
47859
47952
|
/**
|
|
47860
|
-
* Meta
|
|
47953
|
+
* Meta and Reddit (the ad group). Exact ad set name. Overrides the default `<name> - Ad Set`. (For per-ad names on the multi-creative shape, set `name` on each `creatives[]` entry.)
|
|
47861
47954
|
*/
|
|
47862
47955
|
adSetName?: string;
|
|
47863
47956
|
/**
|
|
@@ -47889,6 +47982,12 @@ export type CreateStandaloneAdData = {
|
|
|
47889
47982
|
* **OpenAI Ads**
|
|
47890
47983
|
* - 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 400. Pick the event with `promotedObject.customEventType` (see AdPromotedObject); without it the most recently created optimizable event is used.
|
|
47891
47984
|
*
|
|
47985
|
+
* **Reddit Ads**
|
|
47986
|
+
* - `traffic` (CLICKS), `awareness` (BRAND_AWARENESS), `conversions`, `video_views` (VIDEO_VIEWABLE_IMPRESSIONS) and `lead_generation` (LEAD_GENERATION); any other goal returns 400.
|
|
47987
|
+
* - `conversions` requires `promotedObject.customEventType`; the pixel must already have received that event (see AdPromotedObject).
|
|
47988
|
+
* - `lead_generation` sends people to `linkUrl` and optimizes toward the pixel's Lead event, which the pixel must already have received. Reddit retired its native lead forms on September 30, 2026, so `leadGenFormId` returns 400.
|
|
47989
|
+
* - `video_views` needs a `video` (422 otherwise); `optimizationGoal` picks VIDEO_VIEW_6S (default) or VIDEO_VIEW_15S.
|
|
47990
|
+
*
|
|
47892
47991
|
*/
|
|
47893
47992
|
goal?: 'engagement' | 'traffic' | 'awareness' | 'video_views' | 'lead_generation' | 'lead_conversion' | 'conversions' | 'app_promotion' | 'catalog_sales' | 'page_likes' | 'page_visits' | 'job_applicants';
|
|
47894
47993
|
/**
|
|
@@ -47912,7 +48011,7 @@ export type CreateStandaloneAdData = {
|
|
|
47912
48011
|
interestsBehaviors?: boolean;
|
|
47913
48012
|
};
|
|
47914
48013
|
/**
|
|
47915
|
-
* Meta,
|
|
48014
|
+
* Meta, TikTok with goal video_views (ENGAGED_VIEW, the 6-second default, or ENGAGED_VIEW_FIFTEEN; both bill per view), or Reddit with goal video_views (VIDEO_VIEW_6S, the default, or VIDEO_VIEW_15S; other values return 400). Meta: Explicit ad-set `optimization_goal` (e.g. `LANDING_PAGE_VIEWS`, `LINK_CLICKS`, `REACH`, `IMPRESSIONS`, `OFFSITE_CONVERSIONS`, `THRUPLAY`, `LEAD_GENERATION`). Overrides the default derived from `goal` (e.g. `traffic` defaults to `LINK_CLICKS`). Forwarded verbatim to Meta, which validates compatibility with the campaign objective and rejects incompatible combinations.
|
|
47916
48015
|
*/
|
|
47917
48016
|
optimizationGoal?: string;
|
|
47918
48017
|
/**
|
|
@@ -47952,7 +48051,7 @@ export type CreateStandaloneAdData = {
|
|
|
47952
48051
|
*/
|
|
47953
48052
|
budgetAmount?: number;
|
|
47954
48053
|
/**
|
|
47955
|
-
* Required on legacy, multi-creative and Performance Max shapes. Inherited on attach. OpenAI Ads accepts both as the campaign's single spend cap. A lifetime cap can later switch to daily with PUT /v1/ads/campaigns/{campaignId}, but OpenAI never switches a daily cap back to lifetime (422). Automatic bidding (Maximize Results) needs a daily budget.
|
|
48054
|
+
* Required on legacy, multi-creative and Performance Max shapes. Inherited on attach. OpenAI Ads accepts both as the campaign's single spend cap. A lifetime cap can later switch to daily with PUT /v1/ads/campaigns/{campaignId}, but OpenAI never switches a daily cap back to lifetime (422). Automatic bidding (Maximize Results) needs a daily budget. Reddit Ads: the ad group's daily or lifetime spend goal; lifetime needs `endDate`.
|
|
47956
48055
|
*/
|
|
47957
48056
|
budgetType?: 'daily' | 'lifetime';
|
|
47958
48057
|
/**
|
|
@@ -48000,7 +48099,7 @@ export type CreateStandaloneAdData = {
|
|
|
48000
48099
|
*/
|
|
48001
48100
|
currency?: string;
|
|
48002
48101
|
/**
|
|
48003
|
-
* Required for Meta, Google, Pinterest, LinkedIn, and
|
|
48102
|
+
* Required for Meta, Google, Pinterest, LinkedIn, OpenAI Ads and Reddit Ads on legacy + attach shapes (skip for multi-creative; use `creatives[].headline`). Ignored for TikTok. On X, the website card title (needs imageUrl and linkUrl, max 70). Max: Meta=255, Google=30, Pinterest=100, LinkedIn=400, OpenAI=50 (min 3), Reddit=300 (the promoted post's title). 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.
|
|
48004
48103
|
*/
|
|
48005
48104
|
headline?: string;
|
|
48006
48105
|
/**
|
|
@@ -48008,7 +48107,7 @@ export type CreateStandaloneAdData = {
|
|
|
48008
48107
|
*/
|
|
48009
48108
|
longHeadline?: string;
|
|
48010
48109
|
/**
|
|
48011
|
-
* Required on legacy + attach shapes. For X 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.
|
|
48110
|
+
* Required on legacy + attach shapes. For X 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. On Reddit it is the promoted post's body: optional on image, video and carousel ads, required on text ads. Max: Google=90, Pinterest=500, OpenAI=100.
|
|
48012
48111
|
*/
|
|
48013
48112
|
body?: string;
|
|
48014
48113
|
/**
|
|
@@ -48045,19 +48144,19 @@ export type CreateStandaloneAdData = {
|
|
|
48045
48144
|
*/
|
|
48046
48145
|
descriptions?: Array<(string)>;
|
|
48047
48146
|
/**
|
|
48048
|
-
* Required on legacy + attach shapes for Meta. Honoured on TikTok (passes through to the Spark Ad creative's `call_to_action`) and on LinkedIn (the CTA button on the ad; defaults to LEARN_MORE when `linkUrl` is set). LinkedIn accepts: LEARN_MORE, SIGN_UP, DOWNLOAD, SUBSCRIBE, REGISTER, JOIN, ATTEND, REQUEST_DEMO, VIEW_QUOTE, APPLY, SEE_MORE, SHOP_NOW, BUY_NOW. Ignored by Google, Pinterest, and X.
|
|
48147
|
+
* Required on legacy + attach shapes for Meta. Honoured on TikTok (passes through to the Spark Ad creative's `call_to_action`) and on LinkedIn (the CTA button on the ad; defaults to LEARN_MORE when `linkUrl` is set). LinkedIn accepts: LEARN_MORE, SIGN_UP, DOWNLOAD, SUBSCRIBE, REGISTER, JOIN, ATTEND, REQUEST_DEMO, VIEW_QUOTE, APPLY, SEE_MORE, SHOP_NOW, BUY_NOW. Reddit (image, video and carousel ads) accepts: LEARN_MORE, SHOP_NOW, SIGN_UP, CONTACT_US, DOWNLOAD, GET_QUOTE, SUBSCRIBE, APPLY_NOW, BOOK_NOW, BUY_TICKETS, DONATE_NOW, GET_DIRECTIONS, GET_SHOWTIMES, LISTEN_NOW, ORDER_NOW, SEE_MENU, INSTALL_MOBILE_APP (other values return 400). Ignored by Google, Pinterest, and X.
|
|
48049
48148
|
*/
|
|
48050
48149
|
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';
|
|
48051
48150
|
/**
|
|
48052
|
-
* 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).
|
|
48151
|
+
* 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). Reddit: required on image and video ads (the post's destination and the ad's click URL), the fallback for carousel cards without their own, and refused with 400 on text ads.
|
|
48053
48152
|
*/
|
|
48054
48153
|
linkUrl?: string;
|
|
48055
48154
|
/**
|
|
48056
|
-
* Lead Gen form ID to attach to the ad's creative. REQUIRED when `goal` is `lead_generation`. Create one via POST /v1/ads/lead-forms. On Meta (facebook/instagram) this is the leadgen_forms ID; the ad set's promoted_object.page_id + LEAD_GENERATION optimization + destination_type ON_AD are derived automatically from the goal. On LinkedIn this is the adForm ID; the creative's `leadgenCallToAction.destination` is set to `urn:li:adForm:{id}` and the campaign objective is set to MAX_LEAD. Forms must be owned by the sponsoredAccount (not the organization) for the URN to resolve. Also required on every Meta ATTACH (`adSetId`) call that targets a lead ad set (the form attaches per-ad; Meta rejects a formless ad in a lead ad set). `placementAssets`, `dynamicCreative` and `carouselCards` (Meta multi-card Instant-Form lead ad; `linkUrl` and per-card `linkUrl` are optional and forwarded as real destinations when sent, falling back to Meta's lead-form link when omitted) ARE supported on Meta instant-form lead ads.
|
|
48155
|
+
* Lead Gen form ID to attach to the ad's creative. REQUIRED when `goal` is `lead_generation`. Create one via POST /v1/ads/lead-forms. On Meta (facebook/instagram) this is the leadgen_forms ID; the ad set's promoted_object.page_id + LEAD_GENERATION optimization + destination_type ON_AD are derived automatically from the goal. On LinkedIn this is the adForm ID; the creative's `leadgenCallToAction.destination` is set to `urn:li:adForm:{id}` and the campaign objective is set to MAX_LEAD. Forms must be owned by the sponsoredAccount (not the organization) for the URN to resolve. Also required on every Meta ATTACH (`adSetId`) call that targets a lead ad set (the form attaches per-ad; Meta rejects a formless ad in a lead ad set). `placementAssets`, `dynamicCreative` and `carouselCards` (Meta multi-card Instant-Form lead ad; `linkUrl` and per-card `linkUrl` are optional and forwarded as real destinations when sent, falling back to Meta's lead-form link when omitted) ARE supported on Meta instant-form lead ads. Reddit: rejected with 400 on every goal (Reddit retired its native lead forms).
|
|
48057
48156
|
*/
|
|
48058
48157
|
leadGenFormId?: string;
|
|
48059
48158
|
/**
|
|
48060
|
-
* 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). On X, imageUrl + headline + linkUrl together build a website card (image, title and destination under the post; the URL is not added to the post text); sending only some of them is a 400. description, video and callToAction are rejected with 400 on X (promote a post that carries a video with POST /v1/ads/boost). 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).
|
|
48159
|
+
* 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). On X, imageUrl + headline + linkUrl together build a website card (image, title and destination under the post; the URL is not added to the post text); sending only some of them is a 400. description, video and callToAction are rejected with 400 on X (promote a post that carries a video with POST /v1/ads/boost). 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). Reddit: builds an image ad (requires `linkUrl`); on a Reddit video ad it is the fallback for `video.thumbnailUrl`.
|
|
48061
48160
|
*/
|
|
48062
48161
|
imageUrl?: string;
|
|
48063
48162
|
/**
|
|
@@ -48074,7 +48173,7 @@ export type CreateStandaloneAdData = {
|
|
|
48074
48173
|
square?: string;
|
|
48075
48174
|
};
|
|
48076
48175
|
/**
|
|
48077
|
-
* Meta (facebook, instagram) and
|
|
48176
|
+
* Meta (facebook, instagram), LinkedIn and Reddit. On Reddit `url`, `linkUrl` and a thumbnail (`thumbnailUrl`, or `imageUrl`) are all required. Creates a single VIDEO ad. Mutually exclusive with `imageUrl`. Supply `url` to upload a file, or `id` to reuse a video already on the ad account (list them with GET /v1/ads/videos). Works on the single-ad and attach (`adSetId`) shapes; for Meta multi-creative, set `video` per entry inside `creatives[]` instead. For LinkedIn the video is uploaded to LinkedIn under the authoring Company Page (see `organizationId`) and the campaign format is set to SINGLE_VIDEO; LinkedIn ignores `thumbnailUrl` (it auto-generates the poster frame). Supply MP4 H.264/AAC, 3s-30min, 75KB-500MB.
|
|
48078
48177
|
*/
|
|
48079
48178
|
video?: {
|
|
48080
48179
|
/**
|
|
@@ -48251,6 +48350,8 @@ export type CreateStandaloneAdData = {
|
|
|
48251
48350
|
* UNDER the flat inline targeting fields below: `savedTargetingId` < `targeting` <
|
|
48252
48351
|
* flat fields (a flat field present on the body replaces the nested value entirely).
|
|
48253
48352
|
* Both forms are equivalent; use whichever your integration already builds.
|
|
48353
|
+
* Reddit-only targeting (`communities`, `excludedCommunities`,
|
|
48354
|
+
* `conversationKeywords`, `excludedConversationKeywords`) is sent here.
|
|
48254
48355
|
*
|
|
48255
48356
|
*/
|
|
48256
48357
|
targeting?: (TargetingSpec);
|
|
@@ -48461,14 +48562,14 @@ export type CreateStandaloneAdData = {
|
|
|
48461
48562
|
[key: string]: (number);
|
|
48462
48563
|
};
|
|
48463
48564
|
/**
|
|
48464
|
-
* Required for lifetime budgets. Read like `startDate` (account timezone on Meta, TikTok, X, Pinterest and
|
|
48565
|
+
* Required for lifetime budgets. Read like `startDate` (account timezone on Meta, TikTok, X, Pinterest, OpenAI and Reddit; whole account-local days on Google; UTC on LinkedIn), and a date-only end runs to 23:59:59 local.
|
|
48465
48566
|
*/
|
|
48466
48567
|
endDate?: string;
|
|
48467
48568
|
/**
|
|
48468
48569
|
* Ad-set start time (ISO 8601, e.g. "2026-06-10T09:00:00Z"), mapped to the ad set's
|
|
48469
48570
|
* start (Meta `start_time`, TikTok ad group `schedule_start_time`, LinkedIn / Pinterest / X
|
|
48470
48571
|
* / Google campaign start). When omitted the ad starts delivering immediately. For lifetime
|
|
48471
|
-
* budgets Meta also requires `endDate`. On Meta, TikTok, X, Pinterest and
|
|
48572
|
+
* budgets Meta also requires `endDate`. On Meta, TikTok, X, Pinterest, OpenAI and Reddit a value
|
|
48472
48573
|
* without an offset (`YYYY-MM-DD`, `YYYY-MM-DD HH:MM:SS` or `YYYY-MM-DDTHH:MM:SS`) is read
|
|
48473
48574
|
* in the ad account timezone (Meta itself would read it as UTC). Google runs whole days in
|
|
48474
48575
|
* the customer account timezone and takes the value's calendar date as written. LinkedIn
|
|
@@ -48545,6 +48646,11 @@ export type CreateStandaloneAdData = {
|
|
|
48545
48646
|
adFormat?: 'SINGLE_IMAGE' | 'CAROUSEL_IMAGE' | 'SINGLE_VIDEO';
|
|
48546
48647
|
};
|
|
48547
48648
|
/**
|
|
48649
|
+
* Reddit: builds a carousel ad, each card with its image, destination (card `linkUrl`,
|
|
48650
|
+
* falling back to the top-level `linkUrl`, 400 when neither is set), call to action
|
|
48651
|
+
* (card `callToAction`, falling back to the top-level one) and caption (card
|
|
48652
|
+
* `headline`, else `description`). `headline` is still required.
|
|
48653
|
+
*
|
|
48548
48654
|
* Meta only. Hand-built carousel: 2-10 authored cards in DETERMINISTIC order, mapped to
|
|
48549
48655
|
* the creative's `link_data.child_attachments`. Unlike `dynamicCreative`,
|
|
48550
48656
|
* you control the card order and per-card copy/link. Requires top-level `body`
|
|
@@ -48790,7 +48896,7 @@ export type CreateStandaloneAdData = {
|
|
|
48790
48896
|
windowDays: 1 | 7 | 28;
|
|
48791
48897
|
}>;
|
|
48792
48898
|
/**
|
|
48793
|
-
* Restrict the audience by gender. 'male' targets men only, 'female' targets women only, 'all' (default) targets everyone. Applied on Meta, TikTok and
|
|
48899
|
+
* Restrict the audience by gender. 'male' targets men only, 'female' targets women only, 'all' (default) targets everyone. Applied on Meta, TikTok, Pinterest and Reddit. Ignored on Google, LinkedIn and X.
|
|
48794
48900
|
*/
|
|
48795
48901
|
gender?: 'all' | 'male' | 'female';
|
|
48796
48902
|
/**
|
|
@@ -48800,6 +48906,8 @@ export type CreateStandaloneAdData = {
|
|
|
48800
48906
|
*
|
|
48801
48907
|
* OpenAI Ads: sent via this flat field, the only channel it supports (`platformSpecificData` is Meta/LinkedIn-only and returns 400 for OpenAI). `LOWEST_COST_WITH_BID_CAP` or `COST_CAP` with `bidAmount` sets a fixed bid (`fixed_bid`, the CPA bid on `conversions`). Omitted or `LOWEST_COST_WITHOUT_CAP` bids automatically with OpenAI's Maximize Results (`maximize_clicks` for `traffic`, `maximize_conversions` for `conversions`), which needs `budgetType: daily`; on a lifetime budget or the `awareness` goal it returns 400.
|
|
48802
48908
|
*
|
|
48909
|
+
* Reddit Ads: sent via this flat field and applied to the new ad group. LOWEST_COST_WITHOUT_CAP or omitted = automatic bidding (BIDLESS), LOWEST_COST_WITH_BID_CAP + `bidAmount` = MANUAL_BIDDING with that bid, COST_CAP + `bidAmount` = MAXIMIZE_VOLUME with that cap. Any other strategy returns 422 before anything is created.
|
|
48910
|
+
*
|
|
48803
48911
|
* Google (not deprecated there, this shared flat field is Google's only shape): applied to the campaign this call creates. On Google: LOWEST_COST_WITHOUT_CAP = Maximize Conversions, COST_CAP + bidAmount = Target CPA, LOWEST_COST_WITH_MIN_ROAS + roasAverageFloor = Target ROAS, LOWEST_COST_WITH_BID_CAP + bidAmount = Maximize Clicks with a CPC ceiling; portfolioBidStrategyId attaches a portfolio strategy instead. Omitted, the campaign falls back to a goal-based default.
|
|
48804
48912
|
*
|
|
48805
48913
|
* @deprecated
|
|
@@ -49730,7 +49838,7 @@ export type SearchAdTargetingData = {
|
|
|
49730
49838
|
/**
|
|
49731
49839
|
* What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities (`behavior` on Meta, TikTok and LinkedIn), `interestKeyword`/`hashtag` resolve TikTok additional interests and hashtags (TikTok only), `income` resolves the normalized income tiers, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics, `industry`/`jobFunction`/`seniority`/`companySize` resolve LinkedIn B2B facets (LinkedIn only). Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
|
|
49732
49840
|
*/
|
|
49733
|
-
dimension?: 'geo' | 'interest' | 'interestKeyword' | 'behavior' | 'hashtag' | 'income' | 'language' | 'workPosition' | 'workEmployer' | 'workIndustry' | 'industry' | 'jobFunction' | 'seniority' | 'companySize';
|
|
49841
|
+
dimension?: 'geo' | 'interest' | 'interestKeyword' | 'behavior' | 'hashtag' | 'income' | 'language' | 'workPosition' | 'workEmployer' | 'workIndustry' | 'industry' | 'jobFunction' | 'seniority' | 'companySize' | 'community' | 'conversationKeyword';
|
|
49734
49842
|
/**
|
|
49735
49843
|
* Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`.
|
|
49736
49844
|
*/
|
|
@@ -49757,7 +49865,7 @@ export type SearchAdTargetingResponse = ({
|
|
|
49757
49865
|
*/
|
|
49758
49866
|
name: string;
|
|
49759
49867
|
/**
|
|
49760
|
-
* What the result is. Equals the requested dimension (interest, interestKeyword, behavior, hashtag, income, language, workPosition, workEmployer, workIndustry, industry, jobFunction, seniority, companySize), or the location level for geo (country, region, city, zip, metro, ...).
|
|
49868
|
+
* What the result is. Equals the requested dimension (interest, interestKeyword, behavior, hashtag, income, language, workPosition, workEmployer, workIndustry, industry, jobFunction, seniority, companySize, community, conversationKeyword), or the location level for geo (country, region, city, zip, metro, ...).
|
|
49761
49869
|
*/
|
|
49762
49870
|
type: string;
|
|
49763
49871
|
/**
|
|
@@ -49777,7 +49885,7 @@ export type SearchAdTargetingResponse = ({
|
|
|
49777
49885
|
*/
|
|
49778
49886
|
countryCode?: string;
|
|
49779
49887
|
/**
|
|
49780
|
-
*
|
|
49888
|
+
* On Reddit `community` results: Reddit's own subreddit id (the `id` is the name). Otherwise only on `country` results: the platform's own id for the country, which `id` replaced with the ISO code (TikTok's native location_id, a GeoNames id such as 2635167 for GB; Meta's country key; Google's geo target constant id; X's targeting value; LinkedIn's geo URN). Use it to match a country against what the platform reports back, e.g. `location_ids` in a TikTok `nativeSettings` read.
|
|
49781
49889
|
*/
|
|
49782
49890
|
platformId?: string;
|
|
49783
49891
|
}>;
|
|
@@ -51137,7 +51245,7 @@ export type GetConversionsQualityError = (ErrorResponse | unknown);
|
|
|
51137
51245
|
export type SendConversionsData = {
|
|
51138
51246
|
body: {
|
|
51139
51247
|
/**
|
|
51140
|
-
* SocialAccount ID (metaads, googleads, linkedinads, tiktokads, openaiads, or
|
|
51248
|
+
* SocialAccount ID (metaads, googleads, linkedinads, tiktokads, openaiads, pinterestads, or redditads).
|
|
51141
51249
|
*/
|
|
51142
51250
|
accountId: string;
|
|
51143
51251
|
/**
|
|
@@ -51145,13 +51253,14 @@ export type SendConversionsData = {
|
|
|
51145
51253
|
* ID. For Google, the conversion action resource name. For
|
|
51146
51254
|
* LinkedIn, the conversion rule ID or full
|
|
51147
51255
|
* `urn:lla:llaPartnerConversion:{id}` URN. For OpenAI Ads, the
|
|
51148
|
-
* pixel wire id. For Pinterest, the numeric ad account id.
|
|
51256
|
+
* pixel wire id. For Pinterest, the numeric ad account id. For
|
|
51257
|
+
* Reddit, the pixel id (`a2_...`).
|
|
51149
51258
|
*
|
|
51150
51259
|
*/
|
|
51151
51260
|
destinationId: string;
|
|
51152
51261
|
events: Array<ConversionEvent>;
|
|
51153
51262
|
/**
|
|
51154
|
-
* Meta `test_event_code` passthrough. On Pinterest any value sends the batch with `test=true` (validated, not recorded). Ignored by Google, LinkedIn, and OpenAI Ads.
|
|
51263
|
+
* Meta `test_event_code` passthrough. On Pinterest any value sends the batch with `test=true` (validated, not recorded). On Reddit, sent as `test_id` so the events show in the pixel's test view. Ignored by Google, LinkedIn, and OpenAI Ads.
|
|
51155
51264
|
*/
|
|
51156
51265
|
testCode?: string;
|
|
51157
51266
|
/**
|
|
@@ -51161,7 +51270,8 @@ export type SendConversionsData = {
|
|
|
51161
51270
|
* the batch (data_processing_options ["LDU"] with
|
|
51162
51271
|
* geolocation, country 0 / state 0); GRANTED or absent
|
|
51163
51272
|
* consent sends events with Meta's default processing.
|
|
51164
|
-
*
|
|
51273
|
+
* On Reddit, `adUserData: DENIED` drops every user field
|
|
51274
|
+
* from the events. Ignored by LinkedIn.
|
|
51165
51275
|
*
|
|
51166
51276
|
*/
|
|
51167
51277
|
consent?: {
|
|
@@ -51172,7 +51282,7 @@ export type SendConversionsData = {
|
|
|
51172
51282
|
};
|
|
51173
51283
|
|
|
51174
51284
|
export type SendConversionsResponse = ({
|
|
51175
|
-
platform?: 'metaads' | 'googleads' | 'linkedinads' | 'tiktokads' | 'openaiads' | 'pinterestads';
|
|
51285
|
+
platform?: 'metaads' | 'googleads' | 'linkedinads' | 'tiktokads' | 'openaiads' | 'pinterestads' | 'redditads';
|
|
51176
51286
|
/**
|
|
51177
51287
|
* Events accepted by the platform.
|
|
51178
51288
|
*/
|
|
@@ -51196,8 +51306,8 @@ export type SendConversionsResponse = ({
|
|
|
51196
51306
|
/**
|
|
51197
51307
|
* Platform trace ID for debugging. fbtrace_id for Meta,
|
|
51198
51308
|
* requestId for Google. Absent for LinkedIn (LinkedIn's
|
|
51199
|
-
* conversionEvents endpoint does not surface a trace ID)
|
|
51200
|
-
*
|
|
51309
|
+
* conversionEvents endpoint does not surface a trace ID),
|
|
51310
|
+
* OpenAI Ads and Reddit (no trace ID surfaced).
|
|
51201
51311
|
*
|
|
51202
51312
|
*/
|
|
51203
51313
|
traceId?: string;
|
|
@@ -51679,20 +51789,20 @@ export type UpdateCampaignConversionGoalsError = (ErrorResponse | unknown);
|
|
|
51679
51789
|
export type ListConversionDestinationsData = {
|
|
51680
51790
|
path: {
|
|
51681
51791
|
/**
|
|
51682
|
-
* SocialAccount ID (metaads, googleads, linkedinads, tiktokads, openaiads, or
|
|
51792
|
+
* SocialAccount ID (metaads, googleads, linkedinads, tiktokads, openaiads, pinterestads, or redditads).
|
|
51683
51793
|
*/
|
|
51684
51794
|
accountId: string;
|
|
51685
51795
|
};
|
|
51686
51796
|
};
|
|
51687
51797
|
|
|
51688
51798
|
export type ListConversionDestinationsResponse = ({
|
|
51689
|
-
platform?: 'metaads' | 'googleads' | 'linkedinads' | 'tiktokads' | 'openaiads' | 'pinterestads';
|
|
51799
|
+
platform?: 'metaads' | 'googleads' | 'linkedinads' | 'tiktokads' | 'openaiads' | 'pinterestads' | 'redditads';
|
|
51690
51800
|
destinations?: Array<{
|
|
51691
51801
|
/**
|
|
51692
51802
|
* Destination identifier. Meta: pixel ID. Google:
|
|
51693
51803
|
* conversion action resource name. LinkedIn:
|
|
51694
51804
|
* numeric conversion rule ID. OpenAI Ads: pixel wire
|
|
51695
|
-
* id.
|
|
51805
|
+
* id. Reddit: pixel id (`a2_...`).
|
|
51696
51806
|
*
|
|
51697
51807
|
*/
|
|
51698
51808
|
id?: string;
|
|
@@ -51707,8 +51817,8 @@ export type ListConversionDestinationsResponse = ({
|
|
|
51707
51817
|
status?: 'active' | 'inactive';
|
|
51708
51818
|
/**
|
|
51709
51819
|
* Set by adapters whose destinations are scoped to a
|
|
51710
|
-
* specific ad account (LinkedIn).
|
|
51711
|
-
* subsequent CRUD calls.
|
|
51820
|
+
* specific ad account (LinkedIn, Reddit). On LinkedIn,
|
|
51821
|
+
* pass it back on subsequent CRUD calls.
|
|
51712
51822
|
*
|
|
51713
51823
|
*/
|
|
51714
51824
|
adAccountId?: string;
|