Get bounced email campaign data for the specified email campaign activity.

Note: This method is only for use with primary_email and resend role email campaign activities.

This report helps you manage contact email addresses, determine why a contact’s email address was rejected by an email server, understanding how bounce rates impact your email campaign, and helps to ensure that you are complying with anti-spam laws.

Make a GET call to the /reports/email_reports/{campaign_activity_id}/tracking/bounces endpoint to get a report listing each contact that did not receive the email campaign activity because it was bounced (rejected) by their email service provider.

Report results include contact information, such as the contact’s email address, unique ID, and the date and time the email was bounced. Report data is sorted with the most recent activity listed first.

Use the bounce_code query parameter to limit the type of bounce data to include in the report.

Valid bounce codes include:

  • B - Non-existent address; the contact’s email service provider indicates that the email address doesn’t exist.

  • D - Undeliverable; after repeated delivery attempts, no response was received from the recipient’s email service provider.

  • F - Full; the recipient’s mailbox is full.

  • S - Suspended; the recipient’s address was reported as non-existent by the email service provider and is suspended from delivery.

  • V - Vacation/autoreply; the recipient set an autoreply, but the message was delivered.

  • X - Other; the contact’s email service provider specified another reason that the message cannot be delivered.

  • Z - Blocked; the recipient’s email service provider chose not to deliver the email. For example, the email service provider may have flagged the email as spam.

The following example shows the type of bounced reporting data that is returned for each contact:

  "tracking_activities": [
      "contact_id": "a2fdc285-f4bc-408c-9e64-f3f89038ec82",
      "campaign_activity_id": "98edac88-f4bc-408c-9e64-acd890384231",
      "tracking_activity_type": "em_bounces",
      "email_address": "",
      "first_name": "Maddie",
      "last_name": "Brown",
      "bounce_code": "B",
      "current_email_address": "",
      "created_time": "2019-04-25T11:08:00.000Z",
      "deleted_at": "2015-08-10"

If you have not sent the email campaign activity to any contacts, this method returns a 200 response code and an empty array for tracking_activities:

   "tracking_activities": []

You can confirm that Constant Contact successfully sent an email campaign activity by making a GET call to /emails/activities/{campaign_activity_id} and checking that the email campaign activity has a status of Done. For more information, see the Get an Email Campaign Activity topic.


This method requires the campaign_activity_id URL parameter of the email campaign activity for which you want to get an email bounces report. Optionally, you can choose to limit the number of activities to return on each page by using the limit query parameter.

Query Parameters

This method does not currently support filtering results using the email bounces report created_time timestamp.

Example Get Email Bounces Report Call

This example GET call returns an email bounces report for a specified email campaign activity.


Endpoint Requirements

User privileges: ui:campaign:metrics

Authorization scopes: campaign_data


$request = new HttpRequest();

  'cache-control' => 'no-cache',
  'Connection' => 'keep-alive',
  'Accept-Encoding' => 'gzip, deflate',
  'Host' => '',
  'Cache-Control' => 'no-cache',
  'User-Agent' => 'PostmanRuntime/7.15.2',
  'Authorization' => 'Bearer {access token}',
  'Accept' => '*/*',
  'Content-Type' => 'application/json'

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .addHeader("Content-Type", "application/json")
  .addHeader("Accept", "*/*")
  .addHeader("Authorization", "Bearer {access token}")
  .addHeader("User-Agent", "PostmanRuntime/7.15.2")
  .addHeader("Cache-Control", "no-cache")
  .addHeader("Host", "")
  .addHeader("Accept-Encoding", "gzip, deflate")
  .addHeader("Connection", "keep-alive")
  .addHeader("cache-control", "no-cache")

Response response = client.newCall(request).execute();

curl -X GET \ \
  -H 'Accept: */*' \
  -H 'Accept-Encoding: gzip, deflate' \
  -H 'Authorization: Bearer {access token}' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Host:' \
  -H 'User-Agent: PostmanRuntime/7.15.2' \
  -H 'cache-control: no-cache'


    "tracking_activities": [
            "contact_id": "4399ce90-5b89-11e7-ba80-00163e498a38",
            "campaign_activity_id": "6cc0d637-cf3d-4ac6-aad7-21567698eb38",
            "tracking_activity_type": "em_bounces",
            "email_address": "",
            "created_time": "2019-05-16T21:14:00.000Z"
            "contact_id": "4399f5a0-5b89-11e7-ba80-00163e498a38",
            "campaign_activity_id": "6cc0d637-cf3d-4ac6-aad7-21567698eb38",
            "tracking_activity_type": "em_bounces",
            "email_address": "",
            "created_time": "2019-05-16T21:14:00.000Z"

Try it!