/**
 * Copyright 2023 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


export declare namespace google.ads.integration.service.ads {
  export interface GetConversionTrackingIdRequest {}
}
export declare namespace google.ads.integration.service.ads {
  export interface GetConversionTrackingIdResponse {
    /**
     * Conversion tracking id with the format like 'AW-XXXXXXXXX'
     *
     * The partner attaches this id in the gTag installed on the
     * website.
     */
    conversionTrackingId?: string;
  }
}


export declare namespace google.ads.integration.service.ads {
  /**
   * Service called by the partner to finish the conversion tracking setup.
   *
   * This service is provided by the Ads app.
   */
  export interface ConversionTrackingIdService {
    getConversionTrackingId(request: google.ads.integration.service.ads
                                .GetConversionTrackingIdRequest):
        Promise<
            google.ads.integration.service.ads.GetConversionTrackingIdResponse>;
  }
}
