Webhook payload structure for work_order.status_changed

Need the exact payload structure for work_order.status_changed. Docs show an example but no schema. Specifically:

  • Is previous_status always present?
  • What's the timestamp format — ISO 8601 with millis or no?
  • Are custom fields included or do I need a follow-up API call?

Current handler is breaking on null assignee_id when status goes from assignedunassigned. Need to know what else can be null.

// What I'm receiving (sanitized):
{
  "event": "work_order.status_changed",
  "timestamp": "2025-09-28T14:32:17.842Z",
  "data": {
    "work_order_id": "wo_...",
    "status": "in_progress",
    "previous_status": "assigned",
    "assignee_id": "usr_...",
    "changed_at": "2025-09-28T14:32:15.000Z"
  }
}

Show me the full schema or point me to OpenAPI/Swagger.

Parents
  • Heads up: if you're using the work_order.status_changed event to trigger side effects (notifications, external syncs), watch out for rapid-fire status changes. We've seen cases where a bulk edit or script triggers assignedin_progresson_holdin_progress within seconds. Your webhook handler needs to be idempotent or you'll get race conditions.

    We ended up debouncing with a 5-second window keyed on work_order_id + changed_at. YMMV depending on your downstream systems.

Reply
  • Heads up: if you're using the work_order.status_changed event to trigger side effects (notifications, external syncs), watch out for rapid-fire status changes. We've seen cases where a bulk edit or script triggers assignedin_progresson_holdin_progress within seconds. Your webhook handler needs to be idempotent or you'll get race conditions.

    We ended up debouncing with a 5-second window keyed on work_order_id + changed_at. YMMV depending on your downstream systems.

Children
No Data