Product Statuses API

The purpose of the Product Statuses API is to identify and gather information about product issues. By default, the API only returns information about your valid products. To receive all details of your product, set the includeInvalidInsertedItems flag to true. We recommend that you call the includeInvalidInsertedItems API periodically to identify issues with your products.

get

The productstatuses.get method retrieves the data quality status of one product.

GET https://www.googleapis.com/content/v2/{merchantID}/productstatuses/{productId}?destinations=Shopping&includeAttributes=true&fields=productId%2Ctitle

The following are the optional URL parameters for the productstatuses.get method:

{merchantID}
The merchant ID.
{productID}
The product ID. For a product ID example, refer to the REST ID attribute in the Product ID guide.
destinations
A comma-separated list of destinations. The default value is Shopping, which corresponds to the Shopping Ads program.
includeAttributes
The flag to include the full product data in the response. The default value is false.

Here is a sample JSON response from a productstatuses.get call:

{
"kind": "content#productStatus",
"productId": "online:en:US:63",
"title": "Third Product",
"link": "http://examplemenc.com/",
"destinationStatuses": [
 {
  "destination": "ShoppingActions",
  "intention": "required",
  "approvalStatus": "disapproved",
  "approvalPending": false
 },
 {
  "destination": "SurfacesAcrossGoogle",
  "intention": "required",
  "approvalStatus": "disapproved",
  "approvalPending": false
 }
],
"itemLevelIssues": [
 {
  "code": "strong_id_inaccurate",
  "servability": "disapproved",
  "resolution": "merchant_action",
  "attributeName": "mpn",
  "destination": "Shopping",
  "description": "Incorrect product identifier [mpn]",
  "detail": "Use the manufacturer's product identifiers (GTIN, brand, MPN)",
  "documentation": "https://support.google.com/merchants/answer/160161"
 },
 {
  "code": "image_link_internal_error",
  "servability": "disapproved",
  "resolution": "merchant_action",
  "attributeName": "image link",
  "destination": "Shopping",
  "description": "Processing failed [image link]",
  "detail": "Wait for the product image to be crawled again (up to 3 days)",
  "documentation": "https://support.google.com/merchants/answer/6240184"
 },
 {
  "code": "landing_page_error",
  "servability": "disapproved",
  "resolution": "merchant_action",
  "attributeName": "link",
  "destination": "Shopping",
  "description": "Unavailable desktop landing page",
  "detail": "Update your website or landing page URL to enable access from desktop devices",
  "documentation": "https://support.google.com/merchants/answer/6098155"
 },
 {
  "code": "missing_condition_microdata",
  "servability": "unaffected",
  "resolution": "merchant_action",
  "destination": "Shopping",
  "description": "Missing or invalid data [condition]",
  "detail": "Add valid structured data markup to your landing page",
  "documentation": "https://support.google.com/merchants/answer/6183460"
 },
 {
  "code": "mobile_landing_page_error",
  "servability": "disapproved",
  "resolution": "merchant_action",
  "attributeName": "link",
  "destination": "Shopping",
  "description": "Unavailable mobile landing page",
  "detail": "Update your website or landing page URL to enable access from mobile devices",
  "documentation": "https://support.google.com/merchants/answer/6098296"
 }
],
"creationDate": "2019-02-15T20:30:15Z",
"lastUpdateDate": "2019-02-26T16:40:11Z",
"googleExpirationDate": "2019-03-28T16:40:11Z"
}

Resources

The JSON body returned from the get call has several sections. All products have the basic information and the destination statuses returned, but only products with problems have the item level issues returned. The basic information is a series of individual attributes, but the other sections are blocks of attributes since there may be multiple issues for a product.

Basic information

kind
The value of kind is always content#productStatus to indicate the body from a productstatuses call.
creationDate
The date that the product was created.
lastUpdateDate
The last time that the product was updated.
googleExpirationDate
The date that the product expires.
productId
The REST ID of the product.
title
The title of the product.
link
The URL link of the product.

Destination statuses

destination
Destinations such as:
  • shopping ads
  • ShoppingActions
  • surfaces across google
  • shopping
intention
The intention of the destination, which can be one of the following:
  • default
  • excluded
  • optional
  • required
approvalStatus
The status can be one of the following:
  • approved
  • disapproved
approvalPending
A boolean that indicates that an approval status has not been determined.

Item-level issues

code
The error code that is used to determine the problem.
servability
Indicates whether the product is shown as:
  • disapproved, which means that the problem prevents the product from being shown.
  • unaffected, which means that the data quality problem doesn't prevent the product from being shown on the mall.
resolution
Informs if the merchant can solve the issue.
attributeName
The attribute name that's affected.
destination
The destination that's affected.
description
The description of the product.
detail
Gives more information about the problem.
documentation
Tells where to find the documentation about the problem.

list

The productstatuses.list method retrieves a list of products that have issues.

GET https://www.googleapis.com/content/v2/{merchantID}/productstatuses?destinations=Shopping&includeAttributes=false&includeInvalidInsertedItems=true&maxResults=3&pageToken=5108b52782905aa9

The following are the optional parameters for the productstatuses.list method:

destinations

The destination, in this case Shopping. The base URL is

https://www.googleapis.com/content/v2
{merchantID}

Replace with your merchant ID.

pageToken

Used to get the 2nd and subsequent pages. Every page has a nextPageToken and you pass that back to get the next page in the sequence.

destinations

A comma-separated list of destinations. The default value is Shopping.

includeAttributes

The flag to include the full product data in the response. The default value is false.

includeInvalidInsertedItems

A flag that includes invalid inserted items if true. The default value is false.

maxResults

The number of results to return per page.

The following is a sample JSON response from a productstatuses.get call (note that the resource returned in the productstatuses.list is in a similar format as the individual product GET API call):

{
"kind": "content#productstatusesListResponse",
"nextPageToken": "632fd090c95712c6",
"resources": [
 {
  "kind": "content#productStatus",
  "productId": "online:en:US:20",
  "title": "twenty Product",
  "link": "http://examplemenc.com/",
  "destinationStatuses": [
   {
    "destination": "ShoppingActions",
    "intention": "required",
    "approvalStatus": "disapproved",
    "approvalPending": false
   },
   {
    "destination": "SurfacesAcrossGoogle",
    "intention": "required",
    "approvalStatus": "disapproved",
    "approvalPending": false
   }
  ],
  "creationDate": "2019-01-14T18:23:04Z",
  "lastUpdateDate": "2019-02-08T22:28:16Z",
  "googleExpirationDate": "2019-03-10T22:28:16Z"
 },
 {
  "kind": "content#productStatus",
  "productId": "online:en:US:43",
  "title": "Green shirt",
  "link": "https://example.com/shirt-green/",
  "destinationStatuses": [
   {
    "destination": "ShoppingActions",
    "intention": "required",
    "approvalStatus": "approved",
    "approvalPending": false
   },
   {
    "destination": "SurfacesAcrossGoogle",
    "intention": "required",
    "approvalStatus": "approved",
    "approvalPending": false
   }
  ],
  "creationDate": "2019-01-29T21:14:36Z",
  "lastUpdateDate": "2019-02-21T18:47:44Z",
  "googleExpirationDate": "2019-03-23T18:47:44Z"
 },
 {
  "kind": "content#productStatus",
  "productId": "online:en:US:40",
  "title": "Black hat",
  "link": "https://example.com/hat-black/",
  "destinationStatuses": [
   {
    "destination": "ShoppingActions",
    "intention": "required",
    "approvalStatus": "disapproved",
    "approvalPending": false
   },
   {
    "destination": "SurfacesAcrossGoogle",
    "intention": "required",
    "approvalStatus": "approved",
    "approvalPending": false
   }
  ],
  "creationDate": "2019-01-29T21:14:36Z",
  "lastUpdateDate": "2019-02-21T18:47:44Z",
  "googleExpirationDate": "2019-03-23T18:47:44Z"
 }
]
}

Testing the productstatuses.list API

The productstatuses.list API should be perfectly safe to test in production since it does not make any changes, but merely reports on the status.

V2 to V2.1 changes

  • The product attribute was removed, along with the includeAttributes parameter. To retrieve attributes of the product corresponding to a status, use the Products service and the value of the new productId field.

  • The parameter includeInvalidInsertedItems has been removed. The productId of every product is now returned regardless of whether the product is valid.

  • The fields intention, approvalStatus, and approvalPending in destinationStatuses have been replaced by status, which is a string that can be one of approved, disapproved, or pending.

  • dataQualityIssues have been replaced by itemLevelIssues.

For more information about the changes in V2.1, refer to Migrating from V2 to V2.1.