Обзор Promotions sub-API

Промоакции позволяют показывать специальные предложения для товаров, которые вы продаете в Google. Промоакции показываются в разных сервисах Google, в том числе в Google Поиске, на вкладке "Покупки" и в браузере Chrome. Чтобы промоакция была одобрена, она должна соответствовать определенным требованиям. Подробнее о требованиях к промоакциям…

Когда вы добавляете промоакцию для товаров, покупатели видят ссылку на специальное предложение. Примеры: "Скидка 15 %" или "Бесплатная доставка". Ссылки на предложения помогают делать товары привлекательнее и стимулировать покупки. Также все промоакции должны применяться при оплате заказа в онлайн-магазине или в точке продажи.

Подробнее об основах промоакций…

Требования

Прежде чем показывать ваши промоакции, Google должен получить определенную информацию о вашей компании и товарах. Что вам нужно:

Кроме того, вам нужно зарегистрировать аккаунт Merchant Center в программе промоакций. Если вы не уверены, зарегистрированы ли вы в программе, проверьте Merchant Center.

Если вы не зарегистрированы, заполните форму запроса. Вам сообщат, когда можно будет внедрять промоакции.

Подробнее о требованиях к продавцам и правилах участия в программе…

Как создать источник данных

Чтобы создать источник данных для промоакций, используйте метод accounts.dataSources.create. Если у вас есть источник данных для промоакций, используйте метод accounts.dataSources.list, чтобы получить все источники данных. Затем вы можете использовать поле name источника данных для создания промоакций.

Чтобы в будущем обращаться к ним напрямую в вызовах API, мы настоятельно рекомендуем сохранить accounts.dataSources.name для каждой промоакции в локальной базе данных. Вы можете выполнить однократное заполнение локальной базы данных.

В примере ниже показано, как создать источник данных для промоакций:

POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources

{
  "displayName": "{DISPLAY_NAME}",
  "promotionDataSource": {
    "contentLanguage": "{CONTENT_LANGUAGE}",
    "targetCountry": "{TARGET_COUNTRY}"
  }
}

Замените следующее:

  • {ACCOUNT_ID} – уникальный идентификатор вашего аккаунта, который показывается в интерфейсе Merchant Center.
  • {DISPLAY_NAME} – отображаемое название источника данных.
  • {CONTENT_LANGUAGE} – двухбуквенный код языка товаров в источнике данных по стандарту ISO 639-1.
  • {TARGET_COUNTRY} – код CLDR целевой страны, в которой вы хотите показывать промоакции.

После успешного выполнения запроса вы увидите следующий ответ, содержащий сведения о созданном источнике данных для промоакций:

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "{DISPLAY_NAME}",
  "promotionDataSource": {
    "targetCountry": "{TARGET_COUNTRY}",
    "contentLanguage": "{CONTENT_LANGUAGE}"
  },
  "input": "API"
}

Запустите промоакцию

Вы можете использовать метод accounts.promotions.insert, чтобы создать или обновить промоакцию. Метод accounts.promotions.insert принимает в качестве входных данных ресурс promotions и название источника данных. Если операция прошла успешно, возвращает новую или обновленную промоакцию.

Чтобы создать промоакцию, нужно указать название источника данных. В запросе также необходимо указать значения следующих полей:

  • contentLanguage
  • redemptionChannel
  • promotionId
  • targetCountry
  • attributes.offerType
  • attributes.genericRedemptionCode
  • attributes.couponValueType
  • attributes.productApplicability
  • attributes.promotionEffectiveTimePeriod.endTime
  • attributes.promotionEffectiveTimePeriod.startTime
  • attributes.longTitle

Google проверяет и одобряет промоакции, прежде чем показывать их в сервисах. Подробнее о проверке промоакций…

Рекомендуем ознакомиться с правилами в отношении промоакций, чтобы убедиться, что ваши промоакции соответствуют правилам в отношении товарной рекламы и приносят пользу покупателям.

В следующем запросе показано, как создать торговую акцию, которая действует только в интернет-магазине:

HTTP

POST https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions:insert

{
"promotion": {
  "name": "{PROMOTION_NAME}",
  "promotionId": "{PROMOTION_ID}",
  "targetCountry": "{TARGET_COUNTRY}",
  "redemptionChannel": [
    "ONLINE"
  ],
  "contentLanguage": "{CONTENT_LANGUAGE}",
  "attributes": {
    "promotionDisplayTimePeriod": {
      "endTime": "{PROMOTION_END_TIME}",
      "startTime": "{PROMOTION_START_TIME}"
    },
    "offerType": "{OFFER_TYPE}",
    "longTitle": "{LONG_TITLE}"
  }
},
"dataSource": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}"
}

cURL

  curl --request POST \
'https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions:insert?key=[YOUR_API_KEY]' \
--header 'Authorization: Bearer {ACCESS_TOKEN}' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"dataSource":"{DATASOURCE_ID}","promotion":{"name":"accounts/{ACCOUNT_ID}/promotions/{PROMOTION_ID}y","promotionId":"abc","contentLanguage":"en","targetCountry":"US","redemptionChannel":["ONLINE"]}}' \
--compressed

Ознакомьтесь с минимальными требованиями к атрибуту "идентификатор промоакции".

Допустимые значения для обязательного поля offerType – NO_CODE и GENERIC_CODE. Если вы не укажете одно из этих значений, запрос к API завершится неудачно и будет возвращен ответ HTTP 400 [offer_type] validation/missing_required: Invalid or missing required attribute: offer_type. Аналогичное сообщение об ошибке возвращается, если не указать ни одно из обязательных полей.

Если вы не укажете значение для поля attributes.genericRedemptionCode, запрос завершится неудачно с HTTP-ответом 400 [genericRedemptionCode] No redemption code provided.

Значения полей promotion.attributes.promotionDisplayTimePeriod.startTime и promotion.attributes.promotionDisplayTimePeriod.endTime должны быть указаны в формате yyyy-mm-ddThh:mm:ssZ. Обязательно замените значения этих полей на даты из будущего.

Подробнее о спецификации данных промоакций…

Рекомендации по созданию промоакций собраны в этой статье.

Список атрибутов, связанных с промоакциями, можно найти в разделе Как добавлять атрибуты со структурированными данными.

После того как запрос на создание промоакции будет успешно выполнен, может пройти несколько минут, прежде чем промоакцию можно будет получить с помощью API или увидеть в Merchant Center.

Вот пример кода, который можно использовать для асинхронного добавления нескольких промоакций:

Java

import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.api.gax.grpc.ChannelPoolSettings;
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.protobuf.Timestamp;
import com.google.shopping.merchant.promotions.v1.Attributes;
import com.google.shopping.merchant.promotions.v1.CouponValueType;
import com.google.shopping.merchant.promotions.v1.InsertPromotionRequest;
import com.google.shopping.merchant.promotions.v1.OfferType;
import com.google.shopping.merchant.promotions.v1.ProductApplicability;
import com.google.shopping.merchant.promotions.v1.Promotion;
import com.google.shopping.merchant.promotions.v1.PromotionsServiceClient;
import com.google.shopping.merchant.promotions.v1.PromotionsServiceSettings;
import com.google.shopping.merchant.promotions.v1.RedemptionChannel;
import com.google.shopping.type.CustomAttribute;
import com.google.shopping.type.Destination.DestinationEnum;
import com.google.type.Interval;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to insert multiple promotions asynchronously. */
public class InsertPromotionsAsyncSample {

  private static String generateRandomString() {
    String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    Random random = new Random();
    StringBuilder sb = new StringBuilder(8);
    for (int i = 0; i < 8; i++) {
      sb.append(characters.charAt(random.nextInt(characters.length())));
    }
    return sb.toString();
  }

  private static Promotion createPromotion(String accountId) {
    String merchantPromotionId = generateRandomString();

    Attributes attributes =
        Attributes.newBuilder()
            .setProductApplicability(ProductApplicability.ALL_PRODUCTS)
            .setOfferType(OfferType.GENERIC_CODE)
            .setGenericRedemptionCode("ABCD1234")
            .setLongTitle("My promotion")
            .setCouponValueType(CouponValueType.PERCENT_OFF)
            .addPromotionDestinations(DestinationEnum.SHOPPING_ADS)
            .setPercentOff(10)
            // Note that promotions have a 6-month limit.
            // For more information, read here: https://support.google.com/merchants/answer/2906014
            // Also note that only promotions valid within the past 365 days are shown in the UI.
            .setPromotionEffectiveTimePeriod(
                Interval.newBuilder()
                    .setStartTime(Timestamp.newBuilder().setSeconds(1726842472))
                    .setEndTime(Timestamp.newBuilder().setSeconds(1726842473))
                    .build())
            .build();

    return Promotion.newBuilder()
        .setName(String.format("accounts/%s/merchantPromotions/%s", accountId, merchantPromotionId))
        .setPromotionId(merchantPromotionId)
        .setContentLanguage("fr")
        .setTargetCountry("CH")
        .addRedemptionChannel(RedemptionChannel.ONLINE)
        .setAttributes(attributes)
        // Custom attributes allow you to add additional information which is not available in
        // Attributes. For example, you might want to pilot experimental functionality.
        .addCustomAttributes(
            CustomAttribute.newBuilder()
                .setName("another example name")
                .setValue("another example value")
                .build())
        .build();
  }

  public static void asyncInsertPromotions(String accountId, String dataSourceId) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates a channel provider. This provider manages a pool of gRPC channels
    // to enhance throughput for bulk operations. Each individual channel in the pool
    // can handle up to approximately 100 concurrent requests.
    //
    // Channel: A single connection pathway to the service.
    // Pool: A collection of multiple channels managed by this provider.
    //   Requests are distributed across the channels in the pool.
    //
    // We recommend estimating the number of concurrent requests you'll make, divide by 50 (50%
    // utilization of channel capacity), and set the pool size to that number.
    InstantiatingGrpcChannelProvider channelProvider =
        InstantiatingGrpcChannelProvider.newBuilder()
            .setChannelPoolSettings(ChannelPoolSettings.staticallySized(30))
            .build();

    PromotionsServiceSettings merchantPromotionsServiceSettings =
        PromotionsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .setTransportChannelProvider(channelProvider)
            .build();

    try (PromotionsServiceClient merchantPromotionsServiceClient =
        PromotionsServiceClient.create(merchantPromotionsServiceSettings)) {

      // Arbitrarily creates five merchant promotions with random IDs.
      List<InsertPromotionRequest> requests = new ArrayList<>();
      for (int i = 0; i < 5; i++) {
        InsertPromotionRequest request =
            InsertPromotionRequest.newBuilder()
                .setParent(String.format("accounts/%s", accountId))
                .setPromotion(createPromotion(accountId))
                .setDataSource(String.format("accounts/%s/dataSources/%s", accountId, dataSourceId))
                .build();
        requests.add(request);
      }

      // Inserts the merchant promotions.
      List<ApiFuture<Promotion>> futures =
          requests.stream()
              .map(
                  request ->
                      merchantPromotionsServiceClient.insertPromotionCallable().futureCall(request))
              .collect(Collectors.toList());

      // Creates callback to handle the responses when all are ready.
      ApiFuture<List<Promotion>> responses = ApiFutures.allAsList(futures);
      ApiFutures.addCallback(
          responses,
          new ApiFutureCallback<List<Promotion>>() {
            @Override
            public void onSuccess(List<Promotion> results) {
              System.out.println("Inserted merchant promotions below:");
              System.out.println(results);
            }

            @Override
            public void onFailure(Throwable throwable) {
              System.out.println(throwable);
            }
          },
          MoreExecutors.directExecutor());
    } catch (Exception e) {
      System.out.println(e);
    }
  }


  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    asyncInsertPromotions(config.getAccountId().toString(), "<YOUR_DATA_SOURCE_ID>");
  }
}

Ниже приведены примеры промоакций, которые помогут вам начать работу.

Местная промоакция, которая действует для всех товаров и во всех магазинах

В примере запроса ниже показано, как создать местную промоакцию, которая будет действовать для всех товаров в аккаунте Merchant Center и всех магазинов, добавленных в связанный аккаунт профиля компании.

POST https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions:insert

{
  "promotion": {
    "promotionId": "buy_2_get_10_off",
    "contentLanguage": "en",
    "targetCountry": "US",
    "redemptionChannel": [
      "IN_STORE"
    ],
    "attributes": {
      "longTitle": "Buy 2 and get 10$ OFF purchase",
      "productApplicability": "ALL_PRODUCTS",
      "offerType": "NO_CODE",
      "couponValueType": "BUY_M_GET_MONEY_OFF",
      "promotionDisplayTimePeriod": {
        "startTime": "2024-2-06T00:47:44Z",
        "endTime": "2024-5-06T00:47:44Z"
      },
      "promotionEffectiveTimePeriod": {
        "startTime": "2024-2-06T00:47:44Z",
        "endTime": "2024-5-06T00:47:44Z"
      },
      "moneyOffAmount": {
        "amountMicros": "1000000",
        "currencyCode": "USD"
      },
      "minimumPurchaseQuantity": 2,
      "storeApplicability": "ALL_STORES",
      "promotionUrl": "http://promotionnew4url.com/",
      "promotionDestinations": [
        "LOCAL_INVENTORY_ADS"
      ],
    }
  },
  "dataSource": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}"
}

Поле productApplicability является обязательным. Он указывает, распространяется ли промоакция на все товары или только на некоторые. Допустимые значения: ALL_PRODUCTS и SPECIFIC_PRODUCTS. Подробнее о том, как выбрать товары для промоакции…

Поле couponValueType является обязательным. Он указывает на тип промоакции, которую вы проводите. Список поддерживаемых значений приведен в статье Тип значения купона. В зависимости от типа значения купона некоторые атрибуты являются обязательными.

В поле minimumPurchaseQuantity можно указать минимальное количество товаров, которое нужно приобрести, чтобы воспользоваться промоакцией. Подробнее о минимальном количестве товаров в заказе по условиям промоакции…

Аналогичным образом можно использовать поле minimumPurchaseAmount, чтобы задать минимальную сумму покупки, необходимую для участия в промоакции. Подробнее о минимальной сумме покупки…

Подробнее о том, какие значения нужно указать при создании местной промоакции, рассказывается в спецификации источника данных для местных промоакций.

Торговая акция, которая действует только в интернет-магазине и распространяется на определенные товары и требует ввода кода погашения.

В приведенном ниже примере запроса показано, как создать торговую акцию, которая действует только в интернет-магазине и применяется к выбранным товарам с кодом погашения.

POST https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions:insert

{
 "promotion": {
   "promotionId": "25_pct_off",
   "contentLanguage": "en",
   "targetCountry": "US",
   "redemptionChannel": [
     "ONLINE"
   ],
   "attributes": {
     "longTitle": "10% off on selected items",
     "productApplicability": "SPECIFIC_PRODUCTS",
     "offerType": "GENERIC_CODE",
     "genericRedemptionCode": "SPRINGSALE",
     "couponValueType": "PERCENT_OFF",
     "promotionDisplayTimePeriod": {
       "startTime": "2024-2-06T00:47:44Z",
       "endTime": "2024-5-06T00:47:44Z"
     },
     "promotionEffectiveTimePeriod": {
       "startTime": "2024-2-06T00:47:44Z",
       "endTime": "2024-5-06T00:47:44Z"
     },
     "percentOff": 25,
     "promotionDestinations": [
       "FREE_LISTINGS"
     ],
     "itemIdInclusion": [
       "1499860100",
       "1499860101",
       "1499860102",
       "1499860103",
       "1499860104"
     ],
   }
 },
 "dataSource": "accounts/{ACCOUNT_ID}/dataSources/1000000573361824"
}

Посмотреть промоакции

Чтобы посмотреть промоакцию, используйте значок accounts.promotions.get. Этот запрос GET доступен только для чтения. Для этого вам понадобится merchantId и идентификатор промоакции. Метод GET возвращает соответствующий ресурс промоакций.

Пример:

HTTP

GET https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions/{PROMOTION_ID}

cURL

  curl \
   'https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions/{PROMOTION_ID}?key=[YOUR_API_KEY]' \
   --header 'Authorization: Bearer {ACCESS_TOKEN}' \
   --header 'Accept: application/json' \
   --compressed

Замените следующее:

  • {ACCOUNT_ID} – уникальный идентификатор вашего аккаунта Merchant Center.
  • {PROMOTION_ID} – уникальный идентификатор промоакции, которую вы хотите получить. Формат: {CHANNEL} ~{CONTENT_LANGUAGE}~ {TARGET_COUNTRY}~{PROMOTION_ID} .

Обратите внимание, что созданная промоакция станет доступна через API в течение нескольких минут.

Как посмотреть местную промоакцию

В приведенном ниже примере запроса извлекается местная промоакция с идентификатором промоакции in_store~en~US~buy_2_get_10_off.

GET https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions/in_store~en~US~buy_2_get_10_off

Если запрос выполнен успешно, вы увидите следующий ответ:

{
 "name": "accounts/{ACCOUNT_ID}/promotions/in_store~en~US~buy_2_get_10_off",
 "promotionId": "buy_2_get_10_off",
 "contentLanguage": "en",
 "targetCountry": "US",
 "redemptionChannel": [
   "IN_STORE"
 ],
 "attributes": {
   "longTitle": "Buy 2 and get 10$ OFF purchase",
   "productApplicability": "ALL_PRODUCTS",
   "offerType": "NO_CODE",
   "couponValueType": "BUY_M_GET_MONEY_OFF",
   "promotionDisplayTimePeriod": {
     "startTime": "2024-2-06T00:47:44Z",
     "endTime": "2024-5-06T00:47:44Z"
   },
   "promotionEffectiveTimePeriod": {
     "startTime": "2024-2-06T00:47:44Z",
     "endTime": "2024-5-06T00:47:44Z"
   },
   "moneyOffAmount": {
     "amountMicros": "1000000",
     "currencyCode": "USD"
   },
   "minimumPurchaseQuantity": 2,
   "storeApplicability": "ALL_STORES",
   "promotionUrl": "http://promotionnew4url.com/",
   "promotionDestinations": [
     "LOCAL_INVENTORY_ADS"
   ],
 }
 "dataSource": "accounts/{ACCOUNT_ID}/dataSources/1000000573361824"
}

В поле moneyOffAmount этого примера указана скидка, предлагаемая в рамках промоакции. Подробнее о денежной скидке в рамках промоакции…

В поле promotionUrl в этом примере указана ссылка на сайт магазина, где покупатели могут найти дополнительную информацию о промоакции. Если вы не добавите поле promotionUrl, то при создании промоакции для рекламы местного ассортимента будет возвращена ошибка.

Посмотреть онлайн-промоакцию

В приведенном ниже примере запроса извлекается торговая акция, которая действует только в интернет-магазине, с идентификатором промоакции online~en~US~25_pct_off.

GET https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions/online~en~US~25_pct_off
{
 "name": "accounts/{ACCOUNT_ID}/promotions/online~en~US~25_pct_off",
 "promotionId": "25_pct_off",
 "contentLanguage": "en",
 "targetCountry": "US",
 "redemptionChannel": [
   "ONLINE"
 ],
 "attributes": {
   "longTitle": "10% off on selected items",
   "productApplicability": "SPECIFIC_PRODUCTS",
   "offerType": "GENERIC_CODE",
   "genericRedemptionCode": "WINTERGIFT",
   "couponValueType": "PERCENT_OFF",
   "promotionDisplayTimePeriod": {
     "startTime": "2024-2-06T00:47:44Z",
     "endTime": "2024-5-06T00:47:44Z"
   },
   "promotionEffectiveTimePeriod": {
     "startTime": "2024-2-06T00:47:44Z",
     "endTime": "2024-5-06T00:47:44Z"
   },
   "percentOff": 25,
   "promotionDestinations": [
     "FREE_LISTINGS"
   ],
   "itemIdInclusion": [
     "1499860100",
     "1499860101",
     "1499860102",
     "1499860103",
     "1499860104"
   ],
 }
 "dataSource": "accounts/{ACCOUNT_ID}/dataSources/{dataSource}"
}

В поле itemIdInclusion, используемом в этом примере, указаны товары, на которые распространяется промоакция. Подробнее об идентификаторах товаров для продвижения…

Как посмотреть список промоакций

Чтобы посмотреть все созданные промоакции, используйте метод promotions.list.

Пример запроса:

HTTP

GET https://merchantapi.googleapis.com/promotions/v1/{ACCOUNT_ID}/promotions

cURL

  curl \
   'https://merchantapi.googleapis.com/promotions/v1/accounts/{ACCOUNT_ID}/promotions?key=[YOUR_API_KEY]' \
   --header 'Authorization: Bearer {ACCESS_TOKEN}' \
   --header 'Accept: application/json' \
   --compressed

В ответе будет список всех промоакций в вашем аккаунте. Для каждой промоакции можно посмотреть подробную информацию, например promotionId, redemptionChannel, dataSource, promotionStatus и т. д.

Как посмотреть статус промоакции

Чтобы узнать статус промоакции, посмотрите атрибут promotionStatus, возвращаемый методом promotions.get или promotions.list.

Поле promotionStatus может иметь следующие значения:

  • IN_REVIEW – промоакция ещё проверяется.
  • REJECTED: промоакция отклонена.
  • LIVE – промоакция одобрена и активна.
  • STOPPED: промоакция остановлена в аккаунте.
  • EXPIRED – промоакция больше не активна.
  • PENDING: промоакция не остановлена, все проверки пройдены, но дата начала ещё не наступила.
  • STATE_UNSPECIFIED: неизвестное состояние промоакции.

Подробнее о проверке промоакций…

Пример статуса промоакции

В приведенных ниже примерах показана разница между успешными и неудачными запросами.

Не задано сопоставление товаров

В теле ответа ниже показана онлайн-промоакция, отклоненная из-за отсутствия сопоставления товаров.

  "promotionStatus": {
    "destinationStatuses": [
      {
        "reportingContext": "FREE_LISTINGS",
        "status": "REJECTED"
      }
    ],
    "itemLevelIssues": [
      {
        "code": "promotion_sku_unmapped",
        "severity": "DISAPPROVED",
        "resolution": "merchant_action",
        "reportingContext": "FREE_LISTINGS",
        "description": "Unmapped",
        "detail": "This promotion couldn't be tested during review because it doesn't apply to any products that are currently in your Products feed",
        "documentation": "https://support.google.com/merchants/answer/2906014",
        "applicableCountries": [
          "US"
        ]
      },
      {
        "code": "promotion_sku_additional_requirements",
        "severity": "DISAPPROVED",
        "resolution": "merchant_action",
        "reportingContext": "FREE_LISTINGS",
        "description": "Promotion conditions not allowed",
        "detail": "This promotion has additional requirements that are not allowed such as requiring customers to verify additional details like phone number or ID before showing the promotion details",
        "documentation": "https://support.google.com/merchants/answer/2906014",
        "applicableCountries": [
          "US"
        ]
      }
    ]
  }

Чтобы устранить проблемы с отклоненными промоакциями и узнать, как избежать этого в будущем, ознакомьтесь со статьей Как устранять проблемы с отклоненными промоакциями.

Если созданная вами промоакция не будет одобрена, вы получите электронное письмо с указанием причины отклонения и инструкциями по устранению проблем.

Промоакция на рассмотрении

В теле ответа ниже показана промоакция, которая ещё проверяется.

  "promotionStatus": {
    "destinationStatuses": [
      {
        "reportingContext": "FREE_LISTINGS",
        "status": "PENDING"
      },
      {
        "destination": "SHOPPING_ADS",
        "status": "PENDING"
      }
    ],
    "itemLevelIssues": []
  }

Одобренная и активная промоакция

В теле ответа ниже показана промоакция, которая видна покупателям.

  "promotionStatus": {
    "destinationStatuses": [
      {
        "reportingContext": "FREE_LISTINGS",
        "status": "LIVE"
      },
      {
        "destination": "SHOPPING_ADS",
        "status": "LIVE"
 }  ],
    "itemLevelIssues": []
  }

Дополнительную информацию можно найти в разделе Часто задаваемые вопросы о статусе промоакций.

Как удалить промоакции

Удалить промоакцию с помощью API нельзя. Чтобы удалить промоакцию, вам потребуется перейти в интерфейс Merchant Center. Подробнее о том, как изменить промоакцию или ее статус…

Чтобы завершить промоакцию, можно использовать метод accounts.promotions.insert и изменить значение поля attributes.promotionEffectiveTimePeriod.endTime на время в прошлом.

Подробнее…