Automation - Call Webhook Action

Last updated: April 1, 2026

Overview

The Call Webhook action sends an HTTP POST request with a JSON payload to a user-specified URL whenever an automation trigger fires. It can be paired with any trigger type.

Configuration

The only configuration field is:

Field

Type

Request

Description

Webhook URL

Text (URL)

Yes

The endpoint that will receive the POST request. Must be a valid URL.

Behavior

  • HTTP Method: POST

  • Content-Type: application/json

  • Retry condition: Any response with a status code outside the 2xx range triggers a retry


Payload Structure

Every webhook POST body has the same top-level shape:

{
  "workOrder": { ... } | undefined,
  "record": { ... } | undefined,
  "event": { ... }
}

Top-level Key

Type

Description

workOrder

Object or undefined

Present only when the trigger provides a Work Order context (task-based triggers). Contains a snapshot of the work order.

record

Object or undefined

Present when the trigger is associated with a parent record (Project, Request, or Client). Contains a snapshot of the parent record.

event

Object

Always present. Contains trigger-specific metadata plus eventId and firedAt


workOrder Object

Included only for work-order-related triggers (TASK_CREATEDTASK_COMPLETEDTASK_STATUS_MOVEMENT). For all other triggers, this field is undefined (omitted from the JSON).

Field

Type

Description

id

number

Work order ID

title

string

Work order title

description

string | null

Work order description

startDate

datetime | null

Scheduled start date

endDate

datetime | null

Scheduled end date

createdAt

datetime

When the work order was created

modifiedAt

datetime

When the work order was last modified

priority

number | null

Priority level

recordId

number

ID of the parent record (Project/Request/Client)

completionDate

datetime | null

When the work order was completed

status

string

Current status

assigneeId

number | null

Primary assignee user ID

uid

number

Unique identifier string

isField

boolean

Whether this is a field (on-site) work order

startDateAllDay

boolean

Whether the start date is an all-day event

endDateAllDay

boolean

Whether the end date is an all-day event


record Object

Included when the trigger is associated with a parent record. This represents the Project, Request (Opportunity), or Client that the automation is running against.

Field

Type

Description

id

number

Record ID

createdAt

datetime

When the record was created

updatedAt

datetime

When the record was last updated

title

string

Record title / name

address

string | null

Street address

geoLocation

object | null

Geographic coordinates

jurisdiction

{ id, name } | undefined

Jurisdiction (AHJ), if set

stage

{ id, name } | undefined

Current workflow stage, if set

type

"PROJECT" | "DEAL" |

 "ACCOUNT" | "VENDOR"

Record type (see mapping below)

dealValue

number | null

Monetary value of the deal

ownerId

number | null

Owner user ID

city

string | null

City

state

string | null

State / province

trades

string[] | null

Trade types

status

string | null

Project status (for Projects)

requestStatus

string | null

Request status

(for Requests/Opportunities)

primaryEmail

string | null

Primary contact email

primaryPhone

string | null

Primary contact phone

uid

number

Unique identifier string

Record type mapping (backend to UI):

record.type value

UI Label

PROJECT

Project

DEAL

Opportunity

ACCOUNT

Account

VENDOR

Vendor


event Object

Always present. Contains metadata about what triggered the automation. Every event object includes these base fields:

Field

Type

Description

recordId

number

ID of the parent record that the trigger fired on

triggerKey

string

Machine-readable trigger identifier(e.g., "TASK_CREATED")

triggerName

string

Human-readable trigger name (e.g., "Work Order created")

eventId

number

Internal workflow step log ID (unique per action execution)

firedAt

datetime

UTC timestamp of when the webhook was fired

Additional fields in event vary by trigger — see the next section.


Trigger-Specific event Fields

Work Order Triggers

These triggers include workOrderId in event and populate the top-level workOrder object.

Work Order Created (TASK_CREATED)

Extra event field

Type

Description

workOrderId

number

ID of the created work order

currentStatus

number

Status ID assigned at creation

previousStatus

number | null

Previous status (typically null for new work

orders)

Work Order Marked Complete (TASK_COMPLETED)

Extra event field

Type

Description

workOrderId

number

ID of the completed work order

No additional status fields beyond the base.

Work Order Status Updated (TASK_STATUS_MOVEMENT)

Extra event field

Type

Description

workOrderId

number

ID of the work order

currentStatus

number

New status ID

previousStatus

number

Previous status ID


Record Created Triggers

These triggers do not include workOrder. The record.type indicates whether it is a Project or Request.

Project Created (PROJECT_CREATED)

No extra event fields beyond the base. record.type will be "PROJECT".

Opportunity Created (REQUEST_CREATED)

No extra event fields beyond the base. record.type will be "DEAL".

Note: Account creation does not fire either of these triggers.


Status Movement Triggers

Project Status Updated (PROJECT_STATUS_MOVEMENT)

No extra event fields beyond the base. The new status is available on record.status.

Request Status Updated (DEAL_STATUS_MOVEMENT)

No extra event fields beyond the base. The new status is available on record.requestStatus.


Property Updated Triggers

Project Property Updated (PROJECT_PROPERTY_UPDATED)

No extra event fields beyond the base. record.type will be "PROJECT".

Opportunity Property Updated (DEAL_PROPERTY_UPDATED)

No extra event fields beyond the base. record.type will be "DEAL".


SLA Violation Triggers

Project Phase SLA Violated (PROJECT_PHASE_SLA_VIOLATION) / Request Phase SLA Violated (DEAL_PHASE_SLA_VIOLATION)

Extra event field

Type

Description

overdueAt

datetime

When the SLA was violated

slaType

string

Type of SLA that was violated

phaseTemplateId

number

ID of the phase template that violated the SLA


Appointment Triggers

Appointment Created (APPOINTMENT_CREATED)

Extra event field

Type

Description

appointmentId

number

ID of the created appointment

dueDate

datetime

Due date of the appointment

Appointment Rescheduled (APPOINTMENT_RESCHEDULED)

Extra event field

Type

Description

appointmentId

number

ID of the rescheduled appointment

dueDate

datetime

New due date

previousDueDate

datetime

Previous due date


Phase Triggers

Project/Opportunity Phase Started (PROJECT_PHASE_STARTED / REQUEST_PHASE_STARTED)

Project/Opportunity Phase Completed (PROJECT_PHASE_COMPLETED / REQUEST_PHASE_COMPLETED)

Extra event field

Type

Description

phaseInstanceId

number

ID of the specific phase instance

phaseTemplateId

number

ID of the phase template

phaseType

string

Type of the phase

status

string

Phase status ("in_progress" or "completed")


Call Trigger

Call Created or Updated (CALL_UPSERTED)

No extra event fields beyond the base. The parent record information is in record.


Example Payloads

Example 1: Work Order Status Updated on a Project

Trigger: Work Order status updated, parent record is a Project.

{
  "workOrder": {
    "id": 4521,
    "title": "Install Solar Panels - Phase 2",
    "description": "Complete rooftop panel installation for east wing",
    "startDate": "2026-03-25T08:00:00.000Z",
    "endDate": "2026-03-27T17:00:00.000Z",
    "createdAt": "2026-03-20T14:30:00.000Z",
    "modifiedAt": "2026-03-27T10:15:00.000Z",
    "priority": 2,
    "recordId": 1892,
    "completionDate": null,
    "status": 3,
    "assigneeId": 42,
    "uid": 489343,
    "isField": true,
    "startDateAllDay": false,
    "endDateAllDay": false
  },
  "record": {
    "id": 1892,
    "createdAt": "2026-02-10T09:00:00.000Z",
    "updatedAt": "2026-03-27T10:15:00.000Z",
    "title": "Smith Residence - 10kW Solar Install",
    "address": "123 Maple Street",
    "geoLocation": { "lat": 33.749, "lng": -84.388 },
    "jurisdiction": { "id": 5, "name": "Fulton County" },
    "stage": { "id": 12, "name": "Installation" },
    "type": "PROJECT",
    "dealValue": 28500,
    "ownerId": 7,
    "city": "Atlanta",
    "state": "GA",
    "trades": ["Solar"],
    "status": "active",
    "requestStatus": null,
    "primaryEmail": "jsmith@example.com",
    "primaryPhone": "+14045551234",
    "uid": 1234934
  },
  "event": {
    "workOrderId": 4521,
    "recordId": 1892,
    "triggerKey": "TASK_STATUS_MOVEMENT",
    "triggerName": "Work Order status updated",
    "currentStatus": 3,
    "previousStatus": 2,
    "eventId": 98765,
    "firedAt": "2026-03-27T10:15:32.000Z"
  }
}

Example 2: Request (Opportunity) Created

Trigger: Opportunity created, no work order context.

{
  "record": {
    "id": 2034,
    "createdAt": "2026-03-27T11:00:00.000Z",
    "updatedAt": "2026-03-27T11:00:00.000Z",
    "title": "Johnson Residence - Solar Consultation",
    "address": "456 Oak Avenue",
    "geoLocation": { "lat": 34.052, "lng": -118.244 },
    "jurisdiction": null,
    "stage": { "id": 1, "name": "New Lead" },
    "type": "DEAL",
    "dealValue": 15000,
    "ownerId": 3,
    "city": "Los Angeles",
    "state": "CA",
    "trades": ["Solar"],
    "status": null,
    "requestStatus": "open",
    "primaryEmail": "bjohnson@example.com",
    "primaryPhone": "+13105559876",
    "uid": 1349323
  },
  "event": {
    "recordId": 2034,
    "triggerKey": "REQUEST_CREATED",
    "triggerName": "Opportunity created",
    "eventId": 98770,
    "firedAt": "2026-03-27T11:00:05.000Z"
  }
}

Example 3: Phase SLA Violated on a Project

Trigger: Project Phase SLA violated.

{
  "record": {
    "id": 1750,
    "createdAt": "2026-01-15T10:00:00.000Z",
    "updatedAt": "2026-03-26T08:00:00.000Z",
    "title": "Garcia Commercial - 50kW System",
    "address": "789 Industrial Blvd",
    "geoLocation": { "lat": 29.760, "lng": -95.370 },
    "jurisdiction": { "id": 8, "name": "Harris County" },
    "stage": { "id": 15, "name": "Permitting" },
    "type": "PROJECT",
    "dealValue": 95000,
    "ownerId": 11,
    "city": "Houston",
    "state": "TX",
    "trades": ["Solar", "Electrical"],
    "status": "active",
    "requestStatus": null,
    "primaryEmail": "garcia@example.com",
    "primaryPhone": "+17135557890",
    "uid": 1234l5
  },
  "event": {
    "recordId": 1750,
    "triggerKey": "PROJECT_PHASE_SLA_VIOLATION",
    "triggerName": "Project Phase SLA violated",
    "overdueAt": "2026-03-26T08:00:00.000Z",
    "slaType": "completion",
    "phaseTemplateId": 22,
    "eventId": 98780,
    "firedAt": "2026-03-27T00:05:00.000Z"
  }
}

Summary: What's Included by Trigger

Trigger

workOrder present?

Extra event fields

Work Order Created

Yes

workOrderIdcurrentStatus

previousStatus

Work Order Marked Complete

Yes

workOrderId

Work Order Status Updated

Yes

workOrderIdcurrentStatus

previousStatus

Project Created

Yes

(base only)

Opportunity Created

No

(base only)

Project Status Updated

No

(base only)

Opportunity Status Updated

No

(base only)

Project Property Updated

No

(base only)

Opportunity Property Updated

No

(base only)

Project Phase SLA Violated

No

overdueAtslaTypephaseTemplateId

Opportunity Phase SLA Violated

No

overdueAtslaTypephaseTemplateId

Appointment Created

No

appointmentIddueDate

Appointment Rescheduled

No

appointmentIddueDatepreviousDueDate

Project Phase Started

No

phaseInstanceId, phaseTemplateId, phaseTypestatus

Project Phase Completed

No

phaseInstanceId, phaseTemplateId, phaseTypestatus

Opportunity Phase Started

No

phaseInstanceId, phaseTemplateId, phaseTypestatus

Opportunity Phase Completed

No

phaseInstanceId, phaseTemplateId, phaseTypestatus

Call Created or Updated

No

(base only)