The Webhooks enable you to subscribe to Growth-X events. This subscription allows you to receive HTTP POST requests from Growth-X at an endpoint of your choosing and integrate with other systems. Each event from Growth-X comes with a distinct payload, which is included in the body of the request as an application/json
Setup:
1. Open settings panel
2. Click on integrations and choose webhooks

webhook step 2

3. Click new webhooks

webhook step 3

4. Once you clicked the button a screen will appear for the setup.

webhook step 4

a. Name: An easy way for you to organize and search for webhooks
b. URL: The URL where you want to receive HTTP requests.
c. Event Type: Choose the types of events you want to be notified about through webhooks.
5. Hit create and make sure to enable it for event’s to start broadcasting.

webhook step 5

Event types and schemas.
Technical part of event types, what schemas to expect on given event type and examples.
Event data schema definition in Python

from typing import Literal, TypedDict, Generic, TypeVar
from enum import Enum

T = TypeVar('T', bound=TypedDict)


class EventData(Generic[T], TypedDict):
    client: str  # Email of Growth-X client
    event_type: Literal[
        "connection.created",
        "connection.updated",
        "message.created",
        "tag.attached",
        "tag.detached"
    ]
    occurred_at: str  # isoformat 'YYYY-MM-DD HH:MM:SS.mmmmmm'.
    attempt_number: int  # max 3 attempts
    data: T
    data_type: Literal["connection", "message", "tag"]


class ConnectionData(TypedDict):
    id: int
    connection_date: str
    full_conversation: list[dict] | None


class ConnectionDataWithAssociations(TypedDict):
    id: int
    connection_date: str
    full_conversation: list[dict] | None

    user: UserData
    receiver: ReceiverData
    campaign: CampaignData | None


class MessageData(TypedDict):
    id: int
    sent_date: str
    content: str
    type: MessageType | str

    user: UserData
    receiver: ReceiverData
    campaign: CampaignData | None


class TagData(TypedDict):
    id: int
    name: str
    receiver: ReceiverData


class ReceiverData(TypedDict):
    id: int
    first_name: str
    last_name: str
    email: str | None
    username: str | None
    linkedin_url: str | None
    headline: str | None
    company: str | None
    phone: str | None
    location: str | None
    twitter_url: str | None
    websites: str | None
    birthday: str | None


class UserData(TypedDict):
    id: int
    email: str | None  # Email of LinkedIn user


class CampaignData(TypedDict):
    id: int
    name: str


class MessageType(str, Enum):
    INVITE = "invite"
    MESSAGE_REQUEST = "message_request"
    INMAIL = "inmail"

    MESSAGE = "message"
    SECOND_MESSAGE = "second_message"
    THIRD_MESSAGE = "third_message"
    RESPONSE = "response"

    NURTURE = "nurture"
    NURTURE_FIRST_FOLLOWUP = "nurture_first_followup"
    NURTURE_SECOND_FOLLOWUP = "nurture_second_followup"
    NURTURE_THIRD_FOLLOWUP = "nurture_third_followup"
Event types and example of broadcasted data
Event type: connection created
Connection created event is broadcasted when Growth-X saves a new LinkedIn connection
Example:

{
  "clinet": "client@growth-x.com",
  "event_type": "connection.created",
  "occured_at": "2025-01-24 16:30:39.698",
  "attempt_number": 1,
  "data_type": "connection",
  "data": {
    "id": 1,
    "connection_date": "2025-01-24 14:30:39.698",
    "full_conversation": [
      {
        "sender": "user",
        "message": "Hello, how are you?",
        "sent_date": "2025-01-23 14:41:39.698",
        "linkedin_id": "example_1==",
        "inbox": "sn"
      },
      {
        "sender": "receiver",
        "message": "I'm fine, thank you.",
        "sent_date": "2025-01-24 14:41:39.698",
        "linkedin_id": "example_1==",
        "inbox": "sn"
      }
    ],
    "user": {
      "id": 1,
      "email": "test@growth-x.com"
    },
    "receiver": {
      "id": 1,
      "first_name": "Riccardo",
      "last_name": "Pissano",
      "email": "r@growth-x.com",
      "username": "rikypisano",
      "linkedin_url": "https://www.linkedin.com/in/rikypisano/",
      "headline": "CEO @ Growth-X.com | Identify and Convert High-Intent B2B Leads into LinkedIn Connections for Free",
      "company": "Growth-X",
      "phone": "9548333333",
      "location": "Miami, Florida, United States",
      "twitter_url": "https://twitter.com/rikypisano",
      "websites": "https://growth-x.com",
      "birthday": null
    },
    "campaign": {
      "id": 1,
      "name": "Test Campaign"
    }
  }
}
connection.created event data type definition in Python
EventData[ConnectionDataWithAssociations]
Event type: connection updated
Connection updated event is broadcasted when Growth-X updates inbox with new conversation
Example:

{
  "clinet": "client@growth-x.com",
  "event_type": "connection.updated",
  "occured_at": "2025-01-24 16:30:39.698",
  "attempt_number": 1,
  "data_type": "connection",
  "data": {
    "id": 1,
    "connection_date": "2025-01-24 14:30:39.698",
    "full_conversation": [
      {
        "sender": "user",
        "message": "Hello, how are you?",
        "sent_date": "2025-01-23 14:41:39.698"
      },
      {
        "sender": "receiver",
        "message": "I'm fine, thank you.",
        "sent_date": "2025-01-24 14:41:39.698"
      }
    ]
  }
}
connection.updated event data type definition in Python
EventData[ConnectionData]
Event type: message created
Message created event is broadcasted when Growth-X saves a new message, including Invite and your follow-up messages, as well as responses from the receiver.
Example:

{
  "clinet": "client@growth-x.com",
  "event_type": "message.created",
  "occured_at": "2025-01-24 16:30:39.698",
  "attempt_number": 1,
  "data_type": "message",
  "data": {
    "id": 1,
    "sent_date": "2025-01-24 16:30:39.698",
    "content": "Let's schedule demo.",
    "type": "response", 
    "user": {
      "id": 1,
      "email": "test@growth-x.com"
    },
    "receiver": {
      "id": 1,
      "first_name": "Riccardo",
      "last_name": "Pissano",
      "email": "r@growth-x.com",
      "username": "rikypisano",
      "linkedin_url": "https://www.linkedin.com/in/rikypisano/",
      "headline": "CEO @ Growth-X.com | Identify and Convert High-Intent B2B Leads into LinkedIn Connections for Free",
      "company": "Growth-X",
      "phone": "9548333333",
      "location": "Miami, Florida, United States",
      "twitter_url": "https://twitter.com/rikypisano",
      "websites": "https://growth-x.com",
      "birthday": null
    },
    "campaign": {
      "id": 1,
      "name": "Test Campaign"
    }
  }
}
message.created event data type definition in Python
EventData[MessageData]
Event type: tag attached
Tag attached event is broadcasted whenever a tag is attached to a receiver. Tag can be attached to receiver in inbox or in prospects tab. Growth-X sentiment analyser attaches positive-ai-defined tag which will also be broadcasted.
Example:

{
  "clinet": "client@growth-x.com",
  "event_type": "tag.attached",
  "occured_at": "2025-01-24 16:30:39.698",
  "attempt_number": 1,
  "data_type": "tag",
  "data": {
    "id": 1,
    "name": "positive",
    "receiver": {
      "id": 1,
      "first_name": "Riccardo",
      "last_name": "Pissano",
      "email": "r@growth-x.com",
      "username": "rikypisano",
      "linkedin_url": "https://www.linkedin.com/in/rikypisano/",
      "headline": "CEO @ Growth-X.com | Identify and Convert High-Intent B2B Leads into LinkedIn Connections for Free",
      "company": "Growth-X",
      "phone": "9548333333",
      "location": "Miami, Florida, United States",
      "twitter_url": "https://twitter.com/rikypisano",
      "websites": "https://growth-x.com",
      "birthday": null
    }
  }
}
Event type: tag detached
Tag detached event is broadcasted whenever tag is removed from receiver
Example:

{
  "clinet": "client@growth-x.com",
  "event_type": "tag.detached",
  "occured_at": "2025-01-24 16:30:39.698",
  "attempt_number": 1,
  "data_type": "tag",
  "data": {
    "id": 1,
    "name": "positive",
    "receiver": {
      "id": 1,
      "first_name": "Riccardo",
      "last_name": "Pissano",
      "email": "r@growth-x.com",
      "username": "rikypisano",
      "linkedin_url": "https://www.linkedin.com/in/rikypisano/",
      "headline": "CEO @ Growth-X.com | Identify and Convert High-Intent B2B Leads into LinkedIn Connections for Free",
      "company": "Growth-X",
      "phone": "9548333333",
      "location": "Miami, Florida, United States",
      "twitter_url": "https://twitter.com/rikypisano",
      "websites": "https://growth-x.com",
      "birthday": null
    }
  }
}
tag.attached / tag.detached event data type definition in Python
EventData[Tag]