Skip to main content

Actions

The ballerinax/hubspot.marketing.subscriptions package exposes the following clients:

ClientPurpose
ClientManages contact subscription statuses, opt-outs, and subscription definitions via the HubSpot Communication Preferences API v4.

Client

Manages contact subscription statuses, opt-outs, and subscription definitions via the HubSpot Communication Preferences API v4.

Configuration

FieldTypeDefaultDescription
authhttp:BearerTokenConfig|OAuth2RefreshTokenGrantConfig|ApiKeysConfigRequiredOAuth 2.0 refresh token config, bearer token, or API key credentials.
httpVersionhttp:HttpVersionHTTP_2_0HTTP protocol version.
timeoutdecimal30Request timeout in seconds.
retryConfighttp:RetryConfig()Retry configuration for failed requests.
secureSockethttp:ClientSecureSocket()SSL/TLS configuration.
proxyhttp:ProxyConfig()Proxy server configuration.
compressionhttp:CompressionCOMPRESSION_AUTOHTTP compression setting.
circuitBreakerhttp:CircuitBreakerConfig()Circuit breaker configuration.
cachehttp:CacheConfig{}HTTP response cache configuration.
validationbooleantrueEnable/disable constraint validation.
laxDataBindingbooleantrueEnable/disable lax data binding.

Initializing the client

import ballerinax/hubspot.marketing.subscriptions as hsmsubscriptions;

configurable string clientId = ?;
configurable string clientSecret = ?;
configurable string refreshToken = ?;

hsmsubscriptions:Client subscriptionsClient = check new ({
auth: {
clientId: clientId,
clientSecret: clientSecret,
refreshToken: refreshToken,
credentialBearer: oauth2:POST_BODY_BEARER
}
});

Operations

Subscription status: single contact

getCommunicationPreferencesV4StatusesSubscriberIdString

Retrieves the subscription statuses for a specific contact on a given channel.

Parameters:

NameTypeRequiredDescription
subscriberIdStringstringYesThe contact's subscriber ID (e.g., email address).
headersmap<string|string[]>NoOptional HTTP headers.
queriesGetCommunicationPreferencesV4StatusesSubscriberIdStringQueriesYesQuery parameters including channel (required) and optional businessUnitId.

Returns: ActionResponseWithResultsPublicStatus|error

Sample code:

hsmsubscriptions:ActionResponseWithResultsPublicStatus response =
check subscriptionsClient->getCommunicationPreferencesV4StatusesSubscriberIdString(
"[email protected]",
queries = {channel: "EMAIL"}
);

Sample response:

{
"status": "COMPLETE",
"results": [
{
"subscriberIdString": "[email protected]",
"subscriptionId": 12345,
"subscriptionName": "Marketing Newsletter",
"channel": "EMAIL",
"status": "SUBSCRIBED",
"source": "SUBSCRIPTION_STATUS",
"legalBasis": "CONSENT_WITH_NOTICE",
"legalBasisExplanation": "User opted in via website form",
"timestamp": "2025-06-15T10:30:00Z"
}
],
"startedAt": "2025-06-15T10:30:00.123Z",
"completedAt": "2025-06-15T10:30:00.456Z"
}
postCommunicationPreferencesV4StatusesSubscriberIdString

Updates the subscription status for a specific contact.

Parameters:

NameTypeRequiredDescription
subscriberIdStringstringYesThe contact's subscriber ID (e.g., email address).
payloadPartialPublicStatusRequestYesThe subscription status update payload including statusState, channel, and subscriptionId.
headersmap<string|string[]>NoOptional HTTP headers.

Returns: ActionResponseWithResultsPublicStatus|error

Sample code:

hsmsubscriptions:ActionResponseWithResultsPublicStatus response =
check subscriptionsClient->postCommunicationPreferencesV4StatusesSubscriberIdString(
"[email protected]",
{
statusState: "SUBSCRIBED",
channel: "EMAIL",
subscriptionId: 12345,
legalBasis: "CONSENT_WITH_NOTICE",
legalBasisExplanation: "User opted in via website form"
}
);

Sample response:

{
"status": "COMPLETE",
"results": [
{
"subscriberIdString": "[email protected]",
"subscriptionId": 12345,
"subscriptionName": "Marketing Newsletter",
"channel": "EMAIL",
"status": "SUBSCRIBED",
"source": "SUBSCRIPTION_STATUS",
"legalBasis": "CONSENT_WITH_NOTICE",
"legalBasisExplanation": "User opted in via website form",
"setStatusSuccessReason": "REQUESTED_CHANGE_OCCURRED",
"timestamp": "2025-06-15T11:00:00Z"
}
],
"startedAt": "2025-06-15T11:00:00.123Z",
"completedAt": "2025-06-15T11:00:00.456Z"
}

Unsubscribe all: single contact

getCommunicationPreferencesV4StatusesSubscriberIdStringUnsubscribeAll

Retrieves the opt-out-of-all (wide) status for a specific contact on a given channel.

Parameters:

NameTypeRequiredDescription
subscriberIdStringstringYesThe contact's subscriber ID (e.g., email address).
headersmap<string|string[]>NoOptional HTTP headers.
queriesGetCommunicationPreferencesV4StatusesSubscriberIdStringUnsubscribeAllQueriesYesQuery parameters including channel (required), optional businessUnitId and verbose.

Returns: ActionResponseWithResultsPublicWideStatus|error

Sample code:

hsmsubscriptions:ActionResponseWithResultsPublicWideStatus response =
check subscriptionsClient->getCommunicationPreferencesV4StatusesSubscriberIdStringUnsubscribeAll(
"[email protected]",
queries = {channel: "EMAIL"}
);

Sample response:

{
"status": "COMPLETE",
"results": [
{
"subscriberIdString": "[email protected]",
"channel": "EMAIL",
"wideStatusType": "PORTAL_WIDE",
"status": "SUBSCRIBED",
"timestamp": "2025-06-15T10:30:00Z"
}
],
"startedAt": "2025-06-15T10:30:00.123Z",
"completedAt": "2025-06-15T10:30:00.456Z"
}
postCommunicationPreferencesV4StatusesSubscriberIdStringUnsubscribeAll

Unsubscribes a contact from all communication subscriptions on a given channel.

Parameters:

NameTypeRequiredDescription
subscriberIdStringstringYesThe contact's subscriber ID (e.g., email address).
headersmap<string|string[]>NoOptional HTTP headers.
queriesPostCommunicationPreferencesV4StatusesSubscriberIdStringUnsubscribeAllQueriesYesQuery parameters including channel (required), optional businessUnitId and verbose.

Returns: ActionResponseWithResultsPublicStatus|error

Sample code:

hsmsubscriptions:ActionResponseWithResultsPublicStatus response =
check subscriptionsClient->postCommunicationPreferencesV4StatusesSubscriberIdStringUnsubscribeAll(
"[email protected]",
queries = {channel: "EMAIL"}
);

Sample response:

{
"status": "COMPLETE",
"results": [
{
"subscriberIdString": "[email protected]",
"subscriptionId": 12345,
"subscriptionName": "Marketing Newsletter",
"channel": "EMAIL",
"status": "UNSUBSCRIBED",
"source": "SUBSCRIPTION_STATUS",
"setStatusSuccessReason": "UNSUBSCRIBE_FROM_ALL_OCCURRED",
"timestamp": "2025-06-15T11:00:00Z"
}
],
"startedAt": "2025-06-15T11:00:00.123Z",
"completedAt": "2025-06-15T11:00:00.456Z"
}

Batch subscription operations

postCommunicationPreferencesV4StatusesBatchRead

Batch retrieves subscription statuses for multiple contacts on a given channel.

Parameters:

NameTypeRequiredDescription
payloadBatchInputStringYesA batch input containing an array of subscriber ID strings.
headersmap<string|string[]>NoOptional HTTP headers.
queriesPostCommunicationPreferencesV4StatusesBatchReadQueriesYesQuery parameters including channel (required) and optional businessUnitId.

Returns: BatchResponsePublicStatusBulkResponse|BatchResponsePublicStatusBulkResponseWithErrors|error

Sample code:

hsmsubscriptions:BatchResponsePublicStatusBulkResponse|hsmsubscriptions:BatchResponsePublicStatusBulkResponseWithErrors response =
check subscriptionsClient->postCommunicationPreferencesV4StatusesBatchRead(
{inputs: ["[email protected]", "[email protected]"]},
queries = {channel: "EMAIL"}
);

Sample response:

{
"status": "COMPLETE",
"results": [
{
"subscriberIdString": "[email protected]",
"statuses": [
{
"subscriberIdString": "[email protected]",
"subscriptionId": 12345,
"subscriptionName": "Marketing Newsletter",
"channel": "EMAIL",
"status": "SUBSCRIBED",
"source": "SUBSCRIPTION_STATUS",
"timestamp": "2025-06-15T10:30:00Z"
}
]
},
{
"subscriberIdString": "[email protected]",
"statuses": [
{
"subscriberIdString": "[email protected]",
"subscriptionId": 12345,
"subscriptionName": "Marketing Newsletter",
"channel": "EMAIL",
"status": "UNSUBSCRIBED",
"source": "SUBSCRIPTION_STATUS",
"timestamp": "2025-06-15T09:00:00Z"
}
]
}
],
"startedAt": "2025-06-15T10:30:00.123Z",
"completedAt": "2025-06-15T10:30:00.789Z"
}
postCommunicationPreferencesV4StatusesBatchWrite

Batch updates subscription statuses for multiple contacts.

Parameters:

NameTypeRequiredDescription
payloadBatchInputPublicStatusRequestYesA batch input containing an array of PublicStatusRequest records.
headersmap<string|string[]>NoOptional HTTP headers.

Returns: BatchResponsePublicStatus|error

Sample code:

hsmsubscriptions:BatchResponsePublicStatus response =
check subscriptionsClient->postCommunicationPreferencesV4StatusesBatchWrite({
inputs: [
{
subscriberIdString: "[email protected]",
statusState: "SUBSCRIBED",
channel: "EMAIL",
subscriptionId: 12345,
legalBasis: "CONSENT_WITH_NOTICE",
legalBasisExplanation: "Re-subscribed via preference center"
},
{
subscriberIdString: "[email protected]",
statusState: "SUBSCRIBED",
channel: "EMAIL",
subscriptionId: 12345,
legalBasis: "CONSENT_WITH_NOTICE",
legalBasisExplanation: "Re-subscribed via preference center"
}
]
});

Sample response:

{
"status": "COMPLETE",
"results": [
{
"subscriberIdString": "[email protected]",
"subscriptionId": 12345,
"subscriptionName": "Marketing Newsletter",
"channel": "EMAIL",
"status": "SUBSCRIBED",
"source": "SUBSCRIPTION_STATUS",
"legalBasis": "CONSENT_WITH_NOTICE",
"legalBasisExplanation": "Re-subscribed via preference center",
"setStatusSuccessReason": "REQUESTED_CHANGE_OCCURRED",
"timestamp": "2025-06-15T11:00:00Z"
},
{
"subscriberIdString": "[email protected]",
"subscriptionId": 12345,
"subscriptionName": "Marketing Newsletter",
"channel": "EMAIL",
"status": "SUBSCRIBED",
"source": "SUBSCRIPTION_STATUS",
"legalBasis": "CONSENT_WITH_NOTICE",
"legalBasisExplanation": "Re-subscribed via preference center",
"setStatusSuccessReason": "REQUESTED_CHANGE_OCCURRED",
"timestamp": "2025-06-15T11:00:00Z"
}
],
"startedAt": "2025-06-15T11:00:00.123Z",
"completedAt": "2025-06-15T11:00:00.789Z"
}
postCommunicationPreferencesV4StatusesBatchUnsubscribeAll

Batch unsubscribes multiple contacts from all communication subscriptions on a given channel.

Parameters:

NameTypeRequiredDescription
payloadBatchInputStringYesA batch input containing an array of subscriber ID strings.
headersmap<string|string[]>NoOptional HTTP headers.
queriesPostCommunicationPreferencesV4StatusesBatchUnsubscribeAllQueriesYesQuery parameters including channel (required), optional businessUnitId and verbose.

Returns: BatchResponsePublicBulkOptOutFromAllResponse|error

Sample code:

hsmsubscriptions:BatchResponsePublicBulkOptOutFromAllResponse response =
check subscriptionsClient->postCommunicationPreferencesV4StatusesBatchUnsubscribeAll(
{inputs: ["[email protected]", "[email protected]"]},
queries = {channel: "EMAIL"}
);

Sample response:

{
"status": "COMPLETE",
"results": [
{
"subscriberIdString": "[email protected]",
"statuses": [
{
"subscriberIdString": "[email protected]",
"subscriptionId": 12345,
"channel": "EMAIL",
"status": "UNSUBSCRIBED",
"source": "SUBSCRIPTION_STATUS",
"timestamp": "2025-06-15T11:00:00Z"
}
]
},
{
"subscriberIdString": "[email protected]",
"statuses": [
{
"subscriberIdString": "[email protected]",
"subscriptionId": 12345,
"channel": "EMAIL",
"status": "UNSUBSCRIBED",
"source": "SUBSCRIPTION_STATUS",
"timestamp": "2025-06-15T11:00:00Z"
}
]
}
],
"startedAt": "2025-06-15T11:00:00.123Z",
"completedAt": "2025-06-15T11:00:00.789Z"
}
postCommunicationPreferencesV4StatusesBatchUnsubscribeAllRead

Batch retrieves the opt-out-of-all (wide) statuses for multiple contacts on a given channel.

Parameters:

NameTypeRequiredDescription
payloadBatchInputStringYesA batch input containing an array of subscriber ID strings.
headersmap<string|string[]>NoOptional HTTP headers.
queriesPostCommunicationPreferencesV4StatusesBatchUnsubscribeAllReadQueriesYesQuery parameters including channel (required) and optional businessUnitId.

Returns: BatchResponsePublicWideStatusBulkResponse|BatchResponsePublicWideStatusBulkResponseWithErrors|error

Sample code:

hsmsubscriptions:BatchResponsePublicWideStatusBulkResponse|hsmsubscriptions:BatchResponsePublicWideStatusBulkResponseWithErrors response =
check subscriptionsClient->postCommunicationPreferencesV4StatusesBatchUnsubscribeAllRead(
{inputs: ["[email protected]", "[email protected]"]},
queries = {channel: "EMAIL"}
);

Sample response:

{
"status": "COMPLETE",
"results": [
{
"subscriberIdString": "[email protected]",
"wideStatuses": [
{
"subscriberIdString": "[email protected]",
"channel": "EMAIL",
"wideStatusType": "PORTAL_WIDE",
"status": "SUBSCRIBED",
"timestamp": "2025-06-15T10:30:00Z"
}
]
},
{
"subscriberIdString": "[email protected]",
"wideStatuses": [
{
"subscriberIdString": "[email protected]",
"channel": "EMAIL",
"wideStatusType": "PORTAL_WIDE",
"status": "UNSUBSCRIBED",
"timestamp": "2025-06-15T09:00:00Z"
}
]
}
],
"startedAt": "2025-06-15T10:30:00.123Z",
"completedAt": "2025-06-15T10:30:00.789Z"
}

Subscription definitions

getCommunicationPreferencesV4Definitions

Retrieves all subscription definitions configured in the HubSpot portal.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoOptional HTTP headers.
queriesGetCommunicationPreferencesV4DefinitionsQueriesNoQuery parameters including optional includeTranslations and businessUnitId.

Returns: ActionResponseWithResultsSubscriptionDefinition|error

Sample code:

hsmsubscriptions:ActionResponseWithResultsSubscriptionDefinition response =
check subscriptionsClient->getCommunicationPreferencesV4Definitions();

Sample response:

{
"status": "COMPLETE",
"results": [
{
"id": "12345",
"name": "Marketing Newsletter",
"description": "Monthly marketing updates and product news",
"purpose": "Marketing",
"communicationMethod": "Email",
"isActive": true,
"isDefault": false,
"isInternal": false,
"createdAt": "2024-01-15T08:00:00Z",
"updatedAt": "2025-03-10T14:30:00Z"
},
{
"id": "12346",
"name": "Product Updates",
"description": "Notifications about new features and releases",
"purpose": "Marketing",
"communicationMethod": "Email",
"isActive": true,
"isDefault": false,
"isInternal": false,
"createdAt": "2024-02-20T10:00:00Z",
"updatedAt": "2025-03-10T14:30:00Z"
}
],
"startedAt": "2025-06-15T10:30:00.123Z",
"completedAt": "2025-06-15T10:30:00.456Z"
}