Outgoing Webhook Events and Payload Reference
Send real-time ticket and user events to external systems via HTTP POST. This guide covers all available events, their payload formats, and configuration details. This is a Pro feature.
Overview
Outgoing webhooks automatically send data to an external URL whenever specific events occur in Support Genix. Use them to integrate with CRMs, project management tools, Slack (custom), Zapier, Make (Integromat), or any system that accepts HTTP POST requests.
Creating an Outgoing Webhook
Go to Support Genix > Settings > Webhooks > Outgoing.
- Click Add New.
- Fill in:
| Field | Description |
|---|---|
| Title | A name for this webhook (e.g., “CRM Sync”, “Zapier Trigger”) |
| Remote URL | The HTTPS endpoint that will receive the POST requests |
| Events | Select which events trigger this webhook (see below) |
| Status | Active or Inactive |
- Click Save.
You can create multiple webhooks with different URLs and different event selections.
Available Events
| Event | Code | Fires When |
|---|---|---|
| Ticket Created | on_tckt_create | A new ticket is created (from portal, email, chatbot, or webhook) |
| Ticket Replied | on_tckt_replied | An agent or customer adds a reply to a ticket |
| Ticket Closed | on_tckt_closed | A ticket’s status changes to Closed |
| Client Created | on_client_create | A new customer account is created |
Select one or more events per webhook. A single webhook can listen to all 4 events.
Payload Reference
All payloads are sent as HTTP POST with form-encoded body. The event field identifies which event triggered the webhook.
Ticket Created
Sent when a new ticket is created.
{
"event": "ticket.created",
"id": 123,
"ticket_track_id": "TKT-00042",
"category_id": 5,
"category_title": "Billing",
"ticket_user_id": 45,
"ticket_user_email": "[email protected]",
"ticket_user_title": "John Doe",
"title": "Cannot access my account",
"ticket_body": "<p>I am unable to log in since this morning...</p>",
"opened_time": "2026-02-17T10:30:00+00:00",
"status": "Open",
"ticket_link": "https://yoursite.com/wp-admin/admin.php?page=support-genix#/tickets/123",
"assigned_on": "Jane Agent",
"assigned_date": "2026-02-17T10:31:00+00:00",
"related_url": "",
"custom_fields": {
"order_number_8": "ORD-12345",
"product_name_12": "Widget Pro"
}
}
| Field | Type | Description |
|---|---|---|
event | string | Always "ticket.created" |
id | integer | Internal ticket ID |
ticket_track_id | string | Public ticket reference number |
category_id | integer | Category ID |
category_title | string | Category name |
ticket_user_id | integer | Customer’s user ID |
ticket_user_email | string | Customer’s email |
ticket_user_title | string | Customer’s display name |
title | string | Ticket subject |
ticket_body | string | Ticket description (HTML) |
opened_time | string | Creation timestamp (ISO 8601) |
status | string | Ticket status text |
ticket_link | string | Direct admin URL to the ticket |
assigned_on | string | Assigned agent’s name |
assigned_date | string | Assignment timestamp |
related_url | string | Related external URL (if any) |
custom_fields | object | Custom field values (see below) |
Ticket Replied
Sent when a reply is added to a ticket.
{
"event": "ticket.replied",
"id": 123,
"ticket_track_id": "TKT-00042",
"ticket_user_id": 45,
"ticket_user_email": "[email protected]",
"ticket_user_title": "John Doe",
"title": "Cannot access my account",
"status": "Active",
"ticket_link": "https://yoursite.com/wp-admin/admin.php?page=support-genix#/tickets/123",
"ticket_replied_user_id": 12,
"ticket_replied_user": "Jane Agent",
"replied_text": "<p>Hi John, I've reset your password. Please try logging in again.</p>"
}
| Field | Type | Description |
|---|---|---|
event | string | Always "ticket.replied" |
ticket_replied_user_id | integer | User ID of the person who replied |
ticket_replied_user | string | Name of the person who replied |
replied_text | string | Reply content (HTML) |
| (other fields) | Same as Ticket Created |
Ticket Closed
Sent when a ticket is closed.
{
"event": "ticket.closed",
"id": 123,
"ticket_track_id": "TKT-00042",
"category_id": 5,
"category_title": "Billing",
"ticket_user_id": 45,
"ticket_user_email": "[email protected]",
"ticket_user_title": "John Doe",
"title": "Cannot access my account",
"opened_time": "2026-02-17T10:30:00+00:00",
"closed_time": "2026-02-17T14:45:00+00:00",
"status": "Closed",
"ticket_link": "https://yoursite.com/wp-admin/admin.php?page=support-genix#/tickets/123",
"custom_fields": {
"order_number_8": "ORD-12345"
}
}
| Field | Type | Description |
|---|---|---|
event | string | Always "ticket.closed" |
closed_time | string | Closure timestamp (ISO 8601) |
| (other fields) | Same as Ticket Created |
Client Created
Sent when a new customer account is created.
{
"event": "user.created",
"id": 45,
"first_name": "John",
"last_name": "Doe",
"email": "[email protected]",
"custom_fields": {
"company_name_3": "Acme Inc",
"phone_number_7": "+1-555-0100"
}
}
| Field | Type | Description |
|---|---|---|
event | string | Always "user.created" |
id | integer | WordPress user ID |
first_name | string | Customer’s first name |
last_name | string | Customer’s last name |
email | string | Customer’s email address |
custom_fields | object | Custom user field values |
Custom Fields in Payloads
Custom fields are included as a flat object with normalized keys:
- Format:
{field_label}_{field_id}(lowercase, spaces replaced with underscores) - Example: A field labeled “Order Number” with ID 8 becomes
order_number_8
Only fields that have values are included. Empty fields are omitted.
HTTP Delivery Details
| Setting | Value |
|---|---|
| Method | POST |
| Content-Type | application/x-www-form-urlencoded |
| Timeout | 120 seconds |
| Max Redirects | 5 |
| Retry | No automatic retry |
| SSL Verification | Standard WordPress HTTP API behavior |
Integration Examples
Zapier
- Create a Zap with the trigger “Webhooks by Zapier” > “Catch Hook”.
- Zapier gives you a webhook URL (e.g.,
https://hooks.zapier.com/hooks/catch/...). - Paste that URL as the Remote URL in Support Genix.
- Select the events you want.
- Test by creating a ticket — Zapier should receive the payload.
- Map the fields in Zapier to your desired action (create CRM contact, send Slack message, etc.).
Make (Integromat)
- Create a scenario with a “Custom Webhook” trigger module.
- Copy the generated webhook URL.
- Paste it in Support Genix as the Remote URL.
- Select events and save.
- Trigger a test event to establish the data structure in Make.
Custom Application
Receive webhooks in any backend:
# Python / Flask example
from flask import Flask, request
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def handle_webhook():
event = request.form.get('event')
if event == 'ticket.created':
ticket_id = request.form.get('ticket_track_id')
customer = request.form.get('ticket_user_email')
subject = request.form.get('title')
# Process the new ticket...
elif event == 'ticket.closed':
# Process ticket closure...
return 'OK', 200
// Node.js / Express example
app.post('/webhook', (req, res) => {
const { event, ticket_track_id, ticket_user_email, title } = req.body;
if (event === 'ticket.created') {
// Process new ticket
}
res.sendStatus(200);
});
Managing Webhooks
Bulk Actions
Select multiple webhooks and:
- Activate — Enable selected webhooks.
- Deactivate — Disable selected webhooks.
- Delete — Permanently remove selected webhooks.
Testing
- Use a service like webhook.site to get a temporary URL.
- Create a webhook with that URL and select all events.
- Trigger each event (create a ticket, reply, close, create a user).
- Inspect the payloads on webhook.site to verify the data.
Important Notes
- No retry logic. If the remote server is down, the webhook is not retried. Ensure your receiving endpoint has high availability.
- Timeout. Requests that take longer than 120 seconds are aborted. Keep your endpoint response time under 30 seconds.
- HTTPS recommended. Always use HTTPS URLs to protect data in transit.
- Multiple webhooks. You can send the same event to multiple URLs by creating multiple webhooks.
- Performance. Webhook delivery happens synchronously during the event. If the remote endpoint is slow, it may slightly delay the ticket operation. Keep response times fast.