cStar fires 35 webhook event types across 7 categories. Subscribe to the ones you care about. You don't have to take them all.

All payload fields are snake_case. The wrapper envelope (id, type, created_at, team_id, data) is the same for every event.

Categories

Category Events
Tickets ticket.created, ticket.updated, ticket.closed, ticket.message_added, ticket.deleted, ticket.assigned
Customers customer.created, customer.updated, customer.deleted, customer_group.created, customer_group.updated, customer_group.deleted
Articles article.created, article.published, article.updated, article.deleted
Team team.preferences_updated, agent.preferences_updated
Gamification boss.spawned, boss.damaged, boss.defeated, player.level_up, player.achievement_unlocked, player.xp_gained, player.quest_completed, player.streak_milestone, social.one_up_sent, social.high_five_sent
Community community_post.created, community_post.updated, community_post.status_changed, community_post.commented, community_post.deleted, community_post.voted
Surveys survey.submitted

Ticket Events

ticket.created

Fired when a new ticket is created via app, widget, API, or email.

{
  "id": "evt_ticket_created_a1B2c3D4",
  "type": "ticket.created",
  "created_at": "2026-04-27T18:42:11.000Z",
  "team_id": "team_01H8X9YZ7E0J3K4M5N6U",
  "data": {
    "ticket": {
      "id": "tkt_01H8X9YZ7E0J3K4M5N6P",
      "prefixed_id": "CST-1024",
      "title": "Cannot reset password",
      "status": "new",
      "priority": "normal",
      "channel": "widget",
      "customer_id": "cus_01H8X9YZ7E0J3K4M5N6Q",
      "created_at": "2026-04-27T18:42:11.000Z"
    },
    "customer": {
      "id": "cus_01H8X9YZ7E0J3K4M5N6Q",
      "name": "Casey Patel",
      "email": "casey@example.com"
    }
  }
}

ticket.updated

Fired when a ticket's status, priority, assignment, tags, title, notes, or custom fields change. The changes block uses { field: { from, to } } shape and may contain any subset of watched fields.

{
  "data": {
    "ticket": {
      "id": "tkt_01H8X9YZ7E0J3K4M5N6P",
      "prefixed_id": "CST-1024",
      "status": "open",
      "priority": "high"
    },
    "changes": {
      "priority": { "from": "normal", "to": "high" },
      "tags": { "from": ["bug"], "to": ["bug", "feature-request"] }
    }
  }
}

ticket.closed

Fired when a ticket is resolved or closed.

{
  "data": {
    "ticket": {
      "id": "tkt_01H8X9YZ7E0J3K4M5N6P",
      "prefixed_id": "CST-1024",
      "status": "resolved",
      "resolved_at": "2026-04-27T19:08:43.000Z"
    },
    "changes": { "status": { "from": "open", "to": "resolved" } }
  }
}

ticket.message_added

Fired when a new message is added to a ticket. The customer block is omitted on agent or system replies.

{
  "data": {
    "ticket": { "id": "tkt_01H8X9YZ7E0J3K4M5N6P", "dashboard_url": "..." },
    "message": {
      "id": "msg_01H8X9YZ7E0J3K4M5N6R",
      "sender": "agent",
      "sender_name": "Riley",
      "content": "I just sent a reset link to your inbox.",
      "created_at": "2026-04-27T18:55:02.000Z"
    },
    "customer": { "id": "cus_01H8X9YZ7E0J3K4M5N6Q", "name": "Casey Patel", "email": "casey@example.com" }
  }
}

ticket.deleted

Fired when a ticket is deleted. The deleted row's title and metadata aren't included because the row is gone by the time the webhook is sent.

{ "data": { "id": "CST-1024" } }

ticket.assigned

Fired when a ticket is assigned to an agent.

{
  "data": {
    "ticket": { "id": "tkt_01H8X9YZ7E0J3K4M5N6P", "prefixed_id": "CST-1024" },
    "assignee": { "id": "usr_01H8X9YZ7E0J3K4M5N6S", "name": "Riley", "email": "riley@acme.test" },
    "previous_assignee": null
  }
}

Customer Events

customer.created

{
  "data": {
    "customer": {
      "id": "cus_01H8X9YZ7E0J3K4M5N6Q",
      "name": "Casey Patel",
      "email": "casey@example.com",
      "status": "active",
      "tags": ["trial"],
      "created_at": "2026-04-27T18:42:11.000Z"
    }
  }
}

customer.updated

Same shape as customer.created plus a changes block.

{
  "data": {
    "customer": { "id": "cus_01H8X9YZ7E0J3K4M5N6Q", "tags": ["trial", "paying"] },
    "changes": { "tags": { "from": ["trial"], "to": ["trial", "paying"] } }
  }
}

customer.deleted

Sends only the customer ID.

{ "data": { "id": "cus_01H8X9YZ7E0J3K4M5N6Q" } }

customer_group.created, customer_group.updated, customer_group.deleted

Customer group lifecycle. The deleted variant sends only { customer_group: { id } }.

{
  "data": {
    "group": {
      "id": "grp_01H8X9YZ7E0J3K4M5N6T",
      "name": "Pro Plan",
      "color": "indigo",
      "member_count": 38
    }
  }
}

Article Events

article.created, article.published, article.updated

{
  "data": {
    "article": {
      "id": "art_01H8X9YZ7E0J3K4M5N6U",
      "title": "How to reset your password",
      "slug": "how-to-reset-your-password",
      "is_public": true,
      "published_at": "2026-04-27T19:00:00.000Z"
    }
  }
}

article.deleted

Sends only the article ID.

{ "data": { "id": "art_01H8X9YZ7E0J3K4M5N6U" } }

Team Events

team.preferences_updated

Fires when team-wide UX preferences change. Useful for keeping CRM mirrors in sync with feature toggles like bossBattlesEnabled.

{
  "data": {
    "team_id": "team_01H8X9YZ7E0J3K4M5N6U",
    "changed": ["bossBattlesEnabled"],
    "preferences": { "bossBattlesEnabled": false }
  }
}

agent.preferences_updated

Per-user preferences (e.g., boringMode toggled).

{
  "data": {
    "team_id": "team_01H8X9YZ7E0J3K4M5N6U",
    "member_id": "mem_01H8X9YZ7E0J3K4M5N6U",
    "agent_id": "agt_01H8X9YZ7E0J3K4M5N6U",
    "changed": ["boringMode"],
    "preferences": { "boringMode": true }
  }
}

Gamification Events

boss.spawned

{
  "data": {
    "boss": { "id": "boss_thunder_drake", "name": "The Thunder Drake", "level": 4, "max_hp": 1200 }
  }
}

boss.damaged

Fires every time a closed ticket damages the active boss.

{
  "data": {
    "boss": { "id": "boss_thunder_drake", "current_hp": 740 },
    "damage": 120,
    "by": { "agent_id": "usr_01H8X9YZ7E0J3K4M5N6S", "name": "Riley" }
  }
}

boss.defeated

{
  "data": {
    "boss": { "id": "boss_thunder_drake", "name": "The Thunder Drake" },
    "final_blow_by": { "agent_id": "usr_01H8X9YZ7E0J3K4M5N6S", "name": "Riley" },
    "team_xp_awarded": 1500
  }
}

player.level_up

{
  "data": {
    "player": { "agent_id": "usr_01H8X9YZ7E0J3K4M5N6S", "name": "Riley" },
    "level": { "from": 7, "to": 8 },
    "title_unlocked": "Apprentice Healer"
  }
}

player.achievement_unlocked

Note the namespace: it's player.achievement_unlocked, not achievement.unlocked.

{
  "data": {
    "player": { "agent_id": "usr_01H8X9YZ7E0J3K4M5N6S", "name": "Riley" },
    "achievement": { "id": "first_resolve", "name": "First Resolve", "xp": 50 }
  }
}

player.xp_gained

{
  "data": {
    "player": { "agent_id": "usr_01H8X9YZ7E0J3K4M5N6S", "name": "Riley" },
    "amount": 75,
    "reason": "ticket.resolved",
    "ticket_id": "tkt_01H8X9YZ7E0J3K4M5N6P"
  }
}

player.quest_completed

{
  "data": {
    "player": { "agent_id": "usr_01H8X9YZ7E0J3K4M5N6S", "name": "Riley" },
    "quest": { "id": "resolve_5_tickets", "name": "Resolve 5 tickets today", "xp": 100 }
  }
}

player.streak_milestone

Fires at 3, 5, 10, and 25 day milestones.

{
  "data": {
    "player": { "agent_id": "usr_01H8X9YZ7E0J3K4M5N6S", "name": "Riley" },
    "streak_days": 5,
    "milestone": 5
  }
}

social.one_up_sent

{
  "data": {
    "from": { "agent_id": "usr_01H8X9YZ7E0J3K4M5N6S", "name": "Riley" },
    "to": { "agent_id": "usr_01H8X9YZ7E0J3K4M5N6V", "name": "Sam" },
    "ticket_id": "tkt_01H8X9YZ7E0J3K4M5N6P",
    "message": "Great empathy on this one"
  }
}

social.high_five_sent

Cross-team recognition.

{
  "data": {
    "from_team": { "id": "team_acme", "name": "Acme Support" },
    "to_team": { "id": "team_globex", "name": "Globex Support" },
    "message": "Thanks for the assist!"
  }
}

Community Events

community_post.created

{
  "data": {
    "post": {
      "id": "post_01H8X9YZ7E0J3K4M5N6W",
      "prefixed_id": "IDEA-42",
      "title": "Add Slack-style threading to tickets",
      "status": "open",
      "visibility": "public",
      "topic": "feature-requests",
      "created_at": "2026-04-27T18:42:11.000Z"
    }
  }
}

community_post.updated

Same shape as created.

community_post.status_changed

Fires on transitions like Open to Planned to Completed.

{
  "data": {
    "post": {
      "id": "post_01H8X9YZ7E0J3K4M5N6W",
      "title": "Add Slack-style threading to tickets",
      "status": "planned",
      "visibility": "public"
    }
  }
}

community_post.commented

{
  "data": {
    "comment": {
      "id": "cmt_01H8X9YZ7E0J3K4M5N6X",
      "post_id": "post_01H8X9YZ7E0J3K4M5N6W",
      "content": "Bumping for visibility.",
      "author_id": "cus_01H8X9YZ7E0J3K4M5N6Q",
      "created_at": "2026-04-27T18:55:02.000Z"
    }
  }
}

community_post.deleted

{
  "data": {
    "post": {
      "id": "post_01H8X9YZ7E0J3K4M5N6W",
      "prefixed_id": "IDEA-42",
      "title": "Add Slack-style threading to tickets"
    }
  }
}

prefixed_id and title are best-effort. Always present from the dashboard, sometimes absent when deleted via the v1 API. Subscribers should rely on id only.

community_post.voted

{
  "data": {
    "post": { "id": "post_01H8X9YZ7E0J3K4M5N6W", "vote_count": 13 },
    "voter": { "id": "cus_01H8X9YZ7E0J3K4M5N6Q" },
    "direction": "up"
  }
}

Survey Events

survey.submitted

{
  "data": {
    "survey": {
      "id": "svy_01H8X9YZ7E0J3K4M5N6Y",
      "ticket_id": "tkt_01H8X9YZ7E0J3K4M5N6P",
      "score": 5,
      "comment": "Resolved fast, thank you!",
      "submitted_at": "2026-04-27T19:30:00.000Z"
    },
    "customer": {
      "id": "cus_01H8X9YZ7E0J3K4M5N6Q",
      "email": "casey@example.com"
    }
  }
}

Flat Payload Mode

When Flat Payload is enabled on a webhook, nested fields in data are duplicated at a flat root key with underscore-separated names. Easier to use in visual automation builders like Zapier:

{
  "id": "evt_ticket_created_a1B2c3D4",
  "type": "ticket.created",
  "data": { "ticket": { "id": "tkt_abc", "title": "Help" } },
  "flat": { "ticket_id": "tkt_abc", "ticket_title": "Help" }
}

Related