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 Social 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: Social paths: /social/profiles: get: tags: - Social summary: GET social media profiles description: 'Retrieves all social media profiles connected to the account. A profile represents a single account on a social network (such as a Facebook Business Page, a LinkedIn Company Page, or an Instagram Business account) that the user has connected to Constant Contact. Use the `include=accessible` query parameter to additionally check whether each profile is currently accessible for posting. Profiles that are not currently accessible will fail if used to publish a post. ' operationId: getSocialProfilesUsingGET parameters: - name: include in: query description: Optional sub-resources to include. Use `accessible` to check if profiles are accessible on the network. required: false x-example: accessible style: form explode: true schema: type: array items: type: string enum: - accessible responses: '200': description: Request successful content: application/json: schema: $ref: '#/components/schemas/Profiles' '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: - oauth2_implicit: - campaign_data - oauth2_access_code: - campaign_data x-authorization-privileges: - campaign:read x-sdk-methodName: getSocialProfiles /social/connections: get: tags: - Social summary: GET social network connections description: 'Retrieves all social network accounts connected to the Constant Contact account, with support for multiple accounts per social network. A connection represents the authorization link between a Constant Contact account and a single account on a social network (Facebook, Instagram, LinkedIn, TikTok, etc.). Each connection includes account information about the connected user on that network (display name, username, image, etc.) and the current status of the connection (whether it''s active, rate-limited, or has any errors). Note that a single connection may have multiple profiles (pages) associated with it — use `GET /social/profiles` to retrieve the individual profiles. ' operationId: getSocialConnectionsUsingGET responses: '200': description: Request successful content: application/json: schema: $ref: '#/components/schemas/ConnectionResponseDto' '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: - oauth2_implicit: - campaign_data - oauth2_access_code: - campaign_data x-authorization-privileges: - campaign:read x-sdk-methodName: getSocialConnections /social/hashtags/groups: get: tags: - Social summary: GET hashtag groups description: 'Retrieves a paginated list of saved hashtag groups for the account. Hashtag groups allow users to save and organize reusable collections of hashtags that can be applied to social posts. Use the `limit` and `page` query parameters to paginate through results. Navigate to the next page using the `_links.next` link in the response. ' operationId: getSocialHashtagGroupsUsingGET parameters: - name: limit in: query description: Maximum number of hashtag groups to retrieve per page. Default and maximum is `5`. required: false x-example: '5' schema: type: integer default: 5 maximum: 5 minimum: 1 - name: page in: query description: Page number to retrieve (0-based). required: false x-example: '0' schema: type: integer default: 0 minimum: 0 responses: '200': description: Request successful content: application/json: schema: $ref: '#/components/schemas/PagedHashtagGroupsDto' '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: - oauth2_implicit: - campaign_data - oauth2_access_code: - campaign_data x-authorization-privileges: - campaign:read x-sdk-methodName: getHashtagGroups /social/posts: post: tags: - Social summary: POST (create) a social media post description: 'Creates a new social media post that can be published immediately or scheduled for later publication. A post can target one or more social profiles, and can include text, images, and network-specific settings. Set `status` to `DRAFT` to save without publishing, or `SCHEDULED` to schedule for publication. Scheduled posts require a `scheduled_time` in ISO-8601 format. Post content and settings can vary per profile — each `profile_posts` entry can have its own text, images, and network-specific settings (e.g., TikTok-specific settings like `disable_comment`). ' operationId: createSocialPostUsingPOST responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PostDto' '201': description: Post created successfully content: application/json: schema: $ref: '#/components/schemas/PostDto' '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: - oauth2_implicit: - campaign_data - oauth2_access_code: - campaign_data x-authorization-privileges: - campaign:write x-sdk-methodName: createSocialPost requestBody: content: application/json: schema: $ref: '#/components/schemas/PostCreateDto' description: The social post content and configuration. required: true components: schemas: PagedResponseLinksDto: type: object properties: next: description: Link to retrieve the next page of results. This will be absent for the last page. readOnly: true $ref: '#/components/schemas/PagedResponseLinkRelDto' description: Pagination links for navigating through pages of results. PostDto: type: object required: - profile_posts - status properties: campaign_id: type: string description: Unique identifier for the post campaign. Generated by the server on creation. Use this value to reference the post in subsequent requests. readOnly: true name: type: string example: My Social Post description: Campaign name for this post. The value provided on creation is sanitized before saving, so the returned value may not exactly match what was sent. profile_posts: type: array description: The list of per-profile posts that make up this campaign. items: $ref: '#/components/schemas/ProfilePostDto' scheduled_time: type: string example: '2026-03-15T14:30:00.000Z' description: The date and time to publish the post, in ISO-8601 format. Only set when status is SCHEDULED. status: type: string example: SCHEDULED description: "The current status of the post. Possible values include:\n\n" description: Represents a social media post campaign that can include multiple posts to multiple social profiles, with either identical or network-specific content. ConnectionDto: type: object properties: account_info: description: Account information for this connection. readOnly: true $ref: '#/components/schemas/AccountInfoDto' connection_status: description: Status details for this connection. readOnly: true $ref: '#/components/schemas/ConnectionStatusDto' description: A combination of account information and connection status for an established social network connection. ConnectionStatusDto: type: object properties: error: type: string description: A message indicating that there was an unexpected error accessing the social network account. readOnly: true has_token: type: boolean example: true description: true if the integration has an authorization token for this social network account. readOnly: true is_active_user: type: boolean example: true description: A user is considered active if the user has any connected profiles for the social network account. readOnly: true rate_limited: type: boolean example: false description: Whether this social network account or the Constant Contact application is currently rate-limited by the social network provider. readOnly: true status: type: integer format: int32 description: The status returned from the given network's API when retrieving the account. This is typically only set when error is set. readOnly: true token_has_scopes: type: boolean example: true description: Whether the token associated with this user's social account integration has the scopes necessary to use Constant Contact social functionality. readOnly: true token_is_valid: type: boolean example: true description: true if the token for this social network is currently valid and can be successfully used to fetch data from the network. readOnly: true description: Data indicating the status of a social network connection's integration. MapOfstringAndstring: type: object additionalProperties: type: string Profiles: type: array items: $ref: '#/components/schemas/ProfileDto' HashtagGroupDto: type: object required: - hashtag_group_name - hashtag_names properties: hashtag_group_id: type: string description: Unique identifier for this hashtag group. Automatically generated on creation and returned in all responses. readOnly: true hashtag_group_name: type: string description: The human-readable name for this group.

This name will be sanitized before saving, which may include trimming whitespace, truncation, and/or removing invalid characters. If the sanitized name results in a blank string, it will not be able to be saved, and any create or update operation will fail.

The name is currently limited to a maximum of 150 characters, but the effective length may be shorter, depending on whether special characters (such as emoji) are used.

hashtag_names: type: array description: The list of hashtag names for this group.

Hashtag names do not include any leading '#' character. They can only consist of alphanumeric characters and '_' (underscore). The hashtag name cannot begin or end with an underscore. Hashtag names may begin with a letter or a number, and may consist of only numbers. Hashtag names are currently limited to a maximum of 30 characters.

The list order is preserved. If duplicates exist, they will be removed when saving, and the first occurrence will retain its position.

items: type: string description: Represents a named collection of hashtags that can be reused when creating social posts. AccountInfoDto: type: object properties: account_url: type: string description: 'The account URL of the connected user''s profile. Note: Facebook & Instagram do not support this.' readOnly: true display_name: type: string example: John Doe description: Display name of the connected user. readOnly: true image_url: type: string example: https://example.com/avatar.jpg description: URL of the connected user's avatar or image. readOnly: true network: type: string example: facebook description: The social network this account belongs to. readOnly: true network_account_id: type: string description: 'The user identifier on the given network. Note: this is the network account id, not the profile id.' readOnly: true username: type: string example: johndoe description: Username of the connected user on the social network. readOnly: true description: Account information for a connected social network user. ProfilePostProfileDto: type: object required: - profile_id properties: account_username: type: string description: The human-readable username of the account that owns this profile. readOnly: true campaign_activity_id: type: string description: The campaign activity ID for this post on the specified profile. Generated by the server on creation. When updating a post, existing profile entries should include their original campaign_activity_id. readOnly: true campaign_activity_status: type: string description: The status of the post activity for this profile. readOnly: true campaign_activity_status_date: type: string format: date-time description: The activity's timestamp. For SCHEDULED activities, this is typically the same as the scheduled publish time; otherwise, it is the last-modified timestamp. readOnly: true campaign_activity_status_message: type: string description: A human-readable message describing the current status of the post activity. Can be a generic Constant Contact message or a specific message reported by the social network. readOnly: true image_url: type: string description: The URL of the profile's image. This image may become stale and is only refreshed when retrieving profiles with include=accessible. readOnly: true network: type: string example: facebook description: The social network this profile belongs to. readOnly: true network_post_id: type: string description: The social network's reference for this post. Only set when the status is DONE. readOnly: true post_url: type: string description: The permalink URL to the published post on the social network. Only set when the status is DONE. readOnly: true profile_id: type: string description: The unique identifier for the profile to post to. Use the profile_id from GET /social/profiles. profile_name: type: string description: The display name of the profile. readOnly: true description: Describes a post to a single social profile, including the target profile and its current status on that network. PageMetadataDto: type: object required: - page - size - total_elements - total_pages properties: page: type: integer format: int64 description: The current 0-based page number. readOnly: true size: type: integer format: int64 description: The page size (the number of results returned in this response). readOnly: true total_elements: type: integer format: int64 description: The total number of results available across all pages. readOnly: true total_pages: type: integer format: int64 description: The total number of pages available based on the current page size. readOnly: true description: Pagination metadata describing the current page of results. PagedHashtagGroupsDto: type: object required: - _links - hashtag_groups - page properties: _links: description: Pagination links for navigating through pages of results. readOnly: true $ref: '#/components/schemas/PagedResponseLinksDto' hashtag_groups: type: array description: The current page of hashtag group results. readOnly: true items: $ref: '#/components/schemas/HashtagGroupDto' page: description: Pagination metadata for the current response. readOnly: true $ref: '#/components/schemas/PageMetadataDto' description: A paginated response containing a page of hashtag groups. ProfileDto: type: object required: - connected - network - profile_id properties: accessible: type: boolean example: false description: Whether the profile is currently accessible for posting. Publishing a post will fail if its profile is not currently accessible. Only populated when the GET request includes the query parameter include=accessible. readOnly: true account_info: readOnly: true $ref: '#/components/schemas/AccountInfoDto' connected: type: boolean example: true description: Whether this profile is currently connected. You can only create and publish posts with connected profiles. readOnly: true handle: type: string example: mybusinesspage description: The profile's handle on the social network (for example, an Instagram or TikTok username). May be null if the network does not expose a separate handle (for example, Facebook). readOnly: true image_url: type: string example: https://example.com/profile-image.jpg description: URL of the profile's image or avatar. readOnly: true name: type: string example: My Business Page description: Display name of the profile. readOnly: true network: type: string example: facebook description: The social network this profile belongs to. readOnly: true network_profile_id: type: string description: The social network-specific identifier for this profile. readOnly: true network_user_id: type: string description: The social network-specific identifier for the user who owns this profile. readOnly: true profile_id: type: string description: Unique identifier for this profile. Use this value in the profile_id field of a ProfilePost when creating a post. readOnly: true settings: type: object description: "Network-specific settings for the profile. Only populated when the request includes include=accessible and settings are available for the network. Currently, only TikTok provides settings:
\"content\": {\n  \"comment_disabled\": Boolean,\n  \"duet_disabled\": Boolean,\n  \"stitch_disabled\": Boolean,\n  \"max_video_post_duration_sec\": Integer\n}
" readOnly: true additionalProperties: type: object properties: {} url: type: string example: https://www.facebook.com/mybusinesspage description: URL to the profile on the social network. readOnly: true description: Describes a social network profile (Business Page, Company Page/Organization, etc.).
Note: Due to performance and/or rate-limit issues, some properties may be cached. Where possible, caching will be limited to 15 minutes. ImageDto: type: object required: - url properties: image_id: type: string description: Unique identifier for this image. Generated by the server on creation. readOnly: true url: type: string example: https://www.host.com/path+with%20space?q=query%20with+space description: The URL of the image. Each component of the URL must be appropriately encoded to avoid illegal characters. description: An image to include in a social post. PostCreateDto: type: object required: - profile_posts - status properties: name: type: string example: My Social Post description: Campaign name for this post. Optional on creation. If not provided, a default name will be generated. The value provided will be sanitized before saving, so the value returned may not exactly match what was sent. profile_posts: type: array description: The list of per-profile posts that make up this campaign. Each entry specifies the content to post and the profiles to post it to. items: $ref: '#/components/schemas/ProfilePostDto' scheduled_time: type: string example: '2026-03-15T14:30:00.000Z' description: The date and time to publish the post, in ISO-8601 format. Only applies when status is SCHEDULED. If not specified for a scheduled post, the publish job is scheduled to execute immediately. status: type: string example: SCHEDULED description: The status of the post on creation. Valid values are DRAFT (save without publishing) or SCHEDULED (schedule for publication). description: Request body for creating a social media post campaign that can include multiple posts to multiple social profiles. PagedResponseLinkRelDto: type: object required: - href properties: href: type: string description: The URI of a page of results. readOnly: true description: Represents a link to a page of results. ProfilePostDto: type: object required: - profiles properties: images: type: array description: Images to include in the post. Each image must be accessible via a public URL. items: $ref: '#/components/schemas/ImageDto' post_content_id: type: string description: Identifier for this post content. Generated by the server on creation. When updating a post, existing profile posts must include their original post_content_id unchanged. readOnly: true profiles: type: array description: The list of profiles to post to. Can be an empty list only when the post is in DRAFT status. items: $ref: '#/components/schemas/ProfilePostProfileDto' settings: type: object description: "Network-specific post settings. If no settings are provided, this field will be omitted in the JSON response. All values are persisted as strings.\nCurrently, only TikTok has available settings:\n
{\n  \"settings\": {\n    \"tiktok\": {\n      \"disable_comment\": \"true\",\n      \"disable_duet\": \"false\",\n      \"disable_stitch\": \"true\",\n      \"auto_add_music\": \"false\"\n    }\n  }\n}
\n" additionalProperties: $ref: '#/components/schemas/MapOfstringAndstring' text: type: string description: The text/caption content for the post. Whether text is required depends on the target social network. In DRAFT status, this is always optional. description: The content to post to one or more social profiles as part of a social post campaign. ConnectionResponseDto: type: object properties: connections: type: array description: List of established social network connections for the account. readOnly: true items: $ref: '#/components/schemas/ConnectionDto' description: A wrapper containing the list of established social network connections for a given Constant Contact account. securitySchemes: oauth2_implicit: type: oauth2 flows: implicit: scopes: contact_data: Read or modify contact data. campaign_data: Read or modify email campaign data. account_read: Read account data. account_update: Modify account data. billing_data: Read or modify billing data. authorizationUrl: https://authz.constantcontact.com/oauth2/default/v1/authorize oauth2_access_code: type: oauth2 flows: authorizationCode: scopes: contact_data: Read or modify contact data. campaign_data: Read or modify email campaign data. account_read: Read account data. account_update: Modify account data. billing_data: Read or modify billing data. authorizationUrl: https://authz.constantcontact.com/oauth2/default/v1/authorize tokenUrl: https://authz.constantcontact.com/oauth2/default/v1/token ctctPartnerAuthorizer: type: oauth2 flows: implicit: scopes: v3api/general.partner: Access to general partner API methods authorizationUrl: https://v3api-partner.auth.us-east-1.amazoncognito.com/oauth2/token description: Partner Authentication api_key: type: apiKey name: x-api-key in: header