Skip to main content
POST
/
communication-preferences
/
v3
/
subscribe
Subscribe a contact
curl --request POST \
  --url https://api.hubapi.com/communication-preferences/v3/subscribe \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "emailAddress": "<string>",
  "subscriptionId": "<string>",
  "legalBasis": "CONSENT_WITH_NOTICE",
  "legalBasisExplanation": "<string>"
}
'
{
  "description": "<string>",
  "id": "<string>",
  "name": "<string>",
  "sourceOfStatus": "BRAND_WIDE_STATUS",
  "status": "NOT_SUBSCRIBED",
  "brandId": 123,
  "legalBasis": "CONSENT_WITH_NOTICE",
  "legalBasisExplanation": "<string>",
  "preferenceGroupName": "<string>"
}

Supported products

Requires one of the following products or higher.
Marketing HubMarketing Hub -Enterprise
Sales HubSales Hub -Free
Service HubService Hub -Free
Content HubContent Hub -Free
Data HubData Hub -Free

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

Body

application/json
emailAddress
string
required

Contact's email address.

subscriptionId
string
required

ID of the subscription being updated for the contact.

Legal basis for updating the contact's status (required for GDPR enabled portals).

Available options:
CONSENT_WITH_NOTICE,
LEGITIMATE_INTEREST_CLIENT,
LEGITIMATE_INTEREST_OTHER,
LEGITIMATE_INTEREST_PQL,
NON_GDPR,
PERFORMANCE_OF_CONTRACT,
PROCESS_AND_STORE

A more detailed explanation to go with the legal basis (required for GDPR enabled portals).

Response

successful operation

description
string
required

A description of the subscription.

id
string
required

The ID for the subscription.

name
string
required

The name of the subscription.

sourceOfStatus
enum<string>
required

Where the status is determined from e.g. PORTAL_WIDE_STATUS if the contact opted out from the portal.

Available options:
BRAND_WIDE_STATUS,
PORTAL_WIDE_STATUS,
SUBSCRIPTION_STATUS
status
enum<string>
required

Whether the contact is subscribed.

Available options:
NOT_SUBSCRIBED,
SUBSCRIBED
brandId
integer<int64>

The ID of the brand that the subscription is associated with, if there is one.

The legal reason for the current status of the subscription.

Available options:
CONSENT_WITH_NOTICE,
LEGITIMATE_INTEREST_CLIENT,
LEGITIMATE_INTEREST_OTHER,
LEGITIMATE_INTEREST_PQL,
NON_GDPR,
PERFORMANCE_OF_CONTRACT,
PROCESS_AND_STORE

A more detailed explanation to go with the legal basis.

preferenceGroupName
string

The name of the preferences group that the subscription is associated with.

Last modified on December 16, 2025