Add Public Ticket Comment
Reply through an existing conversation, or log an Email engagement when there is no conversation. Read the delivery distinction below before using this action.
Action identifier: add_public_ticket_comment. Reference checked: 29 September 2026.
Inputs
ticket_id
string
Required
The ID of the ticket
content
string
Required
The message body. In the standard email-ticket flow, this normally sends an email reply to the customer through HubSpot using the existing conversation thread. If no conversation thread is available, it logs a CRM Email engagement without delivering an email. Supports HTML formatting; use HTML tags rather than Markdown.
sender_actor_id
string
Required
The actor ID of the agent sending the reply (e.g. A-12345)
subject
string
""
Subject line for the email engagement fallback. Leave blank to default to 'Reply to Ticket {ticket_id}'.
Output shape
Paths are relative to this action's output. Select them from the builder's variable picker; do not add a ticket wrapper to actions that return top-level fields. Nullable property fields and empty defaults are not proof that a value was retrieved.
message
object
Conversation message or logged CRM Email engagement, normalized to this output shape.
message.id
string
ID of the conversation message or CRM Email engagement; the object type depends on the path used.
message.properties
object
Property values returned for this record; some declared fields may be empty.
message.properties.hs_message_body
string | null
Message body when returned in this field; may be empty even when creation succeeds.
message.createdAt
string
Creation timestamp returned by HubSpot; empty when unavailable.
message.updatedAt
string
Last-update timestamp returned by HubSpot; empty when unavailable.
message.archived
boolean
Archive flag returned by HubSpot; defaults to false when omitted.
success
boolean
True when the conversation request returns message data or the fallback engagement is created and attached. Not a delivery receipt.
exists
boolean
Mirrors success in this action; it does not confirm email delivery.
Property objects can contain additional fields returned by HubSpot. The declared fields above are not a promise that every property is populated.
Behavior and limits
With a conversation thread: posts a MESSAGE through the selected thread's original channel/account to the associated contact's email. Channel information and recipient email must be available, and the sender must be allowed to use that channel. The most recently active returned thread is selected.
Without a conversation thread: creates and associates a CRM Email engagement. This logs an email on the timeline; it does not deliver an email. Even success: true or the engagement's SENT status does not prove delivery. Verify the actual path and outcome before telling a customer that a message was sent.
The sender picker uses A-{userId} from HubSpot owner records. An owner record's id is a different identifier. The subject input affects the engagement fallback, not the subject of an existing conversation.
Use HTML, preferably simple inline markup such as <strong> and <br>. The conversation path wraps the content in a paragraph; test nested block markup in the rendered message. The normalized message output is not a delivery receipt and may not echo the body in message.properties.hs_message_body.
Failure to create or attach the fallback returns false flags. Creation and association are separate requests: a failed association can leave an unattached engagement. Inspect existing effects before retrying.
See Troubleshooting for request errors and retry behavior, or return to the action catalog.
Was this helpful?

