APIWebhook events
thread.assigned
A thread's assignee changed.
Headers
Productlane-EventstringrequiredThe event type.
Productlane-Event-IdstringrequiredUnique per event. Use it to drop duplicates.
Productlane-Delivery-IdstringrequiredUnique per delivery attempt.
Productlane-Webhook-IdstringrequiredThe webhook subscription that matched.
Productlane-SignaturestringrequiredHMAC-SHA256 of the raw body, as t=<timestamp>,v1=<signature>.
Body
application/json
idstringrequiredSame as the Productlane-Event-Id header.
typeenum<string>requiredOne of:thread.assignedcreated_atstring<date-time>requireddataobjectrequired
Example payload
{
"id": "string",
"type": "thread.assigned",
"created_at": "2026-01-15T09:30:00Z",
"data": {
"id": "string",
"number": 0,
"created_at": "string",
"updated_at": "string",
"title": "string",
"text": "string",
"pain_level": "UNKNOWN",
"origin": "string",
"custom_channel": "string",
"status": "open",
"tab": "open",
"snoozed_until": "string",
"last_inbound_message_at": "string",
"last_outbound_message_at": "string",
"last_state_change_at": "string",
"is_read": true,
"contact": {
"id": "string",
"email": "string",
"name": "string",
"image_url": "string",
"company_id": "string",
"is_subscribed": true,
"external_ids": [
"string"
],
"integration_ids": {
"intercom": "string",
"front": "string",
"zendesk": "string",
"hubspot": "string",
"plain": "string",
"productboard": "string",
"slack_channel": "string"
},
"created_at": "string",
"updated_at": "string"
},
"company": {
"id": "string",
"name": "string",
"logo_url": "string",
"domains": [
"string"
],
"size": 0,
"revenue": 0,
"status_id": "string",
"status_name": "string",
"tier_id": "string",
"tier_name": "string",
"owner": {
"id": "string",
"name": "string",
"avatar_url": "string"
},
"external_ids": [
"string"
],
"integration_ids": {
"intercom": "string",
"front": "string",
"zendesk": "string",
"hubspot": "string",
"plain": "string",
"productboard": "string",
"slack_channel": "string"
},
"created_at": "string",
"updated_at": "string"
},
"assignee": {
"id": "string",
"name": "string",
"email": "string",
"image_url": "string"
},
"reporter": {
"id": "string",
"name": "string",
"email": "string",
"image_url": "string"
},
"tags": [
{
"id": "string",
"name": "string",
"color": "string",
"icon": "string",
"tag_group_id": "string",
"created_at": "string",
"updated_at": "string"
}
],
"customer_needs": [
{
"id": "string",
"thread_id": "string",
"project_id": "string",
"issue_id": "string",
"priority": 0,
"created_at": "string",
"updated_at": "string"
}
],
"external_ids": [
"string"
],
"integration_ids": {
"intercom": "string",
"front": "string",
"zendesk": "string",
"hubspot": "string",
"plain": "string",
"productboard": "string",
"slack_channel": "string"
},
"ai_draft_html": "string",
"ai_draft_sources": [
null
],
"ai_draft_generated_at": "string",
"ai_draft_started_at": "string",
"ai_draft_error_at": "string"
}
}Your response
200
Return any 2xx status to acknowledge the event. Anything else counts as a failure: we try 3 times in total, right away and then after 1 and 5 minutes.