import {z} from 'zod' export type GoogleAdsSearchads360V23ResourcesAdGroupAiMaxAdGroupSetting = {disableSearchTermMatching?: boolean | undefined}; export type GoogleAdsSearchads360V23ResourcesAdGroupAudienceSetting = {useAudienceGrouped?: boolean | undefined}; export type GoogleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettingsDemandGenChannelControlsDemandGenSelectedChannels = {discover?: boolean | undefined, display?: boolean | undefined, gmail?: boolean | undefined, youtubeInFeed?: boolean | undefined, youtubeInStream?: boolean | undefined, youtubeShorts?: boolean | undefined}; export type GoogleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettingsDemandGenChannelControls = {channelConfig?: ('UNSPECIFIED' | 'UNKNOWN' | 'CHANNEL_STRATEGY' | 'SELECTED_CHANNELS') | undefined, channelStrategy?: ('UNSPECIFIED' | 'UNKNOWN' | 'ALL_CHANNELS' | 'ALL_OWNED_AND_OPERATED_CHANNELS') | undefined, selectedChannels?: GoogleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettingsDemandGenChannelControlsDemandGenSelectedChannels | undefined}; export type GoogleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettings = {channelControls?: GoogleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettingsDemandGenChannelControls | undefined}; export type GoogleAdsSearchads360V23CommonTargetRestriction = {bidOnly?: boolean | undefined, targetingDimension?: ('UNSPECIFIED' | 'UNKNOWN' | 'KEYWORD' | 'AUDIENCE' | 'TOPIC' | 'GENDER' | 'AGE_RANGE' | 'PLACEMENT' | 'PARENTAL_STATUS' | 'INCOME_RANGE') | undefined}; export type GoogleAdsSearchads360V23CommonTargetRestrictionOperation = {operator?: ('UNSPECIFIED' | 'UNKNOWN' | 'ADD' | 'REMOVE') | undefined, value?: GoogleAdsSearchads360V23CommonTargetRestriction | undefined}; export type GoogleAdsSearchads360V23CommonTargetingSetting = {targetRestrictionOperations?: Array | undefined, targetRestrictions?: Array | undefined}; export type GoogleAdsSearchads360V23CommonCustomParameter = {key?: string | undefined, value?: string | undefined}; export type GoogleAdsSearchads360V23ResourcesAdGroupVerticalAdsFormatSetting = {disableTextAds?: boolean | undefined, enableBookingLinks?: boolean | undefined, enableVerticalPromotionAds?: boolean | undefined}; export type GoogleAdsSearchads360V23ResourcesAdGroup = {adRotationMode?: ('UNSPECIFIED' | 'UNKNOWN' | 'OPTIMIZE' | 'ROTATE_FOREVER') | undefined, aiMaxAdGroupSetting?: GoogleAdsSearchads360V23ResourcesAdGroupAiMaxAdGroupSetting | undefined, audienceSetting?: GoogleAdsSearchads360V23ResourcesAdGroupAudienceSetting | undefined, baseAdGroup?: string | undefined, campaign?: string | undefined, cpcBidMicros?: unknown | undefined, cpmBidMicros?: unknown | undefined, cpvBidMicros?: unknown | undefined, creationTime?: string | undefined, demandGenAdGroupSettings?: GoogleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettings | undefined, displayCustomBidDimension?: ('UNSPECIFIED' | 'UNKNOWN' | 'KEYWORD' | 'AUDIENCE' | 'TOPIC' | 'GENDER' | 'AGE_RANGE' | 'PLACEMENT' | 'PARENTAL_STATUS' | 'INCOME_RANGE') | undefined, effectiveCpcBidMicros?: unknown | undefined, effectiveLabels?: Array | undefined, effectiveTargetCpaMicros?: unknown | undefined, effectiveTargetCpaSource?: ('UNSPECIFIED' | 'UNKNOWN' | 'CAMPAIGN_BIDDING_STRATEGY' | 'AD_GROUP' | 'AD_GROUP_CRITERION') | undefined, effectiveTargetCpc?: unknown | undefined, effectiveTargetCpcSource?: ('UNSPECIFIED' | 'UNKNOWN' | 'CAMPAIGN_BIDDING_STRATEGY' | 'AD_GROUP' | 'AD_GROUP_CRITERION') | undefined, effectiveTargetRoas?: number | undefined, effectiveTargetRoasSource?: ('UNSPECIFIED' | 'UNKNOWN' | 'CAMPAIGN_BIDDING_STRATEGY' | 'AD_GROUP' | 'AD_GROUP_CRITERION') | undefined, endDate?: string | undefined, engineId?: string | undefined, engineStatus?: ('UNSPECIFIED' | 'UNKNOWN' | 'AD_GROUP_ELIGIBLE' | 'AD_GROUP_EXPIRED' | 'AD_GROUP_REMOVED' | 'AD_GROUP_DRAFT' | 'AD_GROUP_PAUSED' | 'AD_GROUP_SERVING' | 'AD_GROUP_SUBMITTED' | 'CAMPAIGN_PAUSED' | 'ACCOUNT_PAUSED') | undefined, excludeDemographicExpansion?: boolean | undefined, excludedParentAssetFieldTypes?: (Array<'UNSPECIFIED' | 'UNKNOWN' | 'HEADLINE' | 'DESCRIPTION' | 'MANDATORY_AD_TEXT' | 'MARKETING_IMAGE' | 'MEDIA_BUNDLE' | 'YOUTUBE_VIDEO' | 'BOOK_ON_GOOGLE' | 'LEAD_FORM' | 'PROMOTION' | 'CALLOUT' | 'STRUCTURED_SNIPPET' | 'SITELINK' | 'MOBILE_APP' | 'HOTEL_CALLOUT' | 'CALL' | 'PRICE' | 'LONG_HEADLINE' | 'BUSINESS_NAME' | 'SQUARE_MARKETING_IMAGE' | 'PORTRAIT_MARKETING_IMAGE' | 'LOGO' | 'LANDSCAPE_LOGO' | 'VIDEO' | 'CALL_TO_ACTION_SELECTION' | 'AD_IMAGE' | 'BUSINESS_LOGO' | 'HOTEL_PROPERTY' | 'DEMAND_GEN_CAROUSEL_CARD' | 'BUSINESS_MESSAGE' | 'TALL_PORTRAIT_MARKETING_IMAGE' | 'LANDING_PAGE_PREVIEW' | 'LONG_DESCRIPTION' | 'CALL_TO_ACTION'>) | undefined, excludedParentAssetSetTypes?: (Array<'UNSPECIFIED' | 'UNKNOWN' | 'PAGE_FEED' | 'DYNAMIC_EDUCATION' | 'MERCHANT_CENTER_FEED' | 'DYNAMIC_REAL_ESTATE' | 'DYNAMIC_CUSTOM' | 'DYNAMIC_HOTELS_AND_RENTALS' | 'DYNAMIC_FLIGHTS' | 'DYNAMIC_TRAVEL' | 'DYNAMIC_LOCAL' | 'DYNAMIC_JOBS' | 'LOCATION_SYNC' | 'BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP' | 'CHAIN_DYNAMIC_LOCATION_GROUP' | 'STATIC_LOCATION_GROUP' | 'HOTEL_PROPERTY' | 'TRAVEL_FEED'>) | undefined, finalUrlSuffix?: string | undefined, fixedCpmMicros?: unknown | undefined, id?: unknown | undefined, labels?: Array | undefined, languageCode?: string | undefined, lastModifiedTime?: string | undefined, name?: string | undefined, optimizedTargetingEnabled?: boolean | undefined, percentCpcBidMicros?: unknown | undefined, primaryStatus?: ('UNSPECIFIED' | 'UNKNOWN' | 'ELIGIBLE' | 'PAUSED' | 'REMOVED' | 'PENDING' | 'NOT_ELIGIBLE' | 'LIMITED') | undefined, primaryStatusReasons?: (Array<'UNSPECIFIED' | 'UNKNOWN' | 'CAMPAIGN_REMOVED' | 'CAMPAIGN_PAUSED' | 'CAMPAIGN_PENDING' | 'CAMPAIGN_ENDED' | 'AD_GROUP_PAUSED' | 'AD_GROUP_REMOVED' | 'AD_GROUP_INCOMPLETE' | 'KEYWORDS_PAUSED' | 'NO_KEYWORDS' | 'AD_GROUP_ADS_PAUSED' | 'NO_AD_GROUP_ADS' | 'HAS_ADS_DISAPPROVED' | 'HAS_ADS_LIMITED_BY_POLICY' | 'MOST_ADS_UNDER_REVIEW' | 'CAMPAIGN_DRAFT' | 'AD_GROUP_PAUSED_DUE_TO_LOW_ACTIVITY'>) | undefined, resourceName?: string | undefined, startDate?: string | undefined, status?: ('UNSPECIFIED' | 'UNKNOWN' | 'ENABLED' | 'PAUSED' | 'REMOVED') | undefined, targetCpaMicros?: unknown | undefined, targetCpcMicros?: unknown | undefined, targetCpmMicros?: unknown | undefined, targetCpvMicros?: unknown | undefined, targetRoas?: number | undefined, targetingSetting?: GoogleAdsSearchads360V23CommonTargetingSetting | undefined, trackingUrlTemplate?: string | undefined, type?: ('UNSPECIFIED' | 'UNKNOWN' | 'SEARCH_STANDARD' | 'DISPLAY_STANDARD' | 'SHOPPING_PRODUCT_ADS' | 'HOTEL_ADS' | 'SHOPPING_SMART_ADS' | 'VIDEO_BUMPER' | 'VIDEO_TRUE_VIEW_IN_STREAM' | 'VIDEO_TRUE_VIEW_IN_DISPLAY' | 'VIDEO_NON_SKIPPABLE_IN_STREAM' | 'SEARCH_DYNAMIC_ADS' | 'SHOPPING_COMPARISON_LISTING_ADS' | 'PROMOTED_HOTEL_ADS' | 'VIDEO_RESPONSIVE' | 'VIDEO_EFFICIENT_REACH' | 'SMART_CAMPAIGN_ADS' | 'TRAVEL_ADS') | undefined, urlCustomParameters?: Array | undefined, verticalAdsFormatSetting?: GoogleAdsSearchads360V23ResourcesAdGroupVerticalAdsFormatSetting | undefined}; export type GoogleAdsSearchads360V23ServicesAdGroupOperation = {create?: GoogleAdsSearchads360V23ResourcesAdGroup | undefined, remove?: string | undefined, update?: GoogleAdsSearchads360V23ResourcesAdGroup | undefined, updateMask?: unknown | undefined}; export type GoogleAdsSearchads360V23ServicesMutateAdGroupsRequest = {operations?: Array | undefined, partialFailure?: boolean | undefined, responseContentType?: ('UNSPECIFIED' | 'RESOURCE_NAME_ONLY' | 'MUTABLE_RESOURCE') | undefined, validateOnly?: boolean | undefined}; export type CreateApiV23CustomersCustomersIdAdGroupsMutateArgs = {customersId: string, body: GoogleAdsSearchads360V23ServicesMutateAdGroupsRequest}; export type CreateApiV23CustomersCustomersIdAdGroupsMutateOptions = {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 googleAdsSearchads360V23ResourcesAdGroupAiMaxAdGroupSetting = z.object({disableSearchTermMatching: z.boolean().optional()}); export const googleAdsSearchads360V23ResourcesAdGroupAudienceSetting = z.object({useAudienceGrouped: z.boolean().optional()}); export const googleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettingsDemandGenChannelControlsDemandGenSelectedChannels = z.object({discover: z.boolean().optional(), display: z.boolean().optional(), gmail: z.boolean().optional(), youtubeInFeed: z.boolean().optional(), youtubeInStream: z.boolean().optional(), youtubeShorts: z.boolean().optional()}); export const googleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettingsDemandGenChannelControls = z.object({channelConfig: z.enum(["UNSPECIFIED", "UNKNOWN", "CHANNEL_STRATEGY", "SELECTED_CHANNELS"]).optional(), channelStrategy: z.enum(["UNSPECIFIED", "UNKNOWN", "ALL_CHANNELS", "ALL_OWNED_AND_OPERATED_CHANNELS"]).optional(), selectedChannels: googleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettingsDemandGenChannelControlsDemandGenSelectedChannels.optional()}); export const googleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettings = z.object({channelControls: googleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettingsDemandGenChannelControls.optional()}); export const googleAdsSearchads360V23CommonTargetRestriction = z.object({bidOnly: z.boolean().optional(), targetingDimension: z.enum(["UNSPECIFIED", "UNKNOWN", "KEYWORD", "AUDIENCE", "TOPIC", "GENDER", "AGE_RANGE", "PLACEMENT", "PARENTAL_STATUS", "INCOME_RANGE"]).optional()}); export const googleAdsSearchads360V23CommonTargetRestrictionOperation = z.object({operator: z.enum(["UNSPECIFIED", "UNKNOWN", "ADD", "REMOVE"]).optional(), value: googleAdsSearchads360V23CommonTargetRestriction.optional()}); export const googleAdsSearchads360V23CommonTargetingSetting = z.object({targetRestrictionOperations: z.array(googleAdsSearchads360V23CommonTargetRestrictionOperation).optional(), targetRestrictions: z.array(googleAdsSearchads360V23CommonTargetRestriction).optional()}); export const googleAdsSearchads360V23CommonCustomParameter = z.object({key: z.string().optional(), value: z.string().optional()}); export const googleAdsSearchads360V23ResourcesAdGroupVerticalAdsFormatSetting = z.object({disableTextAds: z.boolean().optional(), enableBookingLinks: z.boolean().optional(), enableVerticalPromotionAds: z.boolean().optional()}); export const googleAdsSearchads360V23ResourcesAdGroup = z.object({adRotationMode: z.enum(["UNSPECIFIED", "UNKNOWN", "OPTIMIZE", "ROTATE_FOREVER"]).optional(), aiMaxAdGroupSetting: googleAdsSearchads360V23ResourcesAdGroupAiMaxAdGroupSetting.optional(), audienceSetting: googleAdsSearchads360V23ResourcesAdGroupAudienceSetting.optional(), baseAdGroup: z.string().optional(), campaign: z.string().optional(), cpcBidMicros: z.string().optional(), cpmBidMicros: z.string().optional(), cpvBidMicros: z.string().optional(), creationTime: z.string().optional(), demandGenAdGroupSettings: googleAdsSearchads360V23ResourcesAdGroupDemandGenAdGroupSettings.optional(), displayCustomBidDimension: z.enum(["UNSPECIFIED", "UNKNOWN", "KEYWORD", "AUDIENCE", "TOPIC", "GENDER", "AGE_RANGE", "PLACEMENT", "PARENTAL_STATUS", "INCOME_RANGE"]).optional(), effectiveCpcBidMicros: z.string().optional(), effectiveLabels: z.array(z.string()).optional(), effectiveTargetCpaMicros: z.string().optional(), effectiveTargetCpaSource: z.enum(["UNSPECIFIED", "UNKNOWN", "CAMPAIGN_BIDDING_STRATEGY", "AD_GROUP", "AD_GROUP_CRITERION"]).optional(), effectiveTargetCpc: z.string().optional(), effectiveTargetCpcSource: z.enum(["UNSPECIFIED", "UNKNOWN", "CAMPAIGN_BIDDING_STRATEGY", "AD_GROUP", "AD_GROUP_CRITERION"]).optional(), effectiveTargetRoas: z.number().optional(), effectiveTargetRoasSource: z.enum(["UNSPECIFIED", "UNKNOWN", "CAMPAIGN_BIDDING_STRATEGY", "AD_GROUP", "AD_GROUP_CRITERION"]).optional(), endDate: z.string().optional(), engineId: z.string().optional(), engineStatus: z.enum(["UNSPECIFIED", "UNKNOWN", "AD_GROUP_ELIGIBLE", "AD_GROUP_EXPIRED", "AD_GROUP_REMOVED", "AD_GROUP_DRAFT", "AD_GROUP_PAUSED", "AD_GROUP_SERVING", "AD_GROUP_SUBMITTED", "CAMPAIGN_PAUSED", "ACCOUNT_PAUSED"]).optional(), excludeDemographicExpansion: z.boolean().optional(), excludedParentAssetFieldTypes: z.array(z.enum(["UNSPECIFIED", "UNKNOWN", "HEADLINE", "DESCRIPTION", "MANDATORY_AD_TEXT", "MARKETING_IMAGE", "MEDIA_BUNDLE", "YOUTUBE_VIDEO", "BOOK_ON_GOOGLE", "LEAD_FORM", "PROMOTION", "CALLOUT", "STRUCTURED_SNIPPET", "SITELINK", "MOBILE_APP", "HOTEL_CALLOUT", "CALL", "PRICE", "LONG_HEADLINE", "BUSINESS_NAME", "SQUARE_MARKETING_IMAGE", "PORTRAIT_MARKETING_IMAGE", "LOGO", "LANDSCAPE_LOGO", "VIDEO", "CALL_TO_ACTION_SELECTION", "AD_IMAGE", "BUSINESS_LOGO", "HOTEL_PROPERTY", "DEMAND_GEN_CAROUSEL_CARD", "BUSINESS_MESSAGE", "TALL_PORTRAIT_MARKETING_IMAGE", "LANDING_PAGE_PREVIEW", "LONG_DESCRIPTION", "CALL_TO_ACTION"])).optional(), excludedParentAssetSetTypes: z.array(z.enum(["UNSPECIFIED", "UNKNOWN", "PAGE_FEED", "DYNAMIC_EDUCATION", "MERCHANT_CENTER_FEED", "DYNAMIC_REAL_ESTATE", "DYNAMIC_CUSTOM", "DYNAMIC_HOTELS_AND_RENTALS", "DYNAMIC_FLIGHTS", "DYNAMIC_TRAVEL", "DYNAMIC_LOCAL", "DYNAMIC_JOBS", "LOCATION_SYNC", "BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP", "CHAIN_DYNAMIC_LOCATION_GROUP", "STATIC_LOCATION_GROUP", "HOTEL_PROPERTY", "TRAVEL_FEED"])).optional(), finalUrlSuffix: z.string().optional(), fixedCpmMicros: z.string().optional(), id: z.string().optional(), labels: z.array(z.string()).optional(), languageCode: z.string().optional(), lastModifiedTime: z.string().optional(), name: z.string().optional(), optimizedTargetingEnabled: z.boolean().optional(), percentCpcBidMicros: z.string().optional(), primaryStatus: z.enum(["UNSPECIFIED", "UNKNOWN", "ELIGIBLE", "PAUSED", "REMOVED", "PENDING", "NOT_ELIGIBLE", "LIMITED"]).optional(), primaryStatusReasons: z.array(z.enum(["UNSPECIFIED", "UNKNOWN", "CAMPAIGN_REMOVED", "CAMPAIGN_PAUSED", "CAMPAIGN_PENDING", "CAMPAIGN_ENDED", "AD_GROUP_PAUSED", "AD_GROUP_REMOVED", "AD_GROUP_INCOMPLETE", "KEYWORDS_PAUSED", "NO_KEYWORDS", "AD_GROUP_ADS_PAUSED", "NO_AD_GROUP_ADS", "HAS_ADS_DISAPPROVED", "HAS_ADS_LIMITED_BY_POLICY", "MOST_ADS_UNDER_REVIEW", "CAMPAIGN_DRAFT", "AD_GROUP_PAUSED_DUE_TO_LOW_ACTIVITY"])).optional(), resourceName: z.string().optional(), startDate: z.string().optional(), status: z.enum(["UNSPECIFIED", "UNKNOWN", "ENABLED", "PAUSED", "REMOVED"]).optional(), targetCpaMicros: z.string().optional(), targetCpcMicros: z.string().optional(), targetCpmMicros: z.string().optional(), targetCpvMicros: z.string().optional(), targetRoas: z.number().optional(), targetingSetting: googleAdsSearchads360V23CommonTargetingSetting.optional(), trackingUrlTemplate: z.string().optional(), type: z.enum(["UNSPECIFIED", "UNKNOWN", "SEARCH_STANDARD", "DISPLAY_STANDARD", "SHOPPING_PRODUCT_ADS", "HOTEL_ADS", "SHOPPING_SMART_ADS", "VIDEO_BUMPER", "VIDEO_TRUE_VIEW_IN_STREAM", "VIDEO_TRUE_VIEW_IN_DISPLAY", "VIDEO_NON_SKIPPABLE_IN_STREAM", "SEARCH_DYNAMIC_ADS", "SHOPPING_COMPARISON_LISTING_ADS", "PROMOTED_HOTEL_ADS", "VIDEO_RESPONSIVE", "VIDEO_EFFICIENT_REACH", "SMART_CAMPAIGN_ADS", "TRAVEL_ADS"]).optional(), urlCustomParameters: z.array(googleAdsSearchads360V23CommonCustomParameter).optional(), verticalAdsFormatSetting: googleAdsSearchads360V23ResourcesAdGroupVerticalAdsFormatSetting.optional()}); export const googleAdsSearchads360V23ServicesMutateAdGroupResult = z.object({adGroup: googleAdsSearchads360V23ResourcesAdGroup.optional(), resourceName: z.string().optional()}); export const googleAdsSearchads360V23ServicesMutateAdGroupsResponse = z.object({partialFailureError: googleRpcStatus.optional(), results: z.array(googleAdsSearchads360V23ServicesMutateAdGroupResult).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 ad groups. Operation statuses are returned. List of thrown errors: [AdGroupError]() [AdxError]() [AuthenticationError]() [AuthorizationError]() [BiddingError]() [BiddingStrategyError]() [DatabaseError]() [DateError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]() [ListOperationError]() [MultiplierError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperationAccessDeniedError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [SettingError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]() [UrlFieldError]() * * POST /v23/customers/{customersId}/adGroups:mutate */ export const createApiV23CustomersCustomersIdAdGroupsMutate = async (args: CreateApiV23CustomersCustomersIdAdGroupsMutateArgs, options?: CreateApiV23CustomersCustomersIdAdGroupsMutateOptions) => { 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))}/adGroups: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(googleAdsSearchads360V23ServicesMutateAdGroupsResponse, await res.json()) };