Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.open.cx/llms.txt

Use this file to discover all available pages before exploring further.

Inbound events HubSpot sends to your OpenCX webhook URL, plus the HubSpot API calls OpenCX makes back out. Shapes match the current implementation — no abstractions.
HubSpot POSTs an array of events to your OpenCX webhook URL. OpenCX returns 200 OK immediately and processes in the background — at-most-once, no redelivery on failure.
[
  {
    "eventId": 1234567890,
    "subscriptionId": 987654,
    "portalId": 12345678,
    "appId": 2345678,
    "occurredAt": 1713790000000,
    "subscriptionType": "conversation.newMessage",
    "attemptNumber": 0,
    "objectId": "9598272090",
    "changeSource": "CRM",

    "messageId": "abc-123",
    "messageType": "MESSAGE",
    "changeFlag": "NEW_MESSAGE",

    "propertyName": "hs_pipeline_stage",
    "propertyValue": "2"
  }
]
subscriptionType
string
required
Event type. OpenCX only acts on three — everything else is ignored.
objectId
string
required
Thread ID (conversation events) or ticket ID (ticket events).
messageId
string
On conversation events, OpenCX re-fetches the message via GET /conversations/v3/conversations/threads/{threadId}/messages/{messageId} — the webhook envelope does not carry the message body.
messageType
'MESSAGE' | 'COMMENT'
COMMENT events are skipped (internal notes aren’t customer messages).
propertyName / propertyValue
string
Set on ticket.propertyChange. Empty values are ignored.
Re-fetches the message from HubSpot, then routes it through the AI if it passes filters.Skipped when: messageType === 'COMMENT', sender is BOT or AGENT, messageDirection === 'OUTGOING', the text contains OpenCX’s own AI markers (🔄 AI decided to handoff or <!-- OpenCX-AI-Response -->), or the conversation owner is not the configured AI user.Email only: a 5-second delay lets other OpenCX workflows (drafting, signatures) finish first.Dedup key: ${objectId}-${messageId ?? eventId} within a single delivery batch.
Syncs the changed property onto the associated OpenCX session’s custom data.Skipped when: ticketing is disabled in settings, or propertyValue is null / empty string.
If the HubSpot conversation is owned by a user other than your configured AI user, OpenCX stops replying. Reassign to the AI user to resume — or enable Assist Mode, which ignores owner checks and posts drafts as internal comments.

Connect HubSpot

Legacy App, scopes, access token, and webhook registration.

Handoff & Sync

Day-to-day handoff flow, rep replies, CRM context, contact sync.

Troubleshooting

Connection, webhook, ticket, and reply sync debugging.

HubSpot Overview

Capabilities and supported channels.