Constant Contact Technology Partners API
Use partner endpoints to manage client Constant Contact accounts under your partner account.
Use partner endpoints to manage client Constant Contact accounts under your partner account.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/constant-contact-technology-partners-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
description: The Constant Contact, Inc. V3 public API, for building integrations with Constant Contact, the leading small-business email marketing platform.
version: 3.0.178
title: AppConnect V3 Technology Partners API
contact:
name: webservices@constantcontact.com
license:
name: Private
url: https://www.constantcontact.com/legal/terms-of-use
servers:
- url: https://api.cc.email/v3
tags:
- name: Technology Partners
description: Use partner endpoints to manage client Constant Contact accounts under your partner account.
paths:
/partner/accounts:
get:
tags:
- Technology Partners
summary: GET Partner Client Accounts
description: 'Get all Constant Contact client accounts managed under your technology partner account. Use the `limit` query parameter to set the number of accounts to return on each results page. Use the `account_type` query parameter to filter client account results by type: `all` (default), `managed`, or `unmanaged`.
Only technology partners can access partner endpoints and partner endpoints cannot be tested using the API reference tester.
For more use case information, see [Get all Partner Client Accounts](/api_guide/partners_accts_get.html) in the API guide.'
operationId: getPartnerSiteOwners
parameters:
- name: offset
in: query
description: Depending on the `limit` you specify, the system determines the `offset` parameter to use (number of records to skip) and includes it in the link used to get the next page of results
required: false
schema:
type: string
- name: limit
in: query
description: The number of client accounts to return on each page of results. The default value is `50`. Entering a `limit` value less than the minimum (`10`) or greater than the maximum (`50`) is ignored and the system uses the default values. Depending on the `limit` you specify, the system determines the `offset` parameter to use (number of records to skip) and includes it in the link used to get the next page of results.
required: false
x-example: '50'
schema:
type: string
format: int32
default: '50'
maximum: 50
minimum: 10
- name: account_type
in: query
description: 'Filters client account results by account type: `all` (default), `managed`, or `unmanaged`. Excluding the `account_type` query parameter returns all client accounts for the partner.'
required: false
x-example: managed
schema:
type: string
enum:
- all
- managed
- unmanaged
default: all
responses:
'200':
description: Request successful.
content:
application/json:
schema:
$ref: '#/components/schemas/PartnerAccount'
'400':
description: Bad request. Either the JSON was malformed or there was a data validation error.
'401':
description: The Access Token used is invalid.
'403':
description: Forbidden request. You lack the necessary scopes, you lack the necessary user privileges, or the application is deactivated.
'404':
description: The requested resource was not found.
'500':
description: There was a problem with our internal service.
security:
- ctctPartnerAuthorizer: []
api_key: []
x-sdk-methodName: getAccounts
post:
tags:
- Technology Partners
summary: POST (create) a Partner Client Account
description: "Use this POST method to create a new Constant Contact client account under your partner account, set up the billing plan for the account, and to add the new client to the default contact list.\n\nNewly created accounts are free trials which give the user up to 60 days to try Constant Contact before buying. Trial accounts have limits depending on the services that are included.\n\nIf a field validation error occurs, a 400 response message is returned.\n\nIf provisioning does not complete successfully due to unavailable dependencies, such as database or dependent services, a 503 response message is returned. By default, the client account provision data is stored and processed when provisioning becomes available.\n\nIf the partner client account has the Single Sign On (SSO) for all users feature enabled, all users in the client account can sign into the account using SSO. This feature must be set up through the Constant Contact Partner team. For feature details, see [Configuring Identity Provider Initiated SSO](/api_guide/partner_sso_config.html). Some client account features will be supported in future releases. \n\nFor more use case information, see [Create a new Partner Client Account](/api_guide/partners_accts_create.html) in the API guide."
operationId: provision
responses:
'201':
description: Request successful.
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisionResponse'
'400':
description: Bad request. Either the JSON was malformed or there was a data validation error.
'401':
description: The Access Token used is invalid.
'403':
description: Forbidden request. You lack the necessary scopes, you lack the necessary user privileges, or the application is deactivated.
'404':
description: The requested resource was not found.
'409':
description: Conflict. The resource you are creating or updating conflicts with an existing resource.
'415':
description: Unsupported Media Type.
'500':
description: There was a problem with our internal service.
'503':
description: Our internal service is temporarily unavailable.
security:
- ctctPartnerAuthorizer: []
api_key: []
x-sdk-methodName: createAccount
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Provision'
description: Create a new Constant Contact client account under your partner account. All required properties must be included in the JSON payload request.
required: true
/partner/accounts/{encoded_account_id}/plan:
get:
tags:
- Technology Partners
summary: GET Billing Plan Details for a Client Account
description: 'Use this GET method to return billing plan details for a client''s Constant Contact account.
If you are not on the latest billing plan, contact the Constant Contact Partner Team. However, older billing plans and `plan_type` enum values will continue to be supported. Only technology partners can access partner endpoints and partner endpoints cannot be tested using the API reference tester.
For more use case information, see [Get Billing Plan Details for a Client Account](/api_guide/partners_plans_get.html) in the API guide.'
operationId: getPlan
parameters:
- name: encoded_account_id
in: path
description: Specify the client's unique `encoded_account_id`.
required: true
x-example: a07e1lxqqqo0
schema:
type: string
responses:
'200':
description: Request successful.
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTiersObject'
'400':
description: Bad request. Either the JSON was malformed or there was a data validation error.
'401':
description: The Access Token used is invalid.
'403':
description: Forbidden request. You lack the necessary scopes, you lack the necessary user privileges, or the application is deactivated.
'404':
description: The requested resource was not found.
'405':
description: Unsupported method used.
'415':
description: Unsupported Media Type.
'500':
description: There was a problem with our internal service.
security:
- ctctPartnerAuthorizer: []
api_key: []
x-sdk-methodName: getAccountBillingPlan
put:
tags:
- Technology Partners
summary: PUT (update) Billing Plan Details for a Client Account
description: 'Use this PUT method to update the type of billing plan to assign to the Constant Contact client account. The type of billing plan determines which Constant Contact product features that the client account can access. The billing plan that you specify in the request body (`plan_type`) must already exist in the plan group. Attempting to change to a plan that is currently not available within your partner plan group results in a 400 error response code.
When you create a new client account, the `plan_type` defaults to `TRIAL` and the `billing_day_of_month` defaults to `null`. The `billing_day_of_month` property is required if a client account is not set up to use single billing. You can change the day of month (`billing_day_of_month`) in which to bill a client account only when changing the `plan_type` value from `TRIAL` to a different `plan_type`, otherwise the `billing_day_of_month` value you enter is ignored. You can choose to enter a specific day of the month or accept the default value, which is the day on which the `plan_type` value changes from a `TRIAL` plan to a different `plan_type`. Changing the `plan_type` from `TRIAL` to another `plan_type` automatically changes the `billing_status` from `Trial` to `Open`.
Only technology partners can access partner endpoints and partner endpoints cannot be tested using the API reference tester. If you are not on the latest billing plan, contact the Constant Contact Partner Team. However, older billing plans and `plan_type` enum values will continue to be supported.
For more use case information, see [PUT Billing Plan Details for a Client Account](/api_guide/partners_plans_update.html) in the API guide.'
operationId: setPlan
parameters:
- name: encoded_account_id
in: path
description: Specify the client's unique `encoded_account_id`.
required: true
x-example: a07e1lxqqqo0
schema:
type: string
responses:
'200':
description: Request successful.
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTiersObject'
'400':
description: Bad request. Either the JSON was malformed or there was a data validation error.
'401':
description: The Access Token used is invalid.
'403':
description: Forbidden request. You lack the necessary scopes, you lack the necessary user privileges, or the application is deactivated.
'404':
description: The requested resource was not found.
'405':
description: Unsupported method used.
'415':
description: Unsupported Media Type.
'500':
description: There was a problem with our internal service.
security:
- ctctPartnerAuthorizer: []
api_key: []
x-sdk-methodName: updateAccountBillingPlan
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PlanInfo'
description: "`plan_type`: Updates the billing plan assigned to a client account to a different `plan_type`. \n\n`plan_group_id`: To update an older `plan_type` to a current a `plan_type`, use the `plan_group_id` parameter to specify the older billing `plan_type` number. \n\n- If the specified `plan_group_id` does not exist under the account's current plan group, the default partner plan group is used.\n- If the specified `plan_group_id` exists but does not match the account's current plan group, an error is returned.\n- If the `plan_group_id` parameter is not included in the request, the accounts current plan group is used.\n\n`billing_day_of _month`: Updates the day of month in which to bill the client account. This property is required if a client account is not set up to use single billing. "
/partner/accounts/{encoded_account_id}/status/cancel:
put:
tags:
- Technology Partners
summary: PUT Cancel the Billing Plan for a Client Account
description: "Use this PUT method to cancel a client's Constant Contact account. If the specified client account or technology partner account does not exist, the system returns a 404 error response. If the client account exists under a different technology partner account, the system returns a 400 error response.\n\n\n To get a list of all canceled client accounts (`\"billing_status\": \"Canceled\"`), make a `GET` call to the `/partner/accounts` endpoint.\n\n Only technology partners can access partner endpoints and partner endpoints cannot be tested using the API reference tester.\n\n For more use case information, see [Cancel the Billing Plan for a Client Account](/api_guide/partners_plans_cancel.html) in the API guide.\""
operationId: cancelAccount
parameters:
- name: encoded_account_id
in: path
description: The system generated ID that uniquely identifies the client account.
required: true
x-example: a07e1lxqqqo0
schema:
type: string
responses:
'200':
description: Request successful
content:
application/json:
schema:
$ref: '#/components/schemas/AccountCancellation'
'400':
description: Bad request. Either the JSON was malformed or there was a data validation error.
'401':
description: The Access Token used is invalid.
'403':
description: Forbidden request. You lack the necessary scopes, you lack the necessary user privileges, or the application is deactivated.
'404':
description: The requested resource was not found.
'500':
description: There was a problem with our internal service.
security:
- ctctPartnerAuthorizer: []
api_key: []
x-sdk-methodName: cancelAccountBillingPlan
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AccountCancellation'
description: By default, the current date and time is automatically used as the cancellation date. However, you can specify a future date and time to cancel the account (`effective_date`) in the request body in ISO format. You can also enter the client's cancellation reason (`reason_id`).
/partner/accounts/{encoded_account_id}/account_operations/sync:
post:
tags:
- Technology Partners
summary: POST Send an API request on Behalf of a Client Account
description: 'Use this API method to send an API request on behalf of a managed client account in your partnership.
The request body properties you use in this partner API call determine the structure of the API request that Constant Contact sends on behalf of the managed client account. This includes the HTTP url, HTTP method type, request body, request url parameters, request query parameters, and headers that for the request. You can use this `/partner/accounts/{encoded_account_id}/account_operations/sync` API method to send a request using non-partner v3 API methods.'
operationId: partnerAccountOperationsPostSync
parameters:
- name: encoded_account_id
in: path
description: An encoded account id for a managed account in your partnership.
required: true
x-example: a07e1lxqqqo0
schema:
type: string
responses:
'200':
description: Request successful. The response body schema returned by this method corresponds to the specific API request you provided in the request body.
'400':
description: Bad request. Either the JSON was malformed or there was a data validation error.
'401':
description: The Access Token used is invalid.
'403':
description: Forbidden request. You lack the necessary scopes, you lack the necessary user privileges, or the application is deactivated.
'404':
description: Not found. This may indicate that the encoded_account_id you provided is invalid, or the API request you are sending on behalf of an account returned a 404.
'500':
description: There was a problem with our internal service.
security:
- ctctPartnerAuthorizer: []
api_key: []
x-sdk-methodName: sendRequestUsingManagedAccount
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PartnerAccountOperationsRequest'
description: A JSON request body that contains the structure of the HTTP request you are instructing Constant Contact to send on behalf of specific managed account in your partnership.
/partner/accounts/{encoded_account_id}/users/sso:
post:
tags:
- Technology Partners
summary: POST a User Under a Partner's SSO-Enabled Client Account
description: Use this endpoint to create a new user under a partner client account that has the Single Sign On (SSO) for all users feature enabled.
operationId: createSSOUser
parameters:
- name: encoded_account_id
in: path
description: 'The encoded account ID that identifies the partner''s client account to which to add the new user. '
required: true
x-example: a07e1lxqqqo0
schema:
type: string
responses:
'201':
description: Request successful.
'400':
description: Bad request. Either the JSON was malformed or there was a data validation error.
'401':
description: The Access Token used is invalid.
'403':
description: Forbidden request. You lack the necessary scopes, you lack the necessary user privileges, or the application is deactivated.
'409':
description: Conflict. The resource you are creating or updating conflicts with an existing resource.
'500':
description: There was a problem with our internal service.
security:
- ctctPartnerAuthorizer: []
api_key: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SSOUser'
description: The JSON payload used to create a new user under the specified partner's client account. All request body properties are required (`first_name`, `last_name`, `role_name`, `contact_email`, `login_name`, `external_id`, `external_provider`).
required: true
/partner/accounts/{encoded_account_id}/contacts/unsubscribe:
post:
tags:
- Technology Partners
summary: POST Unsubscribe Contacts
description: Use to unsubscribe contacts from partner client accounts. Identify the contacts to unsubscribe using the `email_address` parameter. To unsubscribe a single contact from all partner client accounts, specify the contacts `email_address` and set the `global_unsubscribe` parameter to `true`.
operationId: partnerUnsubscribeContacts
parameters:
- name: encoded_account_id
in: path
description: The encoded account ID that uniquely identifies the partner's client account.
required: true
x-example: a07e1lxqqqo0
schema:
type: string
responses:
'200':
description: Contacts were successfully unsubscribed
content:
application/json:
schema:
$ref: '#/components/schemas/PartnerUnsubscribeResponse'
'400':
description: Bad request. Either the JSON was malformed or there was a data validation error.
'401':
description: The Access Token used is invalid.
'403':
description: Forbidden request. You lack the necessary scopes, you lack the necessary user privileges, or the application is deactivated.
'404':
description: The requested resource was not found.
'406':
description: Unsupported Media Type.
'500':
description: There was a problem with our internal service.
security:
- ctctPartnerAuthorizer: []
api_key: []
requestBody:
content:
application/json:
schema:
type: object
required:
- update_source
properties:
email_addresses:
type: array
description: Array of email addresses to unsubscribe.
items:
type: string
maxItems: 500
x-example: lang.carry@anymail.com
update_source:
type: string
description: Required parameter to specify the update source performing the unsubscribe.
enum:
- Account
- Contact
- System
x-example: Account
opt_out_reason:
type: string
description: Optional parameter to specify the reason for the unsubscribe.
maxLength: 255
x-example: No longer interested.
delete_contacts:
type: boolean
description: Optional parameter to specify if the contact(s) should be soft-deleted as part of the unsubscribe.
default: false
x-example: 'false'
global_unsubscribe:
type: boolean
description: Optional parameter to specify if the contact's email address should be unsubscribed from all partner child accounts. When specified only a single email address in the `email_addresses` array can be specified.
default: false
x-example: 'true'
description: The JSON payload.
required: true
components:
schemas:
PathParamObject:
type: object
properties:
path_param_key:
type: string
example: contact_id
description: The name of the path parameter.
path_param_value:
type: string
example: 04fe9a-a579-43c5-bb1a-58ed29bf0a6a
description: The value of the path parameter.
ProvisionResponse:
type: object
properties:
encoded_account_id:
type: string
example: a08e1izzh8t9
description: The system generated ID used to uniquely identify a client account.
provision_uuid:
type: string
example: x9xx2ede-5a58-4e23-8168-25930c5x7bxb
description: The system generated ID used to uniquely identify the provisioning of a client account.
PaginationLinks:
type: object
properties:
next:
description: Contains the next page link, if applicable.
$ref: '#/components/schemas/partnersLink'
TierObject:
type: object
properties:
usage_type:
type: string
example: CONTACTS
description: Identifies the tier usage type that is associated with the billing plan.
readOnly: true
default: CONTACTS
current_usage:
type: number
format: float
example: 10.0
description: The number of active contacts (default) used within the current tier.
readOnly: true
tier:
type: integer
format: int32
example: 1
description: "The billing tier level that is associated with a client account. By default, the system determines the tier level to use based on the number of active contacts currently in the client account at the time of billing. Billing tiers may differ. The following shows an example billing tier: <ul>\n <li>level <code>1</code> = 0 - 500 contacts</li>\n <li>level <code>2</code> = 501 - 1000 contacts</li>\n <li>level <code>3</code> = 1001 - ...</li>\n</ul>"
readOnly: true
tier_min:
type: number
format: float
example: 0.0
description: The minimum number of active contacts for the tier level.
readOnly: true
tier_max:
type: number
format: float
example: 500.0
description: The maximum number of active contacts for the tier level.
readOnly: true
price:
type: number
format: float
example: 20.0
description: The billing price set for the tier used to bill the client account each month.
readOnly: true
currency_code:
type: string
example: USD
description: The currency (ISO currency code) used to price the tier for a client account.
readOnly: true
description: The usage tier that is associated with a client's Constant Contact account and is used to calculate the monthly billing price.
PartnerAccountOperationsRequest:
type: object
required:
- account_operation_method
- account_operation_url
properties:
account_operation_url:
type: string
example: /contacts/{contact_id}
description: 'The API method path for the request you are sending on behalf of a managed child account. This value should be a V3 API URL without the https://api.cc.email/v3 base url and with any path parameter names included. For example: <code>/emails/activities/{campaign_activity_id}</code>.'
account_operation_method:
type: string
example: GET
description: The http method for the request you are sending on behalf of a managed child account.
account_operation_payload:
type: string
example: ''
description: The request payload for the request you are sending on behalf of a managed child account. If you provide a JSON payload using this parameter, make sure that the JSON is string escaped.
account_operation_query_parameters:
type: array
description: An array containing the query parameters for the request you are sending on behalf of a managed child account.
items:
$ref: '#/components/schemas/QueryParamObject'
account_operation_path_parameters:
type: array
description: An array containing the path parameters for the request you are sending on behalf of a managed child account.
items:
$ref: '#/components/schemas/PathParamObject'
account_operation_headers:
type: array
description: An array containing the headers for the request you are sending on behalf of a managed child account.
items:
$ref: '#/components/schemas/HeadersObject'
description: JSON object that contains the fields Constant Contact uses to construct the HTTP request you are sending on behalf of a managed account.
AccountCancellation:
type: object
properties:
reason_id:
type: integer
format: int32
example: 1
description: "Specifies the reason that the client is canceling their Constant Contact account as follows:\n <ul>\n <li><code>1</code> Cost Too High</li>\n <li><code>2</code> Using A Competitive Service</li>\n <li><code>3</code> Not Doing Email Marketing</li>\n <li><code>11</code> Something Missing Or Not Working </li>\n <li><code>12</code> Doing It In-House</li>\n <li><code>14</code> Poor Results</li>\n <li><code>21</code> Too Difficult To Use</li>\n <li><code>27</code> Canceled Online by Customer</li>\n <li><code>30</code> Dissatisfied With Billing Policies</li>\n </ul>"
effective_date:
type: string
format: date-time
example: '2020-02-06T22:09:15.000Z'
description: The client account cancellation date and time in ISO-8601 format.
description: Specifies the date and time a client requests to cancel their Constant Contact account and changes the account `billing_status` to `Canceled`. By default, this is the current date and time in ISO format. In the request body, you can optionally specify a future cancellation date (in ISO format) and a reason (`reason_code`) that the client wants to cancel their account.
PlanTiersObject:
type: object
properties:
plan_type:
type: string
example: GOLD
description: "The billing plan that is associated with a client's Constant Contact account. The billing plan determines which Constant Contact product features that the client account can access. If you are not on the latest billing plan, contact the Constant Contact Partner Team. However, older billing plans and <code>plan_type</code> enum values will continue to be supported. <ul>\n <li><code>TRIAL</code>: Provides limited product features for a non-billed account and the account has an expiration date.</li>\n <li><code>BRONZE</code>: Billable plan that provides basic email and marketing tools.</li> \n <li><code>SILVER</code>: Billable plan that provides all features available in the <code>BRONZE</code> plan, and adds some additional email campaign to features, such as contact segmentation and social media ads integration.</li>\n <li><code>GOLD</code>: Billable plan that provides all available product features.</li>\n</ul>"
current_tiers:
type: array
description: Lists the billing plan tiers that are currently associated with a client account.
items:
$ref: '#/components/schemas/TierObject'
billing_status:
type: string
example: Open
description: "The client's account billing status. When you first create a client account the <code>billing_status</code> defaults to <code>Trial</code>. Billing status values include:\n <ul>\n <li><code>Trial</code> - A non-paying trial client account (default value).</li>\n <li><code>Open</code> - An active and paying client account.</li>\n <li><code>Canceled</code> - A canceled client account.</li>\n <li><code>Trial End</code> - The trial period has ended for this client account.</li>\n </ul>"
billing_day_of_month:
type: integer
format: int32
example: 15
description: This property is required when an account is not set up to use single billing. For trial accounts, the value is initially set to <code>null</code>. The value can only be changed when changing the <code>plan_type</code> from a trial account to a different type of plan, otherwise the value you enter is ignored. You can choose to enter a specific day of month or except the default value, which is the day that the <code>plan_type</code> value changes from a trial account plan to a different plan. Valid <code>billing_day_of_month</code> values include <code>1</code> through and including <code>31</code>.
description: Specifies client billing plan details including the type of plan, the plan tiers used, the current billing status, and the day of the month that the client is billed. When a client account is first provisioned, the `plan_type` defaults to a `Trial` account. After you change an account `billing_status` from `Trial` to any other `billing_status`, you cannot change it back to a `Trial` account.
PartnerUnsubscribeResponse:
type: object
properties:
unsubscribed_count:
type: integer
example: 5
description: The number of contacts that were successfully unsubscribed.
description: Response indicating the number of contacts that were successfully unsubscribed.
HeadersObject:
type: object
properties:
header_key:
type: string
example: Accept
description: The name of the header.
header_value:
type: string
example: application/json
description: The value of the header.
partnersLink:
type: object
properties:
href:
type: string
SSOUser:
type: object
required:
- contact_email
- external_id
- external_provider
- first_name
- last_name
- login_name
- role_name
pr
# --- truncated at 32 KB (45 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/constant-contact/refs/heads/main/openapi/constant-contact-technology-partners-api-openapi.yml