Skip to main content

Webhook Action Data Format Guide

Updated over 2 months ago

Who This Is For / When to Use

Use this guide if you are:

  • Sending data from Kyrios to an external system using a Webhook action

  • Building integrations that depend on workflow triggers

  • Debugging missing fields in webhook payloads


How Webhook Data Is Generated

Webhook payloads are generated based on the workflow trigger that activates the webhook.

  • Contact data and account data are always included.

  • Other objects (appointments, opportunities, tasks, etc.) are included only if the workflow trigger references them.

Important Rule

If an object is not part of the trigger, its data will not be included in the webhook payload.


Object Availability by Trigger Type

Contact and Account Data (Always Included)

These objects are included in all webhook actions:

  • Contact

  • Account (location)

No special trigger configuration is required.


Appointment Data (Trigger-Dependent)

Appointment fields are included only when the workflow uses an appointment-based trigger, such as:

  • Appointment Booked

  • Appointment Updated

  • Appointment Canceled

If the workflow is not triggered by an appointment event, appointment date and time fields will not be present.


Opportunity Data (Trigger-Dependent)

Opportunity fields are included only when the workflow uses an opportunity-based trigger, such as:

  • Pipeline Stage Changed

  • Opportunity Created

  • Opportunity Status Updated

If no opportunity trigger is used, pipeline and opportunity owner data will not be included.


Other Objects (Trigger-Dependent)

The following objects are included only when explicitly referenced by the workflow trigger:

  • Campaign

  • User

  • Calendar (Appointment)

  • Order

  • Invoice

  • Task

  • Note

  • Message

  • Workflow


Webhook Payload Structure

The webhook payload is a JSON object with flat fields at the root level and nested objects where applicable.


Contact Fields (Standard)

{
"first_name": "",
"last_name": "",
"full_name": "",
"email": "",
"phone": "",
"tags": [],
"address1": "",
"city": "",
"state": "",
"country": "",
"timezone": "",
"postal_code": "",
"company_name": "",
"website": "",
"date_of_birth": "",
"contact_source": "",
"contact_type": "",
"gclid": "",
"date_created": "",
"full_address": ""
}

Contact Custom Fields

  • All contact custom fields are included dynamically.

  • Field keys match the internal custom field identifiers.


Account Object (Always Included)

{
"location": {
"id": "",
"name": "",
"address": "",
"city": "",
"state": "",
"country": "",
"postalCode": "",
"fullAddress": ""
}
}

Opportunity Fields (If Applicable)

Included only when an opportunity trigger is used.

{
"id": "",
"opportunity_name": "",
"status": "",
"lead_value": "",
"opportunity_source": "",
"source": "",
"pipeline_id": "",
"pipeline_name": "",
"pipeline_stage": ""
}

Campaign Object (If Applicable)

{
"campaign": {
"id": "",
"name": ""
}
}

User Object (If Applicable)

{
"user": {
"firstName": "",
"lastName": "",
"email": "",
"phone": "",
"extension": "",
"address1": "",
"city": "",
"state": "",
"country": "",
"postalCode": ""
}
}

Appointment (Calendar) Object (If Applicable)

{
"calendar": {
"id": "",
"calendarName": "",
"title": "",
"selectedTimezone": "",
"appointmentId": "",
"startTime": "YYYY-MM-DDTHH:mm:ss",
"endTime": "YYYY-MM-DDTHH:mm:ss",
"status": "",
"appointmentStatus": "",
"address": "",
"notes": "",
"date_created": "",
"created_by": "",
"created_by_user_id": "",
"created_by_meta": {
"source": "",
"channel": ""
}
"last_updated_by_meta": {
"source": "",
"channel": "" }
}
}

Timezone Handling

  • startTime and endTime are returned in the selectedTimezone

  • If no timezone is set, values default to UTC


Order Object (If Applicable)

{
"order": {
"...": "Dynamic fields"
}
}
  • Order fields vary based on the form configuration.

  • Use the Webhook Test feature to view a live payload example.


Invoice Object (If Applicable)

{
"invoice": {
"...": "Dynamic fields"
}
}
  • Invoice fields vary by invoice type and status.

  • Use the Webhook Test feature for sample data.


Task Object (If Applicable)

{
"task": {
"title": "",
"body": "",
"dueDate": "YYYY-MM-DDTHH:mm:ss"
}
}
  • dueDate is always converted to UTC


Note Object (If Applicable)

{
"note": {
"body": ""
}
}

Message Object (If Applicable)

{
"message": {
"type": "",
"body": "",
"direction": "",
"status": ""
}
}

Workflow Object (If Applicable)

{
"workflow": {
"id": "",
"name": ""
}
}

Common Issues and Fixes

Missing Appointment or Opportunity Data

Cause: The workflow trigger does not reference that object.
Fix: Use a trigger such as Appointment Booked or Pipeline Stage Changed.


Unexpected or Missing Fields

Cause: Object data is dynamic and depends on trigger context.
Fix: Run the Webhook Test to inspect the exact payload.


FAQ

What data is always included in a webhook?

Contact data and account data are always included in every webhook action.


Why is my appointment data missing?

Appointment data is only included if the workflow uses an appointment-based trigger.


Why don’t I see opportunity owner or pipeline fields?

Opportunity data is only included when the workflow uses an opportunity-related trigger.


How can I see the exact payload structure?

Use the Test Webhook option inside the workflow action to view live sample data.

Did this answer your question?