Creatives

This guide demonstrates how you can use the creatives resource to create and manage your creatives. To participate in real-time bidding, you must have creatives that have been reviewed and are approved for usage.

Create creative and submit for verification

All creatives must be approved by Google. You can submit a new creative to Google's verification pipeline by sending an HTTP POST request to the creatives Resource URI. The URI has the following format:

https://adexchangebuyer.googleapis.com/v2beta1/accounts/{accountId}/creatives/

You should use a unique creativeId for every creative; attempting to use an existing creativeId on a new creative results in an error response.

Creating different creative types

Depending on what is sent in the request body, a creative can be one of the three supported types identified below:

HTML

You can submit an HTML snippet creative for review by setting the creative's content field to an HTMLContent instance.

Request
POST https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives/
Authorization: Bearer /* auth token here */
Content-Type: application/json

{
  "advertiserName": "Google",
  "clickThroughUrls": ["https://www.google.com"],
  "creativeId": "test_creative_1",
  "html": {
    "snippet": "<html><body><a href='http://www.example.com'>Hi there!</a></body></html>",
    "width": 300,
    "height": 250
  },
  "accountId": "87654321"
}
Response
{
  "accountId": "87654321",
  "advertiserName": "Google",
  "apiUpdateTime": "2016-12-06T23:43:09.313767Z",
  "clickThroughUrls": ["https://www.google.com"],
  "creativeId": 'test_creative_1',
  "dealsStatus": 'NOT_CHECKED',
  "html": {
    "height": 250,
    "snippet": "<html><body><a href='http://www.example.com'>Hi there!</a></body></html>",
    "width": 300
  },
  "openAuctionStatus": "NOT_CHECKED",
  "version": 1
}

Video

You can submit a video creative for review by setting the creative's content field to a VideoContent instance. The VideoContent.videoUrl URL that is provided should respond with a VAST XML document. For more details on the requirements of video creatives, read how to serve video ad units.

Request
POST https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives/
Authorization: Bearer /* auth token here */
Content-Type: application/json

{
  "advertiserName": "Google",
  "clickThroughUrls": ["https://www.google.com"],
  "creativeId": "test_creative_2",
  "video": {
    "videoUrl": "https://some-ad-server.com/v/1"
  },
  "accountId": "87654321"
}
Response
{
  "accountId": "87654321",
  "advertiserName": "Google",
  "apiUpdateTime": "2016-12-07T00:03:41.430177Z",
  "clickThroughUrls": ["https://www.google.com"],
  "creativeId": "test_creative_2",
  "dealsStatus": "NOT_CHECKED",
  "openAuctionStatus": "NOT_CHECKED",
  "version": 1,
  "video": {
    "videoUrl": "https://some-ad-server.com/v/1"
  }
}

Native

You can submit a native ad creative for review by setting the creative's content field to a NativeContent instance.

Request
POST https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives/
Authorization: Bearer /* auth token here */
Content-Type: application/json

{
  "advertiserName": "Google",
  "clickThroughUrls": ["https://www.google.com"],
  "creativeId": "test-native-1",
  "native": {
    "body": "This is a test.",
    "image": {
      "url": "http://www.test-server.com/i/1",
      "width": 250,
      "height": 300
    },
    "advertiserName": "Google",
    "priceDisplayText": "",
    "callToAction": "Test Now!",
    "logo": {
      "url": "http://www.test-server.com/i/2",
      "width": 50,
      "height": 50
    },
    "appIcon": {
      "url": "http://www.test-server.com/i/3",
      "width": 192,
      "height": 192
    },
    "clickTrackingUrl": "http://www.test-server.com/tracking/ceb3bbe9-94ac-4c42-a3db-886d755e2711",
    "headline": "test-native-1",
    "starRating": 5,
    "storeUrl": "https://play.google.com/store",
    "clickLinkUrl": "https://www.google.com"
  },
  "accountId": "87654321"
}
Response
{
  "accountId": "87654321",
  "advertiserName": "Google",
  "apiUpdateTime": "2016-12-07T00:19:39.391845Z",
  "clickThroughUrls": ["https://www.google.com"],
  "creativeId": "test-native-1",
  "dealsStatus": "NOT_CHECKED",
  "native": {
    "advertiserName": "Google",
    "appIcon": {
      "height": 192,
      "url": "http://www.test-server.com/i/3",
      "width": 192
    },
    "body": "This is a test.",
    "callToAction": "Test Now!",
    "clickLinkUrl": "https://www.google.com",
    "clickTrackingUrl": "http://www.test-server.com/tracking/ceb3bbe9-94ac-4c42-a3db-886d755e2711",
    "headline": "test-native-1",
    "image": {
      "height": 300,
      "url": "http://www.test-server.com/i/1",
      "width": 250
    },
    "logo": {
      "height": 50,
      "url": "http://www.test-server.com/i/2",
      "width": 50
    },
    "starRating": 5,
    "storeUrl": "https://play.google.com/store"
  },
  "openAuctionStatus": "NOT_CHECKED",
  "version": 1
}

Creative corrections

If a creative is submitted with minor errors that would cause it to be disapproved, it will automatically be corrected. When this happens, you will see corrections in the response. For each correction, you can determine the cause of the error by the CorrectionType, and the steps taken to fix it can be found in the details.

While no additional steps are necessary to use a creative after it's been corrected and approved, corrections can indicate unexpected issues. For example, if you declare a creative as SSL capable and it's corrected to remove the SSL attribute, this indicates the creative was not actually SSL capable. In this case, the corrections provide a signal you could use to determine if the creative needs updating to make it SSL capable.

The creative resource will have a list of Correction messages, one for each correction to the creative. For example:

{
  "openAuctionStatus": "APPROVED",
  "dealsStatus": "APPROVED",
  "creativeId": "test_creative_1",
  ...
  "corrections": [
    {
      "contexts": [{
        "all": "SIMPLE_CONTEXT"
      }],
      "details": ["Added attribute: 50"],
      "type": "FLASH_FREE_ATTRIBUTE_ADDED"
    },
    {
      "contexts": [{
        "all": "SIMPLE_CONTEXT"
      }],
      "details": ["Added attribute: 47"],
      "type": "SSL_ATTRIBUTE_ADDED"
    }
  ]
}

Check status of submitted creative

You can check on the status of a creative that has been submitted to Google's verification pipeline by sending an HTTP GET request to the creatives Resource URI. The URI has the following format:

https://adexchangebuyer.googleapis.com/v2beta1/accounts/{accountId}/creatives/{creativeId}

Request

Here is an example:

GET https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives/test_creative_1

Authorization: Bearer /* auth token here */
Content-Type: application/json

Response

If successful, this method returns a creative in the response body. If your creative is still being reviewed for use in deals or the open auction, you will see the NOT_CHECKED status. For possible creative statuses, see the dealsStatus or openAuctionStatus documentation.

{
  "accountId": "87654321",
  "advertiserName": "Google",
  "apiUpdateTime": "2016-12-06T23:43:09.313767Z",
  "clickThroughUrls": ["https://www.google.com"],
  "corrections": [{"contexts": [{"all": "SIMPLE_CONTEXT"}],
                   "details": ["Added attribute: 50"],
                   "type": "FLASH_FREE_ATTRIBUTE_ADDED"}],
  "creativeId": "test_creative_1",
  "dealsStatus": "APPROVED",
  "detectedAdvertiserIds": ["5289"],
  "detectedLanguages": ["en"],
  "detectedProductCategories": [10007, 13418, 10108, 10756, 10017, 10145],
  "filteringStats": {},
  "html": {
    "height": 250,
    "snippet": "<html><body><a href='http://www.example.com'>Hi there!</a></body></html>",
    "width": 300
  },
  "openAuctionStatus": "APPROVED"
  "version": 1
}

Interpreting the servingRestrictions field

The servingRestrictions field is a list where each element identifies the contexts in which the creative will be filtered for a reason. For elements with multiple contexts, you can interpret the overall context as being the logical AND of each; for example, contextTypes of AUCTION_TYPE and LOCATION combine to indicate that the restriction applies to a specific auction type for users in a certain region. To interpret the overall set of restrictions, you should logically OR each element of servingRestrictions.

The following are examples of the servingRestrictions field as you might see in a response:

Invalid SSL

"servingRestrictions": [
  {
    "contexts": [{
      "securityType": {
        "securities": ["SSL"]
      }
    }],
    "disapprovalReasons": [{
      "details": ["Not SSL compliant."],
      "reason": "INVALID_SSL_DECLARATION"
    }],
    "status": "DISAPPROVAL"
  }
]

Disapproved for open auction and invalid SSL

"servingRestrictions": [
  {
    "contexts": [{
      "auctionType": {
        "auctionTypes": ["OPEN_AUCTION"]
      }
    }],
    "disapprovalReasons": [{
      "details": ["No click macro was declared in the snippet"],
      "reason": "PROBLEM_WITH_CLICK_MACRO"
    }],
    "status": "DISAPPROVAL"
  },
  {
    "contexts": [{
      "securityType": {
        "securities": ["SSL"]
      }
    }],
    "disapprovalReasons": [{
      "details": ["Not SSL compliant."],
      "reason": "INVALID_SSL_DECLARATION"
    }],
    "status": "DISAPPROVAL"
  }
]

Disapproved for open auction and pending region reviews

"servingRestrictions": [
  {
    "contexts": [{
      "auctionType": {
        "auctionTypes": ["OPEN_AUCTION"]
      }
    }],
    "disapprovalReasons": [{
      "details": ["No click macro was declared in the snippet"],
      "reason": "PROBLEM_WITH_CLICK_MACRO"
    }],
    "status": "DISAPPROVAL"
  },
  {
    "contexts": [
      {
        "auctionType": {
          "auctionTypes": ["OPEN_AUCTION"]
        }
      },
      {
        "location": {
          "geoCriteriaIds": [2156]
        }
      }
    ],
    "status": "PENDING_REVIEW"
  },
  {
    "contexts": [
      {
        "auctionType": {
          "auctionTypes": ["OPEN_AUCTION"]
        }
      },
      {
        "location": {
          "geoCriteriaIds": [2643]
        }
      }
    ],
    "status": "PENDING_REVIEW"
  }
]

Restricted in China

"servingRestrictions": [
  {
    "contexts": [{
      "securityType": {
        "securities": ["SSL"]
      }
    }],
    "disapprovalReasons": [{
      "details": ["Not SSL compliant."],
      "reason": "INVALID_SSL_DECLARATION"
    }],
    "status": "DISAPPROVAL"
  },
  {
    "contexts": [
      {
        "auctionType": {
          "auctionTypes": ["OPEN_AUCTION"]
        }
      },
      {
        "location": {
          "geoCriteriaIds": [2156]
        }
      }
    ],
    "status": "DISAPPROVAL"
  },
  {
    "contexts": [
      {
        "auctionType": {
          "auctionTypes": ["OPEN_AUCTION"]
        }
      },
      {
        "location": {
          "geoCriteriaIds": [2643]
        }
      }
    ],
    "status": "PENDING_REVIEW"
  }
]

Restricted for IOS + Android (flash detected)

"servingRestrictions": [
  {
    "contexts": [
      {
        "platform": {
          "platforms": ["ANDROID"]
        }
      }
    ],
    "status": "DISAPPROVAL",
    "disapprovalReasons": [{
      "reason": "UNDECLARED_FLASH_OBJECTS",
      "details": ["Detected Flash on Android."]
    }]
  },
  {
    "contexts": [
      {
        "platform": {
          "platforms": ["IOS"]
        }
      }
    ],
    "status": "DISAPPROVAL",
    "disapprovalReasons": [{
      "reason": "UNDECLARED_FLASH_OBJECTS",
      "details": ["Detected Flash on iOS."]
    }]
  }
]

Update a creative and resubmit for review

There may be circumstances where you need to update a creative after it has been created; for example, if the creative was not approved for use in real-time bidding. You can modify a creative and resubmit it for review by sending an HTTP PUT request to the creatives Resource URI. The URI has the following format:

https://adexchangebuyer.googleapis.com/v2beta1/accounts/{accountId}/creatives/{creativeId}
Request
PUT https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives/test_creative_1
Authorization: Bearer /* auth token here */
Content-Type: application/json

{
  "advertiserName": "Google",
  "clickThroughUrls": ["https://www.google.com"],
  "html": {
    "snippet": "<html><body><a href='https://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%'>Hola mundo!</a></body></html>",
    "width": 600,
    "height": 500
  },
  "accountId": "87654321"
}
Response
{
  "accountId": "87654321",
    "advertiserName": "Google",
    "apiUpdateTime": "1885-01-01T12:00:00.000000Z",
    "clickThroughUrls": ["https://www.google.com"],
    "creativeId": "test_creative_1",
    "dealsStatus": "NOT_CHECKED",
    "html": {
      "height": 500,
      "snippet": "<html><body><a href='https://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%'>Hola mundo!</a></body></html>",
      "width": 600
    },
    "openAuctionStatus": "NOT_CHECKED",
    "version": 2
}

Retrieve list of active creatives

Use the creatives.list() method to retrieve a list of the authenticated user's active creatives. It typically takes 30 to 40 minutes for a newly submitted creative's status to appear in the response.

By default, each call to the list method returns data for up to 100 creatives resources. You can control the maximum number by passing the optional pageSize parameter. The pageSize parameter can be set from 1 to 1,000 inclusive. If pageSize is set, the response will contain the nextPageToken that can be passed in the pageToken parameter in a subsequent request to retrieve the next page of results. If data has been returned for all creatives, then nextPageToken will not appear in the response.

You can optionally filter the creatives returned in the response by specifying the query parameter. You can filter on the following fields:

  • accountId
  • creativeId
  • openAuctionStatus
  • dealsStatus
  • attributes
  • disapprovalReasons

Some examples of potential queries include:

Query Meaning
accountId=12345678 Only return creatives with accountId set to "12345678".
accountId=12345678 dealsStatus:approved Only return creatives with accountId set to "12345678" and have dealsStatus set to Approved.
accountId=12345678 AND disapprovalReason:broken_url Only return creatives with accountId set to "12345678" that include BROKEN_URL as one of the disapprovalReasons.

Retrieve the list by sending an HTTP GET request to the creatives Resource URI. The URI has the following format:

GET https://adexchangebuyer.googleapis.com/v2beta1/accounts/{accountId}/creatives

Request

Here is an example that uses some of the optional parameters to filter the response. You can learn more about the available parameters in the creatives reference documentation.

GET https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives?pageSize=10&query=openAuctionStatus%3Aapproved%20dealsStatus%3Aapproved

Authorization:  Bearer /* auth token here */
X-JavaScript-User-Agent:  Google APIs Explorer

Response

If successful, this method returns a list of creatives resources in the response body:

{
  "creatives": [{
    "accountId": "87654321",
    "advertiserName": "Google",
    "apiUpdateTime": "1885-01-01T12:00:00.000000Z",
    "clickThroughUrls": ["http://www.example.com"],
    "creativeId": "test_creative_1",
    "dealsStatus": "APPROVED",
    "detectedAdvertiserIds": ["5289"],
    "detectedLanguages": ["en"],
    "detectedProductCategories": [10007, 13418, 10108, 10756],
    "filteringStats": {},
    "html": {
      "height": 500,
      "snippet": "<html><body><a href='https://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%'>Hola mundo!</a></body></html>",
      "width": 600
    },
    "openAuctionStatus": "APPROVED",
    "version": 1
  }, {
    "accountId": "87654321",
    "advertiserName": "Google",
    "apiUpdateTime": "2015-21-10T12:00:00.000000Z",
    "clickThroughUrls": ["http://www.example.com"],
    "creativeId": "test_creative_2",
    "dealsStatus": "APPROVED",
    "detectedAdvertiserIds": ["5289"],
    "detectedLanguages": ["en"],
    "detectedProductCategories": [10108, 10013, 10103],
    "filteringStats": {},
    "html": {
      "height": 300,
      "snippet": "<html><body><a href='https://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%'>こんにちは世界!</a></body></html>",
      "width": 250
    },
    "openAuctionStatus": "APPROVED",
    "version": 1
  }]
}

Associate deals with a creative

When participating in Programmatic Guaranteed Deals, you must associate any creatives you intend to use with a deal prior to bidding with them. Bids placed with creatives that have not been associated with the deal are filtered.

To associate a creative with an existing deal, send an HTTP POST request to the DealAssociations URI. It has the following format:

POST https://adexchangebuyer.googleapis.com/v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:add

Request

POST https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives/test_creative_1/dealAssociations:add

Authorization:  Bearer /* auth token here */
X-JavaScript-User-Agent:  Google APIs Explorer

{
  "association": {
    "dealsId": "XXXXXXXXXXXXXXXXXX"
  }
}

Response

If successful, this method's reponse body will be empty.

Retrieve list of deal associations

Use the creatives.dealAssociations.list() method to retrieve a list of creative deal associations for your account or a specific creative.

By default, each call to the list method returns data for up to 100 creative deal associations. You can control the maximum number by passing the optional pageSize parameter. The pageSize parameter can be set from 1 to 1,000 inclusive. If pageSize is set, the response will contain the nextPageToken that can be passed in the pageToken parameter in a subsequent request to retrieve the next page of results. If data has been returned for all creative deal associations, nextPageToken will not appear in the response.

You can optionally filter the creative deal associations returned in the response by specifying the query parameter. You can filter on the following fields:

  • accountId
  • creativeId
  • dealsId
  • dealsStatus
  • openAuctionStatus

Some examples of potential queries include:

Query Meaning
creativeId=test-creative-1 Only return creatives with creativeId set to "test-creative-1".
creativeId=test-creative-1 dealsStatus:approved Only return creatives with creativeId set to "test-creative-1" and have dealsStatus set to Approved.
creativeId=test-creative-1 AND openAuctionStatus:disapproved Only return creatives with creativeId set to "test-creative-1" and have openAuctionStatus set to Disapproved.

Retrieve the list by sending an HTTP GET request to the dealAssociations URI. The URI has the following format:

GET https://adexchangebuyer.googleapis.com/v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations

Request

GET https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives/-/dealAssociations?query=dealsId%3DXXXXXXXXXXXXXXXXXX+AND+dealsStatus%3Aapproved

Authorization:  Bearer /* auth token here */
X-JavaScript-User-Agent:  Google APIs Explorer

Response

{
  "associations": [
    {
      "accountId": "87654321",
      "creativeId": "test_creative_1",
      "dealsId": "XXXXXXXXXXXXXXXXXX"
    }
  ]
}

Disassociate a creative from a deal

To disassociate a creative from an existing deal, send an HTTP POST request to the DealAssociations URI. The URI has the following format:

POST https://adexchangebuyer.googleapis.com/v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:remove

Request

POST https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives/test_creative_1/dealAssociations:remove

Authorization:  Bearer /* auth token here */
X-JavaScript-User-Agent:  Google APIs Explorer

{
  "association": {
    "dealsId": "XXXXXXXXXXXXXXXXXX"
  }
}

Response

If successful, this method's reponse body will be empty.

Receive push notifications for creative status changes

Rather than polling the API to check the status of your creatives, you can enable push notifications to receive updates when their dealsStatus or openAuctionStatus changes. To get started with this feature, familiarize yourself with Google Cloud Pub/Sub; you can use the Quickstart guides to learn how to configure and perform basic tasks in Google Cloud Pub/Sub.

To enable push notifications for your creatives, perform the following steps:

  1. Enable billing for your project

    To make use of this feature, you must enable billing for your project. For details on pricing, refer to the Google Cloud Pub/Sub pricing documentation.

  2. Enable Google Cloud Pub/Sub API for your project.
  3. Create a topic.
  4. Manage permissions.

    You must grant ad-exchange-buyside-reports@google.com write access to the topic. To make this change, navigate to the topic list and follow these steps:

    • Select the checkbox next to your topic in the UI and click PERMISSIONS to open the permissions menu.
    • In the textbox labeled Add members, enter:

      ad-exchange-buyside-reports@google.com
    • Select the Pub/Sub Publisher role
    • Click Add to save these permissions.
  5. Subscribe to the topic.

    By default, a new subscription's Delivery Type is set to Pull. To take full advantage of this feature, you should set it to Push into an endpoint url and specify an endpoint to receive push notifications.

  6. Watch creatives.

You can enable push notifications for your creatives by sending an HTTP POST request to the creatives Resource URI. The URI has the following format:

https://adexchangebuyer.googleapis.com/v2beta1/accounts/{accountId}/creatives/{creativeId}:watch

You should generally configure your push notifications to target all creatives for your account by setting creativeId to "-" so that notifications are sent for all creative status changes. You can alternatively target individual creatives by specifying their creativeId.

Request

POST https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives/-:watch

Authorization:  Bearer /* auth token here */
X-JavaScript-User-Agent:  Google APIs Explorer

{
  "topic": "projects/test-cloud-project/topics/test-topic"
}

Response

If successful, this method's reponse body will be empty.

Interaction of account-level and creative-level push notifications

Push notifications for a creative are never sent to more than a single topic. You can watch your creatives at the account or individual creative level, but in cases where you're watching both, notifications for a specific creative are sent only to the creative-level topic.

The following table describes how push notifications are affected when you watch creatives at the account or creative level for the given states:

Initial account watch status Initial creative watch status API call Effect
Not watched Not watched creatives/{creativeId}:watch Push notifications are sent for the watched creative to the specified topic.
Not watched Watched creatives/{creativeId}:watch Updates topic used for the watched creative's push notifications.
Watched Not watched creatives/{creativeId}:watch Push notifications for the watched creative will stop pushing to the account-level topic. Instead, they are sent to the specified creative-level topic.
Watched Watched creatives/{creativeId}:watch Updates topic used for the creative-level push notifications.
Not watched Not watched creatives/-:watch Push notifications for all creatives are sent to the specified topic.
Not watched Watched creatives/-:watch Push notifications for all unwatched creatives are sent to the specified account-level topic.
Watched Not watched creatives/-:watch Updates topic used for the account-level push notifications.
Watched Watched creatives/-:watch Updates topic used for the account-level push notifications.

Interpreting push notifications

You can use push notifications to determine when a creative is ready to be used in deals or the open auction. Push notifications are sent in JSON and only include the accountId, creativeId, openAuctionStatus, and dealsStatus fields. Below is an example of what this might look like in practice:

{
  "accountId": "87654321",
  "creativeId": "test_creative_1",
  "openAuctionStatus": "APPROVED",
  "dealsStatus": "APPROVED"
}

Stop push notifications for creative status changes

You can stop push notifications for either your account or a specific creative by sending an HTTP POST request to the creatives Resource URI. The URI has the following format:

https://adexchangebuyer.googleapis.com/v2beta1/accounts/{accountId}/creatives/{creativeId}:stopWatching

Request

POST https://adexchangebuyer.googleapis.com/v2beta1/accounts/87654321/creatives/-:stopWatching

Authorization:  Bearer /* auth token here */
X-JavaScript-User-Agent:  Google APIs Explorer

Response

If successful, this method's reponse body will be empty.

Interaction of account-level and creative-level push notifications

Push notifications will continue to be sent for a given creative as long as it is being watched at the account or creative level. The following table describes how push notifications are affected when you stop watching creatives at the account or creative level for the given states:

Initial account watch status Initial creative watch status API call Effect
N/A Not watched creatives/{creativeId}:stopWatching You will receive a NOT_FOUND error.
Not watched Watched creatives/{creativeId}:stopWatching The creative is no longer watched. Push notifications for it are no longer be sent.
Watched Watched creatives/{creativeId}:stopWatching The creative is no longer watched. Push notifications for it appear in the topic specified for the account-level.
Not watched N/A creatives/-:stopWatching You will receive a NOT_FOUND error.
Watched Not watched creatives/-:stopWatching The account is no longer watched. Push notifications for the account are no longer sent.
Watched Watched creatives/-:stopWatching The account is no longer watched. Push notifications for the account are no longer sent, but notifications continue to be sent for any watched creatives.

Send feedback about...

Buyer REST API
Buyer REST API