Use this guide to quickly get started working through the typical email campaign creation workflow:

  1. Plan
  2. Create a New Email Campaign
  3. Test Send
  4. Select Contacts
  5. Schedule or Send
  6. Monitor and Analysis

Before You Begin

Verify the following:

  • You have a Constant Contact V3 API developer account and a registered application in the Developer Portal.
  • OAuth2 authentication is configured for your integration. Learn more
  • You are authorized to access the necessary scopes and privileges that allow you to get and change campaign data:
    • Constant Contact users who are granting your application access to data in their Constant Contact account must have campaign:write and campaign:read email campaigns privileges. Developers can verify a user’s privileges by making a GET call to the /account/user/privileges endpoint. Learn more
    • You requested and received the campaign_data scope from your Constant Contact users. For example: campaign_data scope is required to access campaign reporting data. Learn more Note: Adding a contact without their explicit consent is a serious violation of anti-spam laws and Constant Contact’s Terms of Service.

Custom Code Email Campaigns

Constant Contact uses format types (format_type) to support their different email editor versions and API email formats. You use the V3 API to create email campaigns using the custom code format type. You can still retrieve, update, and schedule the other email format types, but you cannot use the V3 API to create them.

Custom code emails provide you with a flexible way to control how your emails look and support many of the new Constant Contact email features. Custom code type 5 supports all features allowing you to:

  • Send email to segments. Segments are dynamic lists of contacts that you create using different kinds of criteria.
  • Use personalization tags to pull contact, custom field, or account information into your email.
  • Be flexible with how you style your email. You can choose to use a style element or use inline CSS. Constant Contact will automatically convert your email to use inline css when you send the email to improve compatibility with email clients.
  • You can also use the new custom code editor UI to view a live preview of your email and check for layout issues as you edit it.

Learn more about format type schema differences

Plan

Step 1: Define Your Goal

[CLICK] for details...

Clearly articulate what you want to achieve with your email campaign. This goal will guide all subsequent email campaign related decisions.

Example Goals
  • Increase sales
  • Drive website traffic
  • Generate leads
  • Announce a new product or service
  • Build brand awareness
  • Nurture existing customers

Example Use Case

For all eight car dealerships, I want to increase older tire inventory sales and make room for more current tire inventory.

Step 2: Identify Your Target Contacts

[CLICK] for details...

Who are you trying to reach with this email campaign? Identifying the correct contacts to target for your email campaign will help to increase open rates and avoid non-applicable contacts from opting out of receiving your future campaigns.

To identify a subset of contacts to which to send your email campaign, you can create or select from existing lists or segments. Later in this workflow, you'll use the contact_list_ids or segment_id in the PUT /emails/activities/{campaign_activity_id} call to identify your target contacts. We recommended that you create the segment or lists now, if they don't already exist.

Example Targeted Contacts Criteria

I want to target existing customers (contacts) whose car tire specifications match tire specifications in my older inventory. For this example, to identify my target contacts, I might choose to create a segment that uses tags to identify contacts with certain car makes, models, and years.

Create a New Email Campaign

[CLICK] for details...

To create a new email campaign, make a POST call to the /emails endpoint. The request body must contain a unique name and the email_campaign_activities array.

The email_campaign_activities array contains the main content of your email campaign and must include format_type, from_name, from_email, reply_to_email, and subject properties. If the format_type is 5 then the html_content property is also required.

The from_email address must be a verified email address for your account. It is an array because a single email campaign can contain multiple types of email interactions, such as a resend or an A/B test email.

Email campaign activities are different types of email interactions with your contacts. For example, sending an initial email to contacts uses the primary_email activity. The primary_email activity can be used to create an A/B email subject line test. In addition, resending an email to non-openers creates a resend activity. Constant Contact also provides you with a permalink activity that contains a permanent link to a web accessible version of your email.

Note: Contacts to which to send the email campaign are specified after the email campaign is created.

[CLICK] to view an example request...
{
  "name": "Inventory close out sale",
  "email_campaign_activities": [{
    "format_type": 5,
    "from_email": "jdodge@example.com",
    "reply_to_email": "jdodge@example.com",
    "from_name": "Jake Dodge",
    "subject": "Our BIGGEST Tire Sale of the Year!!",
    "html_content": "<html><body>[[trackingImage]]<a href=\"http://www.constantcontact.com\">Visit ConstantContact.com!</a></body></html>",
    "preheader": "Best Deals 4 Wheels",
    "physical_address_in_footer": {
      "address_line1": "123 Maple Street",
      "address_line2": "Unit 1",
      "address_optional": "Near Boston Fire Station",
      "city": "Boston",
      "country_code": "US",
      "country_name": "United States",
      "organization_name": "Jake Dodge's Tire Warehouse",
      "postal_code": "02451",
      "state_code": "MA"
    }
  }]
}
[CLICK] to view an example response...
{
  "campaign_activities": [
    {
      "campaign_activity_id": "0f9b6b51-7d01-4d7c-b4f4-ff41c39cf90d",
      "role": "primary_email"
    },
    {
      "campaign_activity_id": "3a66f67b-f518-47d7-bcca-101225031ec1",
      "role": "permalink"
    }
  ],
  "campaign_id": "68560983-829b-4825-a660-b072ed2fb177",
  "created_at": "2025-08-12T17:44:22.029Z",
  "current_status": "Draft",
  "name": "Inventory close out sale",
  "type": "CUSTOM_CODE_EMAIL",
  "type_code": 26,
  "updated_at": "2025-08-12T17:44:22.029Z"
}

In the response, be sure to save the primary email campaign_activity_id required later to:

  • Update the email campaign to add contacts as recipients.
  • Test send or preview the email campaign.
  • Schedule or send the email campaign.

Test Send

[CLICK] for details...

Always send a test email to yourself and a few trusted colleagues to proofread and check functionality (links, images). Also, test to see how your email will look on different devices (desktop, mobile).

Make a POST call to the /emails/activities/{campaign_activity_id}/tests endpoint and use the previously saved campaign_activity_id to send a test email. Test emails also allow you to verify how the email campaign activity will look before sending it to contacts.

[CLICK] to view an example request...
curl --request POST \
  --url https://api.cc.email/v3/emails/activities/%7Bcampaign_activity_id%7D/tests \
  --header 'content-type: application/json' \
  --header 'Authorization: Bearer {access token}' \
  --data '{"email_addresses":["dlang@example.com"],"personal_message":"This is a test send of the email campaign activity."}'

A successful send returns a 204 response (no response body).

To help maximize contact open rates for a draft primary email campaign, use A/B subject line testing to determine the best subject line to use before sending the email campaign to contacts.

Note: You can also preview how the complete HTML for an email campaign activity looks before sending to contacts by making a GET call to the /emails/activities/{campaign_activity_id}/previews endpoint and use the previously saved campaign_activity_id.

Select Contacts

[CLICK] for details...

To select contacts to which to send your campaign, make a PUT call to the /emails/activities/{campaign_activity_id} endpoint (use the previously saved campaign_activity_id). This endpoint is used for both adding contacts to the email campaign and to update email campaign properties.

When you use a PUT method to update a resource, the V3 API overwrites any properties that are missing in the request body. However, this method does not overwrite sub-resources that you omit in the request body or missing properties in sub-resources. This method requires physical_address_in_footer, document_properties, html_content, and permalink_url sub-resources.

In the request body, specify which contacts to send your campaign to using either the segment_ids or contact_list_ids array. Use the segment_ids array to specify a single segment_id used to dynamically get contacts that meet that segment's criteria. Use the contact_list_ids array to specify the unique contact list_id string values used to get contacts.

[CLICK] to view an example request...

The following example request uses a single contact list to identify contacts to which to send the email campaign.

curl --request PUT \
  --url https://api.cc.email/v3/emails/activities/%7Bcampaign_activity_id%7D \
  --header 'accept: application/json' \
  --header 'content-type: application/json' \
  --header 'Authorization: Bearer {access token}' \
  --data '{"contact_list_ids":["da10f460-3072-11e9-b282-fa163e6b01c1"],"from_email":"jdodge@constantcontact.com","from_name":"Jake Dodge","reply_to_email":"jdodge@constantcontact.com","subject":"Holiday Special Newsletter","html_content":"<html><body>[[trackingImage]] <a href=\"http://www.constantcontact.com\">Visit ConstantContact.com!</a> </body></html>","preheader":"You don'\''t want to miss this.","physical_address_in_footer":{"address_line1":"123 Maple Street","address_line2":"Unit 1","address_line3":"string","address_optional":"Near Boston Fire Station","city":"Boston","country_code":"US","organization_name":"Jake Dodge'\''s Pancakes","postal_code":"02451","state_code":"MA","state_non_us_name":"Victoria"},"document_properties":{"style_content":".white{color: #ffffff;}","greeting_salutation":"Dear","greeting_name_type":"F","greeting_secondary":"Greetings!","subscribe_link_enabled":"false","subscribe_link_name":"Subscribe to my email list!","text_content":"<Text><Greeting/></Text>","permission_reminder_enabled":"false","permission_reminder":"Hi, just a reminder that you'\''re receiving this email because you have expressed an interest in our company.","view_as_webpage_enabled":"false","view_as_webpage_text":"Having trouble viewing this email?","view_as_webpage_link_name":"Click here to view this email as a web page","forward_email_link_enabled":"true","forward_email_link_name":"Forward email"}}'
[CLICK] to view an example response...
{
  "campaign_activity_id": "4c08372c-957a-48b5-bc45-72c7f00796cd",
  "campaign_id": "8987dc1a-48ef-433a-b836-7ca4f9aa3481",
  "role": "primary_email",
  "contact_list_ids": [
    "da10f460-3072-11e9-b282-fa163e6b01c1"
  ],
  "segment_ids": [
    1
  ],
  "current_status": "DRAFT",
  "format_type": 5,
  "from_email": "jdodge@constantcontact.com",
  "from_name": "Jake Dodge",
  "reply_to_email": "jdodge@constantcontact.com",
  "subject": "Holiday Special Newsletter",
  "html_content": "<html><body>[[trackingImage]] <a href=\"http://www.constantcontact.com\">Visit ConstantContact.com!</a> </body></html>",
  "template_id": "1000755366001",
  "permalink_url": "https://conta.cc/2GaQ8AY",
  "preheader": "You don't want to miss this.",
  "physical_address_in_footer": {
    "address_line1": "123 Maple Street",
    "address_line2": "Unit 1",
    "address_line3": "string",
    "address_optional": "Near Boston Fire Station",
    "city": "Boston",
    "country_code": "US",
    "country_name": "United States",
    "organization_name": "Jake Dodge's Pancakes",
    "postal_code": "02451",
    "state_code": "MA",
    "state_name": "string",
    "state_non_us_name": "Victoria"
  },
  "document_properties": {
    "style_content": ".white{color: #ffffff;}",
    "letter_format": "XHTML",
    "greeting_salutation": "Dear",
    "greeting_name_type": "F",
    "greeting_secondary": "Greetings!",
    "subscribe_link_enabled": "false",
    "subscribe_link_name": "Subscribe to my email list!",
    "text_content": "<Text><Greeting/></Text>",
    "permission_reminder_enabled": "false",
    "permission_reminder": "Hi, just a reminder that you're receiving this email because you have expressed an interest in our company.",
    "view_as_webpage_enabled": "false",
    "view_as_webpage_text": "Having trouble viewing this email?",
    "view_as_webpage_link_name": "Click here to view this email as a web page",
    "forward_email_link_enabled": "true",
    "forward_email_link_name": "Forward email"
  }
}

Learn more about updating an email campaign activity

Schedule or Send

[CLICK] for details...

Make a POST call to the /emails/activities/{campaign_activity_id}/schedules endpoint to specify when to send the email campaign activity. Use the scheduled_date request body property to:

  • Schedule to send: enter the date (ISO-8601 format) to send the email campaign. This is often recommended for optimal engagement times. You must add contacts to an email campaign activity before you can schedule it.
  • Send now: enter 0 to send the email campaign now.

If it's an automation campaign, you'll activate the series once configured, and emails will send based on the triggers you set. You can only schedule email campaign activities that have the primary_email role and the status is DRAFT, DONE, or ERROR.

  • DRAFT — An email campaign activity you created but have not sent to contacts. You can update email campaign activities when they are in DRAFT status for each email campaign activity format_type.
  • DONE — An email campaign activity that Constant Contact successfully sent to contacts. You can update email campaign activities when they are in DONE status if the email campaign activity uses format_type 3.
  • ERROR — An email campaign activity that encountered an error.
[CLICK] to view an example request...

The following example uses the scheduled send option.

curl --request POST \
  --url https://api.cc.email/v3/emails/activities/%7Bcampaign_activity_id%7D/schedules \
  --header 'content-type: application/json' \
  --header 'Authorization: Bearer {access token}' \
  --data '{"scheduled_date":"2024-08-24T14:15:22Z"}'
[CLICK] to view an example response...
[
 {
   "scheduled_date": "2019-08-24T14:15:22Z"
 }
]

Learn more about scheduling email campaign activities

Monitoring & Analysis

[CLICK] for details...

Email campaigns and email campaign activities allow you to better manage and report on different kinds of email marketing.

For example, if you are using the email reporting unique opens endpoint to track performance, a resend email campaign activity will return data on a resend to non-openers email. If you want to get data on your initial send, you can use the primary_email email campaign activity. Both of these separate activities are associated with the same email campaign.

After sending an email campaign, use reporting endpoints to get detailed analytics on your campaign's performance, including:

  • Open Rate: Percentage of recipients who opened your email.
  • Click-Through Rate (CTR): Percentage of recipients who clicked a link in your email.
  • Conversion Rate: (If tracked) Percentage of recipients who completed your desired action (e.g., made a purchase).
  • Bounce Rate: Emails that couldn't be delivered.
  • Unsubscribe Rate: How many people opted out.
  • Spam Complaints: How many marked your email as spam.
  • Optimize: Use the data from your reports to understand what worked and what didn't. This informs your strategy for future campaigns.
  • A/B Testing: Constant Contact allows you to test different subject lines, content, or send times to see which performs best.

Learn more about email reporting

[]: