import {z} from 'zod' export type GoogleAdsSearchads360V23ResourcesConversionActionAttributionModelSettings = {attributionModel?: ('UNSPECIFIED' | 'UNKNOWN' | 'EXTERNAL' | 'GOOGLE_ADS_LAST_CLICK' | 'GOOGLE_SEARCH_ATTRIBUTION_FIRST_CLICK' | 'GOOGLE_SEARCH_ATTRIBUTION_LINEAR' | 'GOOGLE_SEARCH_ATTRIBUTION_TIME_DECAY' | 'GOOGLE_SEARCH_ATTRIBUTION_POSITION_BASED' | 'GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN') | undefined, dataDrivenModelStatus?: ('UNSPECIFIED' | 'UNKNOWN' | 'AVAILABLE' | 'STALE' | 'EXPIRED' | 'NEVER_GENERATED') | undefined}; export type GoogleAdsSearchads360V23ResourcesConversionActionFirebaseSettings = {eventName?: string | undefined, projectId?: string | undefined, propertyId?: unknown | undefined, propertyName?: string | undefined}; export type GoogleAdsSearchads360V23ResourcesConversionActionFloodlightSettings = {activityGroupTag?: string | undefined, activityId?: unknown | undefined, activityTag?: string | undefined}; export type GoogleAdsSearchads360V23ResourcesConversionActionGoogleAnalytics4Settings = {eventName?: string | undefined, propertyId?: unknown | undefined, propertyName?: string | undefined}; export type GoogleAdsSearchads360V23CommonTagSnippet = {eventSnippet?: string | undefined, globalSiteTag?: string | undefined, pageFormat?: ('UNSPECIFIED' | 'UNKNOWN' | 'HTML' | 'AMP') | undefined, type?: ('UNSPECIFIED' | 'UNKNOWN' | 'WEBPAGE' | 'WEBPAGE_ONCLICK' | 'CLICK_TO_CALL' | 'WEBSITE_CALL') | undefined}; export type GoogleAdsSearchads360V23ResourcesConversionActionThirdPartyAppAnalyticsSettings = {eventName?: string | undefined, providerName?: string | undefined}; export type GoogleAdsSearchads360V23ResourcesConversionActionValueSettings = {alwaysUseDefaultValue?: boolean | undefined, defaultCurrencyCode?: string | undefined, defaultValue?: number | undefined}; export type GoogleAdsSearchads360V23ResourcesConversionAction = {appId?: string | undefined, attributionModelSettings?: GoogleAdsSearchads360V23ResourcesConversionActionAttributionModelSettings | undefined, category?: ('UNSPECIFIED' | 'UNKNOWN' | 'DEFAULT' | 'PAGE_VIEW' | 'PURCHASE' | 'SIGNUP' | 'DOWNLOAD' | 'ADD_TO_CART' | 'BEGIN_CHECKOUT' | 'SUBSCRIBE_PAID' | 'PHONE_CALL_LEAD' | 'IMPORTED_LEAD' | 'SUBMIT_LEAD_FORM' | 'BOOK_APPOINTMENT' | 'REQUEST_QUOTE' | 'GET_DIRECTIONS' | 'OUTBOUND_CLICK' | 'CONTACT' | 'ENGAGEMENT' | 'STORE_VISIT' | 'STORE_SALE' | 'QUALIFIED_LEAD' | 'CONVERTED_LEAD') | undefined, clickThroughLookbackWindowDays?: unknown | undefined, countingType?: ('UNSPECIFIED' | 'UNKNOWN' | 'ONE_PER_CLICK' | 'MANY_PER_CLICK') | undefined, creationTime?: string | undefined, firebaseSettings?: GoogleAdsSearchads360V23ResourcesConversionActionFirebaseSettings | undefined, floodlightSettings?: GoogleAdsSearchads360V23ResourcesConversionActionFloodlightSettings | undefined, googleAnalytics4Settings?: GoogleAdsSearchads360V23ResourcesConversionActionGoogleAnalytics4Settings | undefined, id?: unknown | undefined, includeInClientAccountConversionsMetric?: boolean | undefined, includeInConversionsMetric?: boolean | undefined, mobileAppVendor?: ('UNSPECIFIED' | 'UNKNOWN' | 'APPLE_APP_STORE' | 'GOOGLE_APP_STORE') | undefined, name?: string | undefined, origin?: ('UNSPECIFIED' | 'UNKNOWN' | 'WEBSITE' | 'GOOGLE_HOSTED' | 'APP' | 'CALL_FROM_ADS' | 'STORE' | 'YOUTUBE_HOSTED' | 'FLOODLIGHT') | undefined, ownerCustomer?: string | undefined, phoneCallDurationSeconds?: unknown | undefined, primaryForGoal?: boolean | undefined, resourceName?: string | undefined, status?: ('UNSPECIFIED' | 'UNKNOWN' | 'ENABLED' | 'REMOVED' | 'HIDDEN') | undefined, tagSnippets?: Array | undefined, thirdPartyAppAnalyticsSettings?: GoogleAdsSearchads360V23ResourcesConversionActionThirdPartyAppAnalyticsSettings | undefined, type?: ('UNSPECIFIED' | 'UNKNOWN' | 'AD_CALL' | 'CLICK_TO_CALL' | 'GOOGLE_PLAY_DOWNLOAD' | 'GOOGLE_PLAY_IN_APP_PURCHASE' | 'UPLOAD_CALLS' | 'UPLOAD_CLICKS' | 'WEBPAGE' | 'WEBSITE_CALL' | 'STORE_SALES_DIRECT_UPLOAD' | 'STORE_SALES' | 'FIREBASE_ANDROID_FIRST_OPEN' | 'FIREBASE_ANDROID_IN_APP_PURCHASE' | 'FIREBASE_ANDROID_CUSTOM' | 'FIREBASE_IOS_FIRST_OPEN' | 'FIREBASE_IOS_IN_APP_PURCHASE' | 'FIREBASE_IOS_CUSTOM' | 'THIRD_PARTY_APP_ANALYTICS_ANDROID_FIRST_OPEN' | 'THIRD_PARTY_APP_ANALYTICS_ANDROID_IN_APP_PURCHASE' | 'THIRD_PARTY_APP_ANALYTICS_ANDROID_CUSTOM' | 'THIRD_PARTY_APP_ANALYTICS_IOS_FIRST_OPEN' | 'THIRD_PARTY_APP_ANALYTICS_IOS_IN_APP_PURCHASE' | 'THIRD_PARTY_APP_ANALYTICS_IOS_CUSTOM' | 'ANDROID_APP_PRE_REGISTRATION' | 'ANDROID_INSTALLS_ALL_OTHER_APPS' | 'FLOODLIGHT_ACTION' | 'FLOODLIGHT_TRANSACTION' | 'GOOGLE_HOSTED' | 'LEAD_FORM_SUBMIT' | 'SALESFORCE' | 'SEARCH_ADS_360' | 'SMART_CAMPAIGN_AD_CLICKS_TO_CALL' | 'SMART_CAMPAIGN_MAP_CLICKS_TO_CALL' | 'SMART_CAMPAIGN_MAP_DIRECTIONS' | 'SMART_CAMPAIGN_TRACKED_CALLS' | 'STORE_VISITS' | 'WEBPAGE_CODELESS' | 'UNIVERSAL_ANALYTICS_GOAL' | 'UNIVERSAL_ANALYTICS_TRANSACTION' | 'GOOGLE_ANALYTICS_4_CUSTOM' | 'GOOGLE_ANALYTICS_4_PURCHASE') | undefined, valueSettings?: GoogleAdsSearchads360V23ResourcesConversionActionValueSettings | undefined, viewThroughLookbackWindowDays?: unknown | undefined}; export type GoogleAdsSearchads360V23ServicesConversionActionOperation = {create?: GoogleAdsSearchads360V23ResourcesConversionAction | undefined, remove?: string | undefined, update?: GoogleAdsSearchads360V23ResourcesConversionAction | undefined, updateMask?: unknown | undefined}; export type GoogleAdsSearchads360V23ServicesMutateConversionActionsRequest = {operations?: Array | undefined, partialFailure?: boolean | undefined, responseContentType?: ('UNSPECIFIED' | 'RESOURCE_NAME_ONLY' | 'MUTABLE_RESOURCE') | undefined, validateOnly?: boolean | undefined}; export type CreateApiV23CustomersCustomersIdConversionActionsMutateArgs = {customersId: string, body: GoogleAdsSearchads360V23ServicesMutateConversionActionsRequest}; export type CreateApiV23CustomersCustomersIdConversionActionsMutateOptions = {baseUrl?: string | undefined, Oauth2?: string | undefined, Oauth2c?: string | undefined, fetch?: typeof fetch | undefined}; export const googleRpcStatus = z.object({code: z.number().int().optional(), details: z.array(z.record(z.string(), z.unknown())).optional(), message: z.string().optional()}); export const googleAdsSearchads360V23ResourcesConversionActionAttributionModelSettings = z.object({attributionModel: z.enum(["UNSPECIFIED", "UNKNOWN", "EXTERNAL", "GOOGLE_ADS_LAST_CLICK", "GOOGLE_SEARCH_ATTRIBUTION_FIRST_CLICK", "GOOGLE_SEARCH_ATTRIBUTION_LINEAR", "GOOGLE_SEARCH_ATTRIBUTION_TIME_DECAY", "GOOGLE_SEARCH_ATTRIBUTION_POSITION_BASED", "GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN"]).optional(), dataDrivenModelStatus: z.enum(["UNSPECIFIED", "UNKNOWN", "AVAILABLE", "STALE", "EXPIRED", "NEVER_GENERATED"]).optional()}); export const googleAdsSearchads360V23ResourcesConversionActionFirebaseSettings = z.object({eventName: z.string().optional(), projectId: z.string().optional(), propertyId: z.string().optional(), propertyName: z.string().optional()}); export const googleAdsSearchads360V23ResourcesConversionActionFloodlightSettings = z.object({activityGroupTag: z.string().optional(), activityId: z.string().optional(), activityTag: z.string().optional()}); export const googleAdsSearchads360V23ResourcesConversionActionGoogleAnalytics4Settings = z.object({eventName: z.string().optional(), propertyId: z.string().optional(), propertyName: z.string().optional()}); export const googleAdsSearchads360V23CommonTagSnippet = z.object({eventSnippet: z.string().optional(), globalSiteTag: z.string().optional(), pageFormat: z.enum(["UNSPECIFIED", "UNKNOWN", "HTML", "AMP"]).optional(), type: z.enum(["UNSPECIFIED", "UNKNOWN", "WEBPAGE", "WEBPAGE_ONCLICK", "CLICK_TO_CALL", "WEBSITE_CALL"]).optional()}); export const googleAdsSearchads360V23ResourcesConversionActionThirdPartyAppAnalyticsSettings = z.object({eventName: z.string().optional(), providerName: z.string().optional()}); export const googleAdsSearchads360V23ResourcesConversionActionValueSettings = z.object({alwaysUseDefaultValue: z.boolean().optional(), defaultCurrencyCode: z.string().optional(), defaultValue: z.number().optional()}); export const googleAdsSearchads360V23ResourcesConversionAction = z.object({appId: z.string().optional(), attributionModelSettings: googleAdsSearchads360V23ResourcesConversionActionAttributionModelSettings.optional(), category: z.enum(["UNSPECIFIED", "UNKNOWN", "DEFAULT", "PAGE_VIEW", "PURCHASE", "SIGNUP", "DOWNLOAD", "ADD_TO_CART", "BEGIN_CHECKOUT", "SUBSCRIBE_PAID", "PHONE_CALL_LEAD", "IMPORTED_LEAD", "SUBMIT_LEAD_FORM", "BOOK_APPOINTMENT", "REQUEST_QUOTE", "GET_DIRECTIONS", "OUTBOUND_CLICK", "CONTACT", "ENGAGEMENT", "STORE_VISIT", "STORE_SALE", "QUALIFIED_LEAD", "CONVERTED_LEAD"]).optional(), clickThroughLookbackWindowDays: z.string().optional(), countingType: z.enum(["UNSPECIFIED", "UNKNOWN", "ONE_PER_CLICK", "MANY_PER_CLICK"]).optional(), creationTime: z.string().optional(), firebaseSettings: googleAdsSearchads360V23ResourcesConversionActionFirebaseSettings.optional(), floodlightSettings: googleAdsSearchads360V23ResourcesConversionActionFloodlightSettings.optional(), googleAnalytics4Settings: googleAdsSearchads360V23ResourcesConversionActionGoogleAnalytics4Settings.optional(), id: z.string().optional(), includeInClientAccountConversionsMetric: z.boolean().optional(), includeInConversionsMetric: z.boolean().optional(), mobileAppVendor: z.enum(["UNSPECIFIED", "UNKNOWN", "APPLE_APP_STORE", "GOOGLE_APP_STORE"]).optional(), name: z.string().optional(), origin: z.enum(["UNSPECIFIED", "UNKNOWN", "WEBSITE", "GOOGLE_HOSTED", "APP", "CALL_FROM_ADS", "STORE", "YOUTUBE_HOSTED", "FLOODLIGHT"]).optional(), ownerCustomer: z.string().optional(), phoneCallDurationSeconds: z.string().optional(), primaryForGoal: z.boolean().optional(), resourceName: z.string().optional(), status: z.enum(["UNSPECIFIED", "UNKNOWN", "ENABLED", "REMOVED", "HIDDEN"]).optional(), tagSnippets: z.array(googleAdsSearchads360V23CommonTagSnippet).optional(), thirdPartyAppAnalyticsSettings: googleAdsSearchads360V23ResourcesConversionActionThirdPartyAppAnalyticsSettings.optional(), type: z.enum(["UNSPECIFIED", "UNKNOWN", "AD_CALL", "CLICK_TO_CALL", "GOOGLE_PLAY_DOWNLOAD", "GOOGLE_PLAY_IN_APP_PURCHASE", "UPLOAD_CALLS", "UPLOAD_CLICKS", "WEBPAGE", "WEBSITE_CALL", "STORE_SALES_DIRECT_UPLOAD", "STORE_SALES", "FIREBASE_ANDROID_FIRST_OPEN", "FIREBASE_ANDROID_IN_APP_PURCHASE", "FIREBASE_ANDROID_CUSTOM", "FIREBASE_IOS_FIRST_OPEN", "FIREBASE_IOS_IN_APP_PURCHASE", "FIREBASE_IOS_CUSTOM", "THIRD_PARTY_APP_ANALYTICS_ANDROID_FIRST_OPEN", "THIRD_PARTY_APP_ANALYTICS_ANDROID_IN_APP_PURCHASE", "THIRD_PARTY_APP_ANALYTICS_ANDROID_CUSTOM", "THIRD_PARTY_APP_ANALYTICS_IOS_FIRST_OPEN", "THIRD_PARTY_APP_ANALYTICS_IOS_IN_APP_PURCHASE", "THIRD_PARTY_APP_ANALYTICS_IOS_CUSTOM", "ANDROID_APP_PRE_REGISTRATION", "ANDROID_INSTALLS_ALL_OTHER_APPS", "FLOODLIGHT_ACTION", "FLOODLIGHT_TRANSACTION", "GOOGLE_HOSTED", "LEAD_FORM_SUBMIT", "SALESFORCE", "SEARCH_ADS_360", "SMART_CAMPAIGN_AD_CLICKS_TO_CALL", "SMART_CAMPAIGN_MAP_CLICKS_TO_CALL", "SMART_CAMPAIGN_MAP_DIRECTIONS", "SMART_CAMPAIGN_TRACKED_CALLS", "STORE_VISITS", "WEBPAGE_CODELESS", "UNIVERSAL_ANALYTICS_GOAL", "UNIVERSAL_ANALYTICS_TRANSACTION", "GOOGLE_ANALYTICS_4_CUSTOM", "GOOGLE_ANALYTICS_4_PURCHASE"]).optional(), valueSettings: googleAdsSearchads360V23ResourcesConversionActionValueSettings.optional(), viewThroughLookbackWindowDays: z.string().optional()}); export const googleAdsSearchads360V23ServicesMutateConversionActionResult = z.object({conversionAction: googleAdsSearchads360V23ResourcesConversionAction.optional(), resourceName: z.string().optional()}); export const googleAdsSearchads360V23ServicesMutateConversionActionsResponse = z.object({partialFailureError: googleRpcStatus.optional(), results: z.array(googleAdsSearchads360V23ServicesMutateConversionActionResult).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 }; /** * Creates, updates or removes conversion actions. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ConversionActionError]() [CurrencyCodeError]() [DatabaseError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]() [NewResourceCreationError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [StringLengthError]() * * POST /v23/customers/{customersId}/conversionActions:mutate */ export const createApiV23CustomersCustomersIdConversionActionsMutate = async (args: CreateApiV23CustomersCustomersIdConversionActionsMutateArgs, options?: CreateApiV23CustomersCustomersIdConversionActionsMutateOptions) => { const {baseUrl = "https://searchads360.googleapis.com", fetch: fetchFn = fetch, Oauth2, Oauth2c} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (Oauth2 !== undefined) headers.set('authorization', `Bearer ${Oauth2}`) if (Oauth2c !== undefined) headers.set('authorization', `Bearer ${Oauth2c}`) const url = `${baseUrl.replace(/\/+$/, '')}/v23/customers/${encodeURIComponent(String(args.customersId))}/conversionActions:mutate${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(googleAdsSearchads360V23ServicesMutateConversionActionsResponse, await res.json()) };