Outbound Webhooks
Glue provides webhooks that let you receive HTTP push notifications whenever threads or messages are created or sent in your workspace. This allows you to build integrations that respond to changes in real time—for example, syncing data to external systems, triggering workflows, or sending notifications based on activity in Glue.
You can use the Glue GraphQL schema explorer to look up the object types that are included in webhook payloads.
Webhooks are configured at the Workspace level. You can choose to receive updates from all groups and threads within a workspace, or scope webhooks to a specific group, depending on your integration needs.
To set up webhooks, go to your application’s settings in Glue, and create an OAuth Application to get started. Once configured, whenever a new workspace authorizes your application, Glue automatically creates a webhook for that workspace that posts to the URL you provide.
Handling Webhook Requests
Authentication and Security
All webhook requests must be sent through HTTPS. Each request is also signed, so you know the request came from Glue.
Retry Policy
If the response to the webhook request is anything other than a 200, we will retry the request with the delays listed below.
1
10s
2
1m
3
10m
Webhook Payload
The webhook HTTP payload will include information both in its HTTP headers and its request body.
The format of the payload body reflects that of the corresponding GraphQL entity. You can explore the payload structure in our GraphQL schema explorer. For a closer look at specific fields, you can also query them directly using the Linear API.
The payload will be sent with the following HTTP headers:
Content-Type: application/json
X-Glue-Event-Signature: {HMAC Signature}
Example JavaScript to verify the signature
const crypto = require("crypto");
function verifySignature(request, secret = "") {
const hmac = crypto.createHmac("sha256", secret);
hmac.update(request.body);
const digest = hmac.digest("hex");
return digest === request.headers["X-Glue-Event-Signature"];
}
Event Body
type
string
The Event Type being sent
workspaceID
string
The Workspace ID the event belongs to.
event
Event
The Event payload
Event Type
message.created
Occurs when a new message is sent in an existing thread. Contains the Message, and the Thread the Message was sent in.
thread.created
Occurs when a new thread is created. Contains the Thread Created, and the first Message sent.
New Message or Thread Event
For each message created in Glue, the corresponding event will have message
content and thread
content. The contents of each one are outlined below.
For example:
{
"event": {
"message": {
"id": "msg_2u0hEEQUZuDraFWJdoqLV2nF1gm",
"quotedMessageID": "msg_2u0hEEQUZuDraFWJdoqLV2nF1gm",
"text": "I don't know what happened, it worked on my local",
"createdAt": "2025-03-07T23:48:06.079072Z",
"updatedAt": "2025-03-07T23:54:33.050815Z",
"url": "https://app.gluegroups.com/thr_2rKIaEdbiSuc869jTAGfMpSfaaa/usr_2vTvWPDt27hffx7BUNgIHQVLbbb-bd784d43-f620-46e7-bded-393522c68ccc",
"user": {
"avatarURL": null,
"bio": "Software Developer",
"id": "usr_2rdDJjsN0n5HONuOusUoNcdu26X",
"name": "Donald Johnson",
"workspaceIDs": ["wks_2rdAeYdtPPUOMQx5MgeeUkw9Yar"]
}
},
"thread": {
"id": "thr_2rdAeT8weQGRzVVjJ0HDzYhI57q",
"subject": "Prod is down",
"createdAt": "2025-01-14T18:17:53.703017Z",
"updatedAt": "2025-03-07T23:48:06.077649Z",
"url": "https://app.gluegroups.com/thr_2rKIaEdbiSuc869jTAGfMpSfaaa",
"isPersistentChat": false,
"recipients": [
{
"id": "grp_2tuREOmMXCuwA9GDHhJf9CaHaaa",
"name": "🥸 Dev Team"
},
{
"address": "[email protected]",
"id": "usr_2tuREOmMXCuwA9GDHhJf9CaHaaa",
"name": "Ima Goodev"
}
],
"user": {
"avatarURL": null,
"bio": "Project Manager",
"id": "usr_2rdAe3Iuh2i92zy9Rq2xsWBQ59u",
"name": "Jane Smith",
"workspaceIDs": ["wks_2rdAeYdtPPUOMQx5MgeeUkw9Yar"]
}
}
},
"type": "message.created",
"workspaceID": "wks_2rdAeYdtPPUOMQx5MgeeUkw9Yar"
}
message
content
message
content id
string
Unique Message UUID (ie msg_2u0XJ6Urwwhd50uzfT1EVgJTwl1
)
user
User
The User that sent the Message
text
string
The Markdown text representing the Message sent.
quotedMessageID
string
The Message UUID quoted by this Message
url
string
Link to the message in the Glue App
createdAt
string
The time the Message was created
updatedAt
string
The time the Message was last updated
thread
content
thread
contentid
string
Unique Thread UUID (ie thr_2rdAeT8weQGRzVVjJ0HDzYhI57q
)
user
User
The User that created the Thread
subject
string
The subject of the Thread
url
string
Link to the Thread in the Glue App
recipients
[]Recipient
Array of recipients of the Thread
isPersistentChat
boolean
Indicates that this is the underlying thread for a group chat. In this case recipients
will contain just one entry which is the group containing this group chat.
createdAt
string
The time the Thread was created
updatedAt
string
The time the Thread was last updated
user
content
user
contentid
string
Unique User UUID (ie usr_2mHVPy5LlHYPs2zHcwm56M85J3h
)
name
string
The full name of the user
avatarURL
string
A link to the User’s avatar image (optional)
bio
string
User’s bio (optional)
workspaceIDs
[]string
Workspace IDs the User belongs to
recipient
content
recipient
contentid
string
Unique User or Group UUID (ie usr_2mHVPy5LlHYPs2zHcwm56M85J3h
for User or grp_2rdAeYdtPPUOMQx5MgeeUkw9Yar
for Group)
name
string
The full name of the User or the Group
address
string
The User’s email address. (This will not be set for Groups)
All time fields are formatted as ISO8601 in UTC 1989-10-28T17:30:00.000Z
Last updated
Was this helpful?