import {z} from 'zod' export type GetApiV1TargetingTemplatesTargetingTemplateIdPromotionOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const namingTemplateElementValue = z.object({elementId: z.string().optional(), value: z.string().optional()}); export const adTarget = z.object({id: z.string().optional(), name: z.string().optional()}); export const googleKeyword = z.object({name: z.string().optional(), competition: z.enum(["LOW", "MEDIUM", "HIGH", "UNKNOWN"]).optional(), averageMonghtlySearchVolume: z.number().optional(), averageCpc: z.number().optional(), cpc: z.number().optional(), cpm: z.number().optional(), link: z.string().optional(), status: z.enum(["IS_RUNNING", "STOP", "IN_REVIEW", "REMOVED", "COMPLETED", "DISAPPROVED", "IS_STOPPING"]).optional(), bid: z.number().optional(), finalUrl: z.string().optional(), averageImpressionsPerMonth: z.number().optional()}); export const customParameter = z.object({key: z.string().optional(), value: z.string().optional()}); export const retargetingList = z.object({googleCustomerId: z.string().optional(), facebookAccountId: z.string().optional(), channel: z.enum(["FACEBOOK", "INSTAGRAM", "GOOGLE_ADWORDS", "GOOGLE_DISPLAY_NETWORK", "GOOGLE_ANALYTICS", "YOUTUBE", "XING", "LINKED_IN", "TWITTER", "GOOGLE_MY_BUSINESS", "TIKTOK", "BITLY", "THREADS", "BLUESKY", "WHATSAPP", "PINTEREST", "CANVA", "HUBSPOT", "SALESFORCE", "BREVO", "SISTRIX", "NEWS", "BEEKEEPER", "TEADS", "MASTODON", "SNAPCHAT", "PIXXIO", "YEXT", "CANTO", "WEBSITE", "PLAUSIBLE", "MATOMO"]).optional(), name: z.string().optional(), status: z.enum(["OPEN", "NOT_ENOUGH_USERS", "CLOSED"]).optional(), userId: z.string().optional(), googleRetargetingListId: z.string().optional(), facebookCustomAudienceId: z.string().optional(), linkedInAudienceId: z.string().optional(), twitterAudienceId: z.string().optional(), tikTokAudienceId: z.string().optional(), pinterestAudienceId: z.string().optional(), urlPath: z.string().optional(), engagementSource: z.enum(["FACEBOOK", "INSTAGRAM", "GOOGLE_ADWORDS", "GOOGLE_DISPLAY_NETWORK", "GOOGLE_ANALYTICS", "YOUTUBE", "XING", "LINKED_IN", "TWITTER", "GOOGLE_MY_BUSINESS", "TIKTOK", "BITLY", "THREADS", "BLUESKY", "WHATSAPP", "PINTEREST", "CANVA", "HUBSPOT", "SALESFORCE", "BREVO", "SISTRIX", "NEWS", "BEEKEEPER", "TEADS", "MASTODON", "SNAPCHAT", "PIXXIO", "YEXT", "CANTO", "WEBSITE", "PLAUSIBLE", "MATOMO"]).optional(), engagementType: z.enum(["ENGAGED", "FOLLOWER"]).optional(), description: z.string().optional(), audienceSize: z.number().int().optional(), retentionDays: z.number().int().optional()}); export const promotionGoogleUserList = z.object({retargetingList: retargetingList.optional(), bidModifier: z.number().optional(), bidModifierType: z.enum(["INCREASE", "DECREASE"]).optional()}); export const promotionFacebookCustomAudience = z.object({retargetingList: retargetingList.optional()}); export const promotionLinkedInMatchedAudience = z.object({retargetingList: retargetingList.optional()}); export const promotionTwitterMatchedAudience = z.object({retargetingList: retargetingList.optional()}); export const promotionTikTokAudience = z.object({retargetingList: retargetingList.optional()}); export const promotionPinterestAudience = z.object({retargetingList: retargetingList.optional()}); export const retargeting = z.object({googleUserLists: z.array(promotionGoogleUserList).optional(), facebookCustomAudiences: z.array(promotionFacebookCustomAudience).optional(), linkedInMatchedAudiences: z.array(promotionLinkedInMatchedAudience).optional(), twitterCustomAudiences: z.array(promotionTwitterMatchedAudience).optional(), tikTokAudiences: z.array(promotionTikTokAudience).optional(), pinterestAudiences: z.array(promotionPinterestAudience).optional()}); export const googleAdGroupExclusion = z.object({googleKeywords: z.array(googleKeyword).optional(), retargeting: retargeting.optional()}); export const devices = z.object({showOnMobile: z.boolean().optional(), showOnTablet: z.boolean().optional(), showOnDesktop: z.boolean().optional(), mobileBidModifier: z.number().optional(), mobileBidModifierType: z.enum(["INCREASE", "DECREASE"]).optional(), tabletBidModifier: z.number().optional(), tabletBidModifierType: z.enum(["INCREASE", "DECREASE"]).optional(), desktopBidModifier: z.number().optional(), desktopBidModifierType: z.enum(["INCREASE", "DECREASE"]).optional()}); export const sitelinkExtension = z.object({feedId: z.number().int().optional(), feedItemId: z.number().int().optional(), assetId: z.number().int().optional(), adwordsCustomerId: z.string().optional(), extensionStatus: z.enum(["ACCOUNT", "CAMPAIGN", "ADGROUP", "NONE"]).optional(), extensionRunStatus: z.enum(["ADDED_CAMPAIGN", "ADDED_ADGROUP", "ADDED_ACCOUNT", "IS_CAMPAIGN_LINKED", "IS_ADGROUP_LINKED", "UNLINKING", "UNLINKED"]).optional(), sitelinkName: z.string().optional(), sitelinkUrl: z.string().optional(), sitelinkDescription1: z.string().optional(), sitelinkDescription2: z.string().optional(), finalUrls: z.array(z.string()).optional(), finalMobileUrls: z.array(z.string()).optional(), sitelinkTrackingUrl: z.string().optional()}); export const calloutExtension = z.object({feedId: z.number().int().optional(), feedItemId: z.number().int().optional(), assetId: z.number().int().optional(), adwordsCustomerId: z.string().optional(), extensionStatus: z.enum(["ACCOUNT", "CAMPAIGN", "ADGROUP", "NONE"]).optional(), extensionRunStatus: z.enum(["ADDED_CAMPAIGN", "ADDED_ADGROUP", "ADDED_ACCOUNT", "IS_CAMPAIGN_LINKED", "IS_ADGROUP_LINKED", "UNLINKING", "UNLINKED"]).optional(), calloutText: z.string().optional()}); export const callExtension = z.object({feedId: z.number().int().optional(), feedItemId: z.number().int().optional(), assetId: z.number().int().optional(), adwordsCustomerId: z.string().optional(), extensionStatus: z.enum(["ACCOUNT", "CAMPAIGN", "ADGROUP", "NONE"]).optional(), extensionRunStatus: z.enum(["ADDED_CAMPAIGN", "ADDED_ADGROUP", "ADDED_ACCOUNT", "IS_CAMPAIGN_LINKED", "IS_ADGROUP_LINKED", "UNLINKING", "UNLINKED"]).optional(), phoneNumber: z.string().optional(), country: z.string().optional()}); export const extension = z.object({sitelinkExtensions: z.array(sitelinkExtension).optional(), calloutExtensions: z.array(calloutExtension).optional(), callExtensions: z.array(callExtension).optional()}); export const googleAdGroup = z.object({id: z.string().optional(), name: z.string().optional(), type: z.enum(["STANDARD", "DYNAMIC"]).optional(), googleKeywords: z.array(googleKeyword).optional(), status: z.enum(["IS_RUNNING", "STOP", "IN_REVIEW", "REMOVED", "COMPLETED", "DISAPPROVED", "IS_STOPPING"]).optional(), bid: z.number().optional(), targetCpa: z.number().optional(), targetReturnOnAdSpendPercentage: z.number().optional(), trackingUrlTemplate: z.string().optional(), customParameters: z.array(customParameter).optional(), adGroupExclusion: googleAdGroupExclusion.optional(), retargeting: retargeting.optional(), devices: devices.optional(), extension: extension.optional(), adRotationMode: z.enum(["OPTIMIZE", "CONVERSION_OPTIMIZE", "ROTATE", "ROTATE_INDEFINITELY"]).optional(), createdFromTargetingTemplateId: z.string().optional()}); export const imageTag = z.object({x: z.number().optional(), y: z.number().optional(), name: z.string().optional()}); export const productTag = z.object({x: z.number().optional(), y: z.number().optional(), productId: z.string().optional(), productName: z.string().optional()}); export const image = z.object({thumbnailUrl: z.string().optional(), url: z.string().optional(), fileName: z.string().optional(), croppedUrl: z.string().optional(), croppedImageSize: z.number().int().optional(), croppedWidth: z.number().int().optional(), croppedHeight: z.number().int().optional(), facebookImageUrl: z.string().optional(), tikTokImageId: z.string().optional(), tags: z.array(imageTag).optional(), productTags: z.array(productTag).optional(), link: z.string().optional(), linkTitle: z.string().optional(), linkDescription: z.string().optional(), order: z.number().int().optional(), altText: z.string().optional(), mediaAssetId: z.string().optional()}); export const videoTag = z.object({name: z.string().optional()}); export const video = z.object({url: z.string().optional(), originalUrl: z.string().optional(), fileName: z.string().optional(), size: z.number().int().optional(), originalSize: z.number().int().optional(), fileExtension: z.string().optional(), facebookVideoId: z.string().optional(), tikTokVideoId: z.string().optional(), width: z.number().int().optional(), height: z.number().int().optional(), duration: z.number().optional(), hasAudio: z.boolean().optional(), thumbnailImage: image.optional(), thumbnailTimePosition: z.number().optional(), cutStartTimePosition: z.number().optional(), cutEndTimePosition: z.number().optional(), cutUrl: z.string().optional(), compressedVideoUrl: z.string().optional(), justOptimized: z.boolean().optional(), mediaStatus: z.enum(["ALL", "CREATED", "IN_PROGRESS", "NEEDS_REVIEW", "APPROVED", "CHECK_FEEDBACK", "READY", "PROCESSING", "DELETED"]).optional(), mediaVideoId: z.string().optional(), title: z.string().optional(), order: z.number().int().optional(), productTags: z.array(productTag).optional(), tags: z.array(videoTag).optional(), mediaAssetId: z.string().optional(), bitrateBps: z.number().int().optional(), metadataStatus: z.enum(["PENDING", "FINISHED", "FAILED"]).optional(), videoCodec: z.string().optional(), audioCodec: z.string().optional()}); export const utmTracking = z.object({utmSource: z.string().optional(), utmMedium: z.string().optional(), utmCampaign: z.string().optional(), utmTerm: z.string().optional(), utmContent: z.string().optional(), customParams: z.string().optional()}); export const carouselSlide = z.object({descriptions: z.array(z.string()).optional(), links: z.array(z.string()).optional(), titles: z.array(z.string()).optional(), images: z.array(image).optional(), videos: z.array(video).optional(), callToActions: z.array(z.enum(["APPLY_NOW", "BOOK_NOW", "CONTACT_US", "DOWNLOAD", "MORE_OF_THIS", "SHOP_NOW", "ORDER_NOW", "REGISTER", "WATCH_MORE", "NO_BUTTON", "CALL_NOW", "SUBSCRIBE", "GET_QUOTE", "GET_OFFER", "LEARN_MORE", "SIGN_UP", "JOIN", "ATTEND", "REQUEST_DEMO", "LISTEN_NOW", "GET_SHOWTIMES", "UNLOCK_FULL_DOCUMENT", "BUY_NOW", "VISIT_SITE", "REGISTER_NOW", "FIND_A_DEALER", "ADD_TO_CART", "WATCH_NOW", "READ_MORE", "BUY_TICKETS", "DONATE_NOW", "EXPLORE_MORE", "FIND_A_LOCATION", "FIND_RETAILERS", "GET_DEAL", "GET_RECIPE", "ON_SALE", "PLAY_GAME", "TRY_IT"])).optional(), displayLinks: z.array(z.string()).optional(), utmTracking: utmTracking.optional()}); export const adChannel = z.object({channel: z.enum(["FACEBOOK", "INSTAGRAM", "GOOGLE_ADWORDS", "GOOGLE_DISPLAY_NETWORK", "GOOGLE_ANALYTICS", "YOUTUBE", "XING", "LINKED_IN", "TWITTER", "GOOGLE_MY_BUSINESS", "TIKTOK", "BITLY", "THREADS", "BLUESKY", "WHATSAPP", "PINTEREST", "CANVA", "HUBSPOT", "SALESFORCE", "BREVO", "SISTRIX", "NEWS", "BEEKEEPER", "TEADS", "MASTODON", "SNAPCHAT", "PIXXIO", "YEXT", "CANTO", "WEBSITE", "PLAUSIBLE", "MATOMO"]).optional(), placement: z.enum(["GOOGLE_SEARCH_NETWORK", "FACEBOOK_TIMELINE", "GOOGLE_DISPLAY_NETWORK", "FACEBOOK_AUDIENCE_NETWORK", "YOUTUBE", "INSTAGRAM_TIMELINE", "GOOGLE_SHOPPING", "FACEBOOK_MESSENGER", "LINKEDIN_CONTENT", "LINKEDIN_TEXT", "LINKEDIN_INMAIL", "LINKEDIN_DYNAMIC", "FACEBOOK_STORIES", "FACEBOOK_INSTANT_ARTICLES", "FACEBOOK_RIGHT_HAND_COLUMN", "FACEBOOK_MARKETPLACE", "INSTAGRAM_STORIES", "FACEBOOK_MESSENGER_STORIES", "FACEBOOK_SEARCH", "FACEBOOK_INSTREAM_VIDEO", "FACEBOOK_REELS", "INSTAGRAM_EXPLORE_HOME", "INSTAGRAM_PROFILE_FEED", "INSTAGRAM_PROFILE_REELS", "LINKEDIN_AUDIENCE_NETWORK", "TWITTER_ALL", "TWITTER_PUBLISHER_NETWORK", "TWITTER_SEARCH", "TWITTER_TIMELINE", "TWITTER_PROFILE", "GOOGLE_MY_BUSINESS", "FACEBOOK_UNKNOWN", "FACEBOOK_VIDEO_FEED", "INSTAGRAM_REELS", "INSTAGRAM_SHOP", "INSTAGRAM_EXPLORE", "TIKTOK_FEED", "META_AUTOMATIC", "THREADS_FEED", "BLUESKY_FEED", "PINTEREST_FEED"]).optional(), selected: z.boolean().optional()}); export const thirdPartyPage = z.object({pictureUrl: z.string().optional(), name: z.string().optional(), id: z.string().optional(), search: z.string().optional(), userName: z.string().optional(), server: z.string().optional()}); export const board = z.object({id: z.string().optional(), name: z.string().optional()}); export const pinnedTextAsset = z.object({textAssetIndex: z.number().int().optional(), position: z.enum(["NOT_PINNED", "POSITION_1", "POSITION_2", "POSITION_3"]).optional()}); export const displayLinkPath = z.object({path1: z.string().optional(), path2: z.string().optional()}); export const youTubeVideo = z.object({url: z.string().optional(), id: z.string().optional()}); export const facebookInterest: z.ZodType = z.object({id: z.string().optional(), type: z.string().optional(), name: z.string().optional(), audience_size: z.number().int().optional(), children: z.array(z.lazy(() => facebookInterest)).optional(), path: z.array(z.string()).optional()}); export const facebookAdGroup = z.object({id: z.string().optional(), name: z.string().optional(), facebookInterests: z.array(facebookInterest).optional(), status: z.enum(["IS_RUNNING", "STOP", "IN_REVIEW", "REMOVED", "COMPLETED", "DISAPPROVED", "IS_STOPPING"]).optional(), bid: z.number().optional(), retargeting: retargeting.optional(), devices: devices.optional()}); export const facebookInstantExperienceThumbnail = z.object({elementId: z.string().optional(), photoId: z.string().optional(), height: z.number().int().optional(), width: z.number().int().optional(), cropTopLeft: z.array(z.number().int()).optional(), cropBottomRight: z.array(z.number().int()).optional()}); export const document = z.object({url: z.string().optional(), fileType: z.string().optional(), title: z.string().optional(), size: z.number().int().optional(), nbrOfPreviewPages: z.number().int().optional(), pages: z.array(image).optional()}); export const ad = z.object({adId: z.string().optional(), name: z.string().optional(), namingTemplateElementValues: z.array(namingTemplateElementValue).optional(), target: adTarget.optional(), googleAdGroups: z.array(googleAdGroup).optional(), businessName: z.string().optional(), longTitle: z.string().optional(), adTextType: z.enum(["TEXT_AD", "DYNAMIC_TEXT_AD", "CLICK_TO_CALL_AD", "SHOPPING_AD", "SHOPPING_SHOWCASE_AD"]).optional(), textType: z.enum(["SHORT", "LONG"]).optional(), slides: z.array(carouselSlide).optional(), channels: z.array(adChannel).optional(), facebookPage: thirdPartyPage.optional(), twitterUser: thirdPartyPage.optional(), pinterestBoard: board.optional(), utmTracking: utmTracking.optional(), titles: z.array(z.string()).optional(), title2s: z.array(z.string()).optional(), title3s: z.array(z.string()).optional(), descriptions: z.array(z.string()).optional(), description2s: z.array(z.string()).optional(), pinnedTitles: z.array(pinnedTextAsset).optional(), pinnedDescriptions: z.array(pinnedTextAsset).optional(), dynamicAdDescriptions1: z.array(z.string()).optional(), dynamicAdDescriptions2: z.array(z.string()).optional(), phoneNumber: z.string().optional(), countryCode: z.string().optional(), callOnlyDescriptions1: z.array(z.string()).optional(), callOnlyDescriptions2: z.array(z.string()).optional(), images: z.array(image).optional(), squareImages: z.array(image).optional(), verticalImages: z.array(image).optional(), logos: z.array(image).optional(), squareLogos: z.array(image).optional(), links: z.array(z.string()).optional(), paths: z.array(displayLinkPath).optional(), displayLinks: z.array(z.string()).optional(), linkDescriptions: z.array(z.string()).optional(), videos: z.array(video).optional(), verticalVideos: z.array(video).optional(), youTubeVideos: z.array(youTubeVideo).optional(), callToActions: z.array(z.enum(["APPLY_NOW", "BOOK_NOW", "CONTACT_US", "DOWNLOAD", "MORE_OF_THIS", "SHOP_NOW", "ORDER_NOW", "REGISTER", "WATCH_MORE", "NO_BUTTON", "CALL_NOW", "SUBSCRIBE", "GET_QUOTE", "GET_OFFER", "LEARN_MORE", "SIGN_UP", "JOIN", "ATTEND", "REQUEST_DEMO", "LISTEN_NOW", "GET_SHOWTIMES", "UNLOCK_FULL_DOCUMENT", "BUY_NOW", "VISIT_SITE", "REGISTER_NOW", "FIND_A_DEALER", "ADD_TO_CART", "WATCH_NOW", "READ_MORE", "BUY_TICKETS", "DONATE_NOW", "EXPLORE_MORE", "FIND_A_LOCATION", "FIND_RETAILERS", "GET_DEAL", "GET_RECIPE", "ON_SALE", "PLAY_GAME", "TRY_IT"])).optional(), facebookPostId: z.string().optional(), instagramPostId: z.string().optional(), instagramCollaborationPost: z.boolean().optional(), twitterTweetId: z.string().optional(), linkedInPostId: z.string().optional(), pinterestPostId: z.string().optional(), searchAdType: z.enum(["EXPANDED", "RESPONSIVE"]).optional(), carouselMultiShareEndCard: z.boolean().optional(), carouselMultiShareOptimized: z.boolean().optional(), useTikTokSparkAd: z.boolean().optional(), tikTokProfileName: z.string().optional(), tikTokProfileImage: image.optional(), adStatus: z.enum(["IS_RUNNING", "STOP", "IN_REVIEW", "REMOVED", "COMPLETED", "DISAPPROVED", "IS_STOPPING"]).optional(), facebookAdGroups: z.array(facebookAdGroup).optional(), facebookInstantExperienceId: z.string().optional(), facebookInstantExperienceThumbnails: z.array(facebookInstantExperienceThumbnail).optional(), tikTokPostId: z.string().optional(), youTubePostId: z.string().optional(), ignoredForDistribution: z.boolean().optional(), document: document.optional(), deactivateComments: z.boolean().optional(), showMemberProfilePhoto: z.boolean().optional(), senderUrn: z.string().optional(), ctaLabel: z.string().optional(), eventUrl: z.string().optional(), adType: z.enum(["TEXT", "IMAGE", "VIDEO", "SPOTLIGHT", "SHOPPING", "COLLECTION", "CAROUSEL", "DOCUMENT", "MESSAGE", "EVENT"]).optional(), instagramCarouselPostBoosting: z.boolean().optional(), type: z.enum(["SHORT", "LONG"]).optional()}); export const leadForm = z.object({id: z.string().optional(), name: z.string().optional(), facebookPage: thirdPartyPage.optional()}); export const automaticPostPromotion = z.object({enabled: z.boolean().optional(), name: z.string().optional(), target: adTarget.optional(), platforms: z.array(z.enum(["FACEBOOK", "INSTAGRAM", "GOOGLE_ADWORDS", "GOOGLE_DISPLAY_NETWORK", "GOOGLE_ANALYTICS", "YOUTUBE", "XING", "LINKED_IN", "TWITTER", "GOOGLE_MY_BUSINESS", "TIKTOK", "BITLY", "THREADS", "BLUESKY", "WHATSAPP", "PINTEREST", "CANVA", "HUBSPOT", "SALESFORCE", "BREVO", "SISTRIX", "NEWS", "BEEKEEPER", "TEADS", "MASTODON", "SNAPCHAT", "PIXXIO", "YEXT", "CANTO", "WEBSITE", "PLAUSIBLE", "MATOMO"])).optional(), postType: z.enum(["ALL", "LINK", "IMAGE", "VIDEO"]).optional(), nbrOfDays: z.number().int().optional(), maxPostPublishedDateInDays: z.number().int().optional(), postMessageKeywords: z.array(z.string()).optional(), minimumOrganicResultMetric: z.enum(["CLICKS", "LIKES", "IMPRESSIONS", "REACH"]).optional(), minimumOrganicResultValue: z.number().int().optional(), placements: z.array(z.enum(["GOOGLE_SEARCH_NETWORK", "FACEBOOK_TIMELINE", "GOOGLE_DISPLAY_NETWORK", "FACEBOOK_AUDIENCE_NETWORK", "YOUTUBE", "INSTAGRAM_TIMELINE", "GOOGLE_SHOPPING", "FACEBOOK_MESSENGER", "LINKEDIN_CONTENT", "LINKEDIN_TEXT", "LINKEDIN_INMAIL", "LINKEDIN_DYNAMIC", "FACEBOOK_STORIES", "FACEBOOK_INSTANT_ARTICLES", "FACEBOOK_RIGHT_HAND_COLUMN", "FACEBOOK_MARKETPLACE", "INSTAGRAM_STORIES", "FACEBOOK_MESSENGER_STORIES", "FACEBOOK_SEARCH", "FACEBOOK_INSTREAM_VIDEO", "FACEBOOK_REELS", "INSTAGRAM_EXPLORE_HOME", "INSTAGRAM_PROFILE_FEED", "INSTAGRAM_PROFILE_REELS", "LINKEDIN_AUDIENCE_NETWORK", "TWITTER_ALL", "TWITTER_PUBLISHER_NETWORK", "TWITTER_SEARCH", "TWITTER_TIMELINE", "TWITTER_PROFILE", "GOOGLE_MY_BUSINESS", "FACEBOOK_UNKNOWN", "FACEBOOK_VIDEO_FEED", "INSTAGRAM_REELS", "INSTAGRAM_SHOP", "INSTAGRAM_EXPLORE", "TIKTOK_FEED", "META_AUTOMATIC", "THREADS_FEED", "BLUESKY_FEED", "PINTEREST_FEED"])).optional(), customLinkParams: z.string().optional()}); export const template = z.object({imageAds: z.array(ad).optional(), textAds: z.array(ad).optional(), videoAds: z.array(ad).optional(), collectionAds: z.array(ad).optional(), carouselAds: z.array(ad).optional(), documentAds: z.array(ad).optional(), shoppingAds: z.array(ad).optional(), spotlightAds: z.array(ad).optional(), messageAds: z.array(ad).optional(), eventAds: z.array(ad).optional(), trackingUrlTemplate: z.string().optional(), customParameters: z.array(customParameter).optional(), finalUrlSuffix: z.string().optional(), url: z.string().optional(), createdFromAdTemplateId: z.string().optional(), facebookLeadForm: leadForm.optional(), linkedInLeadForm: leadForm.optional(), automaticPostPromotion: automaticPostPromotion.optional(), automaticPostPromotions: z.array(automaticPostPromotion).optional()}); export const templateCategory = z.object({id: z.string().optional(), userId: z.string().optional(), tenantId: z.string().optional(), name: z.string().optional(), nameEN: z.string().optional(), nameFR: z.string().optional(), nameES: z.string().optional(), nameIT: z.string().optional()}); export const tag = z.object({id: z.string().optional(), userId: z.string().optional(), tenantId: z.string().optional(), subtenantId: z.string().optional(), text: z.string().optional(), color: z.string().optional(), mode: z.enum(["MEDIA_LIBRARY", "POST_TEMPLATE", "MODERATION", "RESPONSE_TEMPLATE", "INFLUENCER"]).optional(), textFR: z.string().optional(), textEN: z.string().optional(), textIT: z.string().optional(), textES: z.string().optional(), templateCategory: templateCategory.optional()}); export const selectedItem = z.object({id: z.string().optional(), name: z.string().optional()}); export const googleUser = z.object({emailAddress: z.string().optional(), googleCredentials: z.string().optional(), customerId: z.string().optional(), mccCustomerId: z.string().optional(), analyticsProfileId: z.string().optional(), analyticsType: z.enum(["UNIVERSAL", "GA4"]).optional(), name: z.string().optional(), accountType: z.enum(["AD_ACCOUNT", "USER_ACCOUNT", "INSTAGRAM_BUSINESS", "INSTAGRAM_AD_ACCOUNT"]).optional(), currency: z.string().optional(), youTubeChannelId: z.string().optional(), expiresInSeconds: z.number().int().optional(), refreshToken: z.string().optional(), connectionStatus: z.enum(["ACTIVE", "EXPIRES_SOON", "EXPIRED"]).optional(), connectionExpires: z.string().optional()}); export const facebookUser = z.object({internalId: z.string().optional(), name: z.string().optional(), accessToken: z.string().optional(), accountId: z.string().optional(), email: z.string().optional(), accountType: z.enum(["AD_ACCOUNT", "USER_ACCOUNT", "INSTAGRAM_BUSINESS", "INSTAGRAM_AD_ACCOUNT"]).optional(), currency: z.string().optional(), clientBusinessId: z.string().optional(), connectionStatus: z.enum(["ACTIVE", "EXPIRES_SOON", "EXPIRED"]).optional(), connectionExpires: z.string().optional()}); export const linkedInUser = z.object({name: z.string().optional(), accessToken: z.string().optional(), accountId: z.string().optional(), email: z.string().optional(), expires: z.string().optional(), accountType: z.enum(["AD_ACCOUNT", "USER_ACCOUNT", "INSTAGRAM_BUSINESS", "INSTAGRAM_AD_ACCOUNT"]).optional(), currency: z.string().optional(), refreshToken: z.string().optional(), refreshTokenExpires: z.string().optional(), status: z.enum(["ACTIVE", "CANCELED", "DRAFT", "REMOVED"]).optional(), connectionStatus: z.enum(["ACTIVE", "EXPIRES_SOON", "EXPIRED"]).optional(), connectionExpires: z.string().optional()}); export const twitterUser = z.object({name: z.string().optional(), accessToken: z.string().optional(), accessTokenSecret: z.string().optional(), accountId: z.string().optional(), email: z.string().optional(), accountType: z.enum(["AD_ACCOUNT", "USER_ACCOUNT", "INSTAGRAM_BUSINESS", "INSTAGRAM_AD_ACCOUNT"]).optional(), currency: z.string().optional(), connectionStatus: z.enum(["ACTIVE", "EXPIRES_SOON", "EXPIRED"]).optional(), connectionExpires: z.string().optional()}); export const tikTokUser = z.object({name: z.string().optional(), accessToken: z.string().optional(), expires: z.string().optional(), refreshToken: z.string().optional(), refreshTokenExpires: z.string().optional(), accessTokenSecret: z.string().optional(), accountId: z.string().optional(), email: z.string().optional(), accountType: z.enum(["AD_ACCOUNT", "USER_ACCOUNT", "INSTAGRAM_BUSINESS", "INSTAGRAM_AD_ACCOUNT"]).optional(), currency: z.string().optional(), displayName: z.string().optional(), profileImageUrl: z.string().optional(), profileImageId: z.string().optional(), connectionStatus: z.enum(["ACTIVE", "EXPIRES_SOON", "EXPIRED"]).optional(), connectionExpires: z.string().optional()}); export const pinterestUser = z.object({internalId: z.string().optional(), name: z.string().optional(), accessToken: z.string().optional(), expires: z.string().optional(), accountId: z.string().optional(), refreshToken: z.string().optional(), refreshTokenExpires: z.string().optional(), accountType: z.enum(["AD_ACCOUNT", "USER_ACCOUNT", "INSTAGRAM_BUSINESS", "INSTAGRAM_AD_ACCOUNT"]).optional(), currency: z.string().optional(), instanceUrl: z.string().optional(), accountKey: z.string().optional(), server: z.string().optional(), connectionStatus: z.enum(["ACTIVE", "EXPIRES_SOON", "EXPIRED"]).optional(), connectionExpires: z.string().optional(), uniqueIdentifier: z.string().optional(), accountKeyIdentifier: z.string().optional()}); export const mastodonUser = z.object({internalId: z.string().optional(), name: z.string().optional(), accessToken: z.string().optional(), expires: z.string().optional(), accountId: z.string().optional(), refreshToken: z.string().optional(), refreshTokenExpires: z.string().optional(), accountType: z.enum(["AD_ACCOUNT", "USER_ACCOUNT", "INSTAGRAM_BUSINESS", "INSTAGRAM_AD_ACCOUNT"]).optional(), currency: z.string().optional(), instanceUrl: z.string().optional(), accountKey: z.string().optional(), server: z.string().optional(), connectionStatus: z.enum(["ACTIVE", "EXPIRES_SOON", "EXPIRED"]).optional(), connectionExpires: z.string().optional(), uniqueIdentifier: z.string().optional(), accountKeyIdentifier: z.string().optional()}); export const snapchatUser = z.object({internalId: z.string().optional(), name: z.string().optional(), accessToken: z.string().optional(), expires: z.string().optional(), accountId: z.string().optional(), refreshToken: z.string().optional(), refreshTokenExpires: z.string().optional(), accountType: z.enum(["AD_ACCOUNT", "USER_ACCOUNT", "INSTAGRAM_BUSINESS", "INSTAGRAM_AD_ACCOUNT"]).optional(), currency: z.string().optional(), instanceUrl: z.string().optional(), accountKey: z.string().optional(), server: z.string().optional(), connectionStatus: z.enum(["ACTIVE", "EXPIRES_SOON", "EXPIRED"]).optional(), connectionExpires: z.string().optional(), organizationId: z.string().optional(), uniqueIdentifier: z.string().optional(), accountKeyIdentifier: z.string().optional()}); export const campaignGroup = z.object({id: z.string().optional(), name: z.string().optional(), status: z.enum(["ACTIVE", "ARCHIVED", "CANCELED", "DRAFT", "PAUSED", "REMOVED"]).optional()}); export const channelConfiguration = z.object({channel: z.enum(["FACEBOOK", "INSTAGRAM", "GOOGLE_ADWORDS", "GOOGLE_DISPLAY_NETWORK", "GOOGLE_ANALYTICS", "YOUTUBE", "XING", "LINKED_IN", "TWITTER", "GOOGLE_MY_BUSINESS", "TIKTOK", "BITLY", "THREADS", "BLUESKY", "WHATSAPP", "PINTEREST", "CANVA", "HUBSPOT", "SALESFORCE", "BREVO", "SISTRIX", "NEWS", "BEEKEEPER", "TEADS", "MASTODON", "SNAPCHAT", "PIXXIO", "YEXT", "CANTO", "WEBSITE", "PLAUSIBLE", "MATOMO"]).optional(), selected: z.boolean().optional(), googleUser: googleUser.optional(), facebookUser: facebookUser.optional(), linkedInUser: linkedInUser.optional(), twitterUser: twitterUser.optional(), tikTokUser: tikTokUser.optional(), pinterestUser: pinterestUser.optional(), mastodonUser: mastodonUser.optional(), snapchatUser: snapchatUser.optional(), campaignGroup: campaignGroup.optional(), activationStatus: z.enum(["PENDING", "ERROR", "COMPLETED"]).optional(), activationErrorMessage: z.string().optional()}); export const linkedInTargetingEntity: z.ZodType = z.object({facetUrn: z.string().optional(), urn: z.string().optional(), name: z.string().optional(), children: z.array(z.lazy(() => linkedInTargetingEntity)).optional(), parentUrn: z.string().optional()}); export const linkedInTargetingCriteriaGroup = z.object({linkedInTargetingEntityLinkOperator: z.enum(["AND", "OR"]).optional(), linkedInTargetingCriterias: z.array(linkedInTargetingEntity).optional()}); export const twitterTargetingCriteria = z.object({type: z.enum(["KEYWORD", "FOLLOWER_LOOKALIKE"]).optional(), value: z.string().optional(), twitterId: z.string().optional()}); export const tikTokTargetingCriteria: z.ZodType = z.object({id: z.string().optional(), name: z.string().optional(), type: z.enum(["INTEREST_CATEGORY", "INTEREST_KEYWORD", "ACTION_CATEGORY_VIDEO", "ACTION_CATEGORY_CREATOR", "HASHTAG"]).optional(), children: z.array(z.lazy(() => tikTokTargetingCriteria)).optional()}); export const keyword = z.object({value: z.string().optional(), matchType: z.enum(["BROAD", "PHRASE", "EXACT"]).optional()}); export const pinterestTargetingCriteria = z.object({pinterestInterests: z.array(selectedItem).optional(), pinterestKeywords: z.array(keyword).optional()}); export const facebookInterestGroup = z.object({facebookInterests: z.array(facebookInterest).optional()}); export const targetRegion = z.object({type: z.enum(["CITY", "REGION", "ZIP", "COORDINATE"]).optional(), city: z.string().optional(), useRadius: z.boolean().optional(), radiusInKm: z.number().int().optional(), countryCode: z.string().optional(), lat: z.number().optional(), lon: z.number().optional(), bidModifier: z.number().optional(), bidModifierType: z.enum(["INCREASE", "DECREASE"]).optional(), linkedInUrn: z.string().optional(), twitterTargetingValue: z.string().optional(), tikTokLocationId: z.string().optional(), channel: z.enum(["FACEBOOK", "INSTAGRAM", "GOOGLE_ADWORDS", "GOOGLE_DISPLAY_NETWORK", "GOOGLE_ANALYTICS", "YOUTUBE", "XING", "LINKED_IN", "TWITTER", "GOOGLE_MY_BUSINESS", "TIKTOK", "BITLY", "THREADS", "BLUESKY", "WHATSAPP", "PINTEREST", "CANVA", "HUBSPOT", "SALESFORCE", "BREVO", "SISTRIX", "NEWS", "BEEKEEPER", "TEADS", "MASTODON", "SNAPCHAT", "PIXXIO", "YEXT", "CANTO", "WEBSITE", "PLAUSIBLE", "MATOMO"]).optional(), externalPlaceId: z.string().optional(), regionReviewEnabled: z.boolean().optional(), regionReviewStatus: z.enum(["PENDING_APPROVAL", "APPROVED", "NOT_APPROVED"]).optional(), types: z.array(z.string()).optional()}); export const targetRegionBehaviour = z.object({interestedInThatRegion: z.boolean().optional(), locatedInThatRegion: z.boolean().optional()}); export const age = z.object({value: z.array(z.number().int()).optional()}); export const yearsOfExperience = z.object({enabled: z.boolean().optional(), value: z.array(z.number().int()).optional()}); export const targetExclusion = z.object({facebookInterests: z.array(facebookInterest).optional(), linkedInTargetingCriterias: z.array(linkedInTargetingEntity).optional(), googleKeywords: z.array(googleKeyword).optional(), targetRegions: z.array(targetRegion).optional(), retargeting: retargeting.optional(), linkedInTargetingEntityLinkOperator: z.enum(["AND", "OR"]).optional(), twitterTargetingCriterias: z.array(twitterTargetingCriteria).optional()}); export const googleMerchantAccount = z.object({merchantAccountId: z.string().optional(), name: z.string().optional()}); export const productScope = z.object({productDimension: z.enum(["BRAND", "PRODUCT_NR", "STATE", "PRODUCT_TYPE", "CUSTOM_LABEL_0", "CUSTOM_LABEL_1", "CUSTOM_LABEL_2", "CUSTOM_LABEL_3", "CUSTOM_LABEL_4", "CHANNEL", "CHANNEL_EXCLUSIVE"]).optional(), value: z.string().optional()}); export const facebookProductCatalog = z.object({id: z.string().optional(), name: z.string().optional(), nbrOfProducts: z.number().int().optional(), nbrOfQualifiedProducts: z.number().int().optional()}); export const facebookProductSet = z.object({id: z.string().optional(), name: z.string().optional(), nbrOfProducts: z.number().int().optional()}); export const shoppingSettings = z.object({googleMerchantAccount: googleMerchantAccount.optional(), salesCountry: z.string().optional(), enableLocal: z.boolean().optional(), googleShoppingCampaignType: z.enum(["CLASSIC", "SMART"]).optional(), productScopeType: z.enum(["NONE", "FILTER"]).optional(), productScopes: z.array(productScope).optional(), facebookProductCatalog: facebookProductCatalog.optional(), facebookDynamicAdsTargetingType: z.enum(["RETARGETING", "BROAD"]).optional(), facebookProductSet: facebookProductSet.optional(), facebookRetargetingIncludedRetentionDays: z.number().int().optional(), facebookRetargetingExcludedRetentionDays: z.number().int().optional()}); export const dynamicSearchSettings = z.object({domainName: z.string().optional(), languageCode: z.string().optional()}); export const frequencyControlSpec = z.object({intervalInDays: z.number().int().optional(), maxFrequency: z.number().int().optional()}); export const frequencyControlLinkedInSpec = z.object({durationInDays: z.number().int().optional(), frequency: z.number().int().optional()}); export const target = z.object({id: z.string().optional(), name: z.string().optional(), namingTemplateElementValues: z.array(namingTemplateElementValue).optional(), gender: z.enum(["ALL", "MALE", "FEMALE"]).optional(), language: z.enum(["ALL", "DE", "FR", "EN", "IT", "ES", "PT", "NL", "SV", "RO", "CS", "EL", "TR", "PL", "DA", "EU", "CY", "CA", "HU", "SK", "SL", "SQ", "HY", "BS", "BG", "HR", "UK", "NO", "FI"]).optional(), additionalLanguages: z.array(z.enum(["ALL", "DE", "FR", "EN", "IT", "ES", "PT", "NL", "SV", "RO", "CS", "EL", "TR", "PL", "DA", "EU", "CY", "CA", "HU", "SK", "SL", "SQ", "HY", "BS", "BG", "HR", "UK", "NO", "FI"])).optional(), linkedInTargetingEntityLinkOperator: z.enum(["AND", "OR"]).optional(), linkedInTargetingCriterias: z.array(linkedInTargetingEntity).optional(), linkedInTargetingCriteriaGroups: z.array(linkedInTargetingCriteriaGroup).optional(), googleAdGroups: z.array(googleAdGroup).optional(), twitterTargetingCriterias: z.array(twitterTargetingCriteria).optional(), tikTokTargetingCriterias: z.array(tikTokTargetingCriteria).optional(), pinterestTargetingCriterias: z.array(pinterestTargetingCriteria).optional(), pinterestPerformancePlusEnabled: z.boolean().optional(), pinterestPerformancePlusMinimumAge: z.number().int().optional(), facebookInterestGroups: z.array(facebookInterestGroup).optional(), facebookInterests: z.array(facebookInterest).optional(), facebookAdGroups: z.array(facebookAdGroup).optional(), targetRegions: z.array(targetRegion).optional(), targetRegionBehaviour: targetRegionBehaviour.optional(), age: age.optional(), yearsOfExperience: yearsOfExperience.optional(), devices: devices.optional(), targetExclusion: targetExclusion.optional(), retargeting: retargeting.optional(), shoppingSettings: shoppingSettings.optional(), dynamicSearchSettings: dynamicSearchSettings.optional(), extension: extension.optional(), status: z.enum(["IS_RUNNING", "STOP", "IN_REVIEW", "REMOVED", "COMPLETED", "DISAPPROVED", "IS_STOPPING"]).optional(), createdFromTargetingTemplateId: z.string().optional(), facebookSpecialAdCategory: z.enum(["CREDIT", "EMPLOYMENT", "HOUSING", "ISSUES_ELECTIONS_POLITICS", "ONLINE_GAMBLING_AND_GAMING", "NONE"]).optional(), facebookSpecialAdCategoryCountry: z.string().optional(), politicalIntent: z.enum(["NOT_POLITICAL", "POLITICAL"]).optional(), frequencyControl: z.enum(["AUTOMATIC", "FREQUENCY_LIMIT", "MAX_FREQUENCY"]).optional(), frequencyControlSpec: frequencyControlSpec.optional(), frequencyControlLinkedIn: z.enum(["AUTOMATIC", "FREQUENCY_LIMIT", "MAX_FREQUENCY"]).optional(), frequencyControlLinkedInSpec: frequencyControlLinkedInSpec.optional(), enableAdvantagePlusTargeting: z.boolean().optional()}); export const metaBudgetSplit = z.object({facebookBudget: z.number().optional(), instagramBudget: z.number().optional(), storyBudget: z.number().optional(), reelsBudget: z.number().optional()}); export const targetBudget = z.object({targetId: z.string().optional(), budget: z.number().optional(), linkedInDailyBudget: z.number().optional(), metaBudgetSplit: metaBudgetSplit.optional()}); export const budgetChannel = z.object({channel: z.enum(["FACEBOOK", "INSTAGRAM", "GOOGLE_ADWORDS", "GOOGLE_DISPLAY_NETWORK", "GOOGLE_ANALYTICS", "YOUTUBE", "XING", "LINKED_IN", "TWITTER", "GOOGLE_MY_BUSINESS", "TIKTOK", "BITLY", "THREADS", "BLUESKY", "WHATSAPP", "PINTEREST", "CANVA", "HUBSPOT", "SALESFORCE", "BREVO", "SISTRIX", "NEWS", "BEEKEEPER", "TEADS", "MASTODON", "SNAPCHAT", "PIXXIO", "YEXT", "CANTO", "WEBSITE", "PLAUSIBLE", "MATOMO"]).optional(), placement: z.enum(["GOOGLE_SEARCH_NETWORK", "FACEBOOK_TIMELINE", "GOOGLE_DISPLAY_NETWORK", "FACEBOOK_AUDIENCE_NETWORK", "YOUTUBE", "INSTAGRAM_TIMELINE", "GOOGLE_SHOPPING", "FACEBOOK_MESSENGER", "LINKEDIN_CONTENT", "LINKEDIN_TEXT", "LINKEDIN_INMAIL", "LINKEDIN_DYNAMIC", "FACEBOOK_STORIES", "FACEBOOK_INSTANT_ARTICLES", "FACEBOOK_RIGHT_HAND_COLUMN", "FACEBOOK_MARKETPLACE", "INSTAGRAM_STORIES", "FACEBOOK_MESSENGER_STORIES", "FACEBOOK_SEARCH", "FACEBOOK_INSTREAM_VIDEO", "FACEBOOK_REELS", "INSTAGRAM_EXPLORE_HOME", "INSTAGRAM_PROFILE_FEED", "INSTAGRAM_PROFILE_REELS", "LINKEDIN_AUDIENCE_NETWORK", "TWITTER_ALL", "TWITTER_PUBLISHER_NETWORK", "TWITTER_SEARCH", "TWITTER_TIMELINE", "TWITTER_PROFILE", "GOOGLE_MY_BUSINESS", "FACEBOOK_UNKNOWN", "FACEBOOK_VIDEO_FEED", "INSTAGRAM_REELS", "INSTAGRAM_SHOP", "INSTAGRAM_EXPLORE", "TIKTOK_FEED", "META_AUTOMATIC", "THREADS_FEED", "BLUESKY_FEED", "PINTEREST_FEED"]).optional(), selected: z.boolean().optional(), totalCost: z.number().optional(), bid: z.number().optional(), maxBid: z.number().optional(), costType: z.enum(["CPC", "CPM", "CPS"]).optional(), bidType: z.enum(["AUTOMATIC", "MANUAL"]).optional(), linkedInBiddingOptimization: z.enum(["MAXIMIZE_CLICKS", "MAXIMIZE_IMPRESSIONS", "MAXIMIZE_CONVERSIONS", "MAXIMIZE_LEADS"]).optional(), linkedInDailyBudget: z.number().optional(), facebookBudgetOptimization: z.enum(["CAMPAIGN_BUDGET_OPTIMIZATION", "ADSET_BUDGET_OPTIMIZATION"]).optional(), facebookTrafficOptimization: z.enum(["LINK_CLICKS", "LANDING_PAGE_VIEWS"]).optional(), twitterBudgetOptimization: z.enum(["CAMPAIGN_BUDGET_OPTIMIZATION", "AD_GROUP_BUDGET_OPTIMIZATION"]).optional(), tikTokBudgetOptimization: z.enum(["CAMPAIGN_BUDGET_OPTIMIZATION", "AD_GROUP_BUDGET_OPTIMIZATION"]).optional(), targetBudgets: z.array(targetBudget).optional()}); export const conversionTracker = z.object({id: z.string().optional(), googleCustomerId: z.string().optional(), facebookAccountId: z.string().optional(), facebookCustomConversionId: z.string().optional(), facebookCustomConversionEventName: z.string().optional(), facebookStandardEventName: z.string().optional(), channel: z.enum(["FACEBOOK", "INSTAGRAM", "GOOGLE_ADWORDS", "GOOGLE_DISPLAY_NETWORK", "GOOGLE_ANALYTICS", "YOUTUBE", "XING", "LINKED_IN", "TWITTER", "GOOGLE_MY_BUSINESS", "TIKTOK", "BITLY", "THREADS", "BLUESKY", "WHATSAPP", "PINTEREST", "CANVA", "HUBSPOT", "SALESFORCE", "BREVO", "SISTRIX", "NEWS", "BEEKEEPER", "TEADS", "MASTODON", "SNAPCHAT", "PIXXIO", "YEXT", "CANTO", "WEBSITE", "PLAUSIBLE", "MATOMO"]).optional(), name: z.string().optional(), status: z.enum(["INACTIVE", "ACTIVE"]).optional(), snippet: z.string().optional(), revenueValue: z.number().optional(), userId: z.string().optional(), tenantId: z.string().optional(), currency: z.string().optional(), pixelSnippet: z.string().optional(), googleTrackerId: z.string().optional(), googleGlobalSiteTag: z.string().optional(), twitterWebEventTag: z.string().optional(), linkedInConversionId: z.string().optional(), googleConversionId: z.string().optional(), googleConversionLabel: z.string().optional(), tikTokAccountId: z.string().optional(), tikTokPixelId: z.string().optional(), tikTokEventName: z.string().optional()}); export const conversionTracking = z.object({facebookConversionTracker: conversionTracker.optional(), googleConversionTracker: conversionTracker.optional(), linkedInConversionTracker: conversionTracker.optional(), linkedInConversionTrackers: z.array(conversionTracker).optional(), twitterConversionTracker: conversionTracker.optional(), tikTokConversionTracker: conversionTracker.optional()}); export const budget = z.object({totalCost: z.number().optional(), budgetChannels: z.array(budgetChannel).optional(), overallMaxBid: z.number().optional(), adWordsPageOneGoal: z.enum(["ANY_POSITION", "TOP_POSITION"]).optional(), higherThanCompetitorPercentage: z.number().int().optional(), competitorDomain: z.string().optional(), targetCpa: z.number().optional(), targetReturnOnAdSpendPercentage: z.number().optional(), enhancedManualCpc: z.boolean().optional(), conversionTracking: conversionTracking.optional(), biddingOptimization: z.enum(["AUTOMATIC_CHANNELS", "MANUAL", "ENHANCED_CPC", "PAGE_ONE_PROMOTED", "TARGET_OUTRANK_SHARE", "TARGET_CPA", "TARGET_ROAS", "TARGET_SPEND", "MANUAL_CPV", "MANUAL_CPM", "UNKNOWN", "AUTOMATIC_ADHOOK", "MAXIMIZE_CONVERSIONS", "MAXIMIZE_CONVERSIONS_VALUE", "PERCENT_CPC", "TARGET_CPM", "TARGET_IMPRESSION_SHARE"]).optional(), adWordsBiddingStrategyId: z.string().optional(), adWordsBiddingStrategyName: z.string().optional(), adWordsBiddingStrategyMode: z.enum(["STANDARD", "PORTFOLIO"]).optional(), deliveryMethod: z.enum(["STANDARD", "ACCELERATED"]).optional(), portfolioCreationMode: z.enum(["EXISTING_PORTFOLIO", "NEW_PORTFOLIO"]).optional(), marginSpecification: z.enum(["NET", "GROSS"]).optional()}); export const targetSchedule = z.object({start: z.string().optional(), end: z.string().optional(), nbrOfDays: z.number().int().optional(), targetId: z.string().optional()}); export const timeRange = z.object({start: z.string().optional(), end: z.string().optional(), nbrOfDays: z.number().int().optional(), durationType: z.enum(["SHORT_TERM", "LONG_TERM"]).optional(), targetSchedule: z.array(targetSchedule).optional()}); export const promotion = z.object({id: z.string().optional(), type: z.enum(["TRAFFIC", "CONVERSIONS", "RETARGETING", "SHOPPING", "CARS", "REAL_ESTATE", "JOBS", "EVENTS", "APP", "ENGAGEMENT", "VIDEO_VIEWS", "CALLS", "REACH", "FOLLOWERS", "PROFILE_VIEWS", "LEADS", "PERFORMANCE_MAX", "DEMAND_GEN", "SMART"]).optional(), customGoal: z.string().optional(), creationDate: z.string().optional(), template: template.optional(), status: z.enum(["CREATED", "READY", "PLANNED", "BLOCKED", "IN_PROGRESS", "COMPLETED", "DELETED", "STOPPED", "ERROR", "ACTIVATING", "IMPORTING", "READY_FOR_PAYMENT", "IN_REVIEW", "LOCKED", "PRODUCT_SYNCHRONIZING", "CHECK_REVIEW_FEEDBACK"]).optional(), statusBeforeActivation: z.enum(["CREATED", "READY", "PLANNED", "BLOCKED", "IN_PROGRESS", "COMPLETED", "DELETED", "STOPPED", "ERROR", "ACTIVATING", "IMPORTING", "READY_FOR_PAYMENT", "IN_REVIEW", "LOCKED", "PRODUCT_SYNCHRONIZING", "CHECK_REVIEW_FEEDBACK"]).optional(), activatingSince: z.string().optional(), importOrigin: z.enum(["GOOGLE_ADWORDS", "FACEBOOK", "LINKED_IN", "TWITTER", "TIKTOK", "PINTEREST"]).optional(), source: z.enum(["TARGETING_TOOL", "TEMPLATE", "LEAD_CHATBOT", "GENERATION"]).optional(), createdByUserId: z.string().optional(), createdByUserEmail: z.string().optional(), assigneeUserId: z.string().optional(), assigneeUserEmail: z.string().optional(), title: z.string().optional(), namingTemplateElementValues: z.array(namingTemplateElementValue).optional(), tags: z.array(tag).optional(), topics: z.array(selectedItem).optional(), channelConfigurations: z.array(channelConfiguration).optional(), targets: z.array(target).optional(), budget: budget.optional(), timeRange: timeRange.optional(), currency: z.enum(["CHF", "USD", "EUR", "AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BOV", "BRL", "BSD", "BTN", "BWP", "BYN", "BZD", "CAD", "CDF", "CHE", "CHW", "CLF", "CLP", "CNY", "COP", "COU", "CRC", "CUC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP", "DZD", "EGP", "ERN", "ETB", "FJD", "FKP", "GBP", "GEL", "GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF", "IDR", "ILS", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY", "KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LYD", "MAD", "MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRU", "MUR", "MVR", "MWK", "MXN", "MXV", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STN", "SVC", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "UYI", "UYU", "UYW", "UZS", "VES", "VND", "VUV", "WST", "XAF", "XCD", "XOF", "XPF", "XSU", "YER", "ZAR", "ZMW", "ZWL"]).optional(), version: z.number().int().optional(), entityVersion: z.number().int().optional(), tenantId: z.string().optional(), subtenantId: z.string().optional(), marginPercentage: z.number().optional(), processReviewMessage: z.string().optional(), processReviewFeedback: z.string().optional(), processReviewFeedbackAnswer: z.string().optional(), processTaskAssigneeUserId: z.string().optional(), processTaskAssigneeUserIds: z.array(z.string()).optional(), regionReviewUserIds: z.array(z.string()).optional(), createdFromCampaignGenerationId: z.string().optional(), createdFromPostId: z.string().optional(), activationStatus: z.enum(["PENDING", "ERROR", "COMPLETED"]).optional(), activationErrorMessage: z.string().optional(), activationErrorChannel: z.enum(["FACEBOOK", "INSTAGRAM", "GOOGLE_ADWORDS", "GOOGLE_DISPLAY_NETWORK", "GOOGLE_ANALYTICS", "YOUTUBE", "XING", "LINKED_IN", "TWITTER", "GOOGLE_MY_BUSINESS", "TIKTOK", "BITLY", "THREADS", "BLUESKY", "WHATSAPP", "PINTEREST", "CANVA", "HUBSPOT", "SALESFORCE", "BREVO", "SISTRIX", "NEWS", "BEEKEEPER", "TEADS", "MASTODON", "SNAPCHAT", "PIXXIO", "YEXT", "CANTO", "WEBSITE", "PLAUSIBLE", "MATOMO"]).optional(), color: z.string().optional(), pausedAt: z.string().optional(), externalPlatformDataSynchronizedAt: z.string().optional(), tenantTermsAccepted: z.boolean().optional(), createdFromTaskId: z.string().optional(), transferUpdatesToAdAccounts: z.boolean().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * GET /v1/targetingTemplates/{targetingTemplateId}/promotion */ export const getApiV1TargetingTemplatesTargetingTemplateIdPromotion = async (options: GetApiV1TargetingTemplatesTargetingTemplateIdPromotionOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/v1/targetingTemplates/${encodeURIComponent(String(args.targetingTemplateId))}/promotion${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(promotion, await res.json()) };