Webhook payload structure for job status changes

Hey team — I'm building out a notification pipeline that needs to fire when work orders hit specific status transitions (Created → Assigned → In Progress → Completed, etc.).

I've got webhooks configured and hitting my endpoint, but the payload structure I'm receiving doesn't seem to match what's in the webhook setup guide. Specifically:

  • Is job_id always present, or only for certain event types?
  • Does the payload include the full work order object, or just the delta/changed fields?
  • Are status transition events (work_order.status_changed) supposed to include the previous status value somewhere? I'm seeing status but not previous_status or similar.

Also heads up — I'm seeing inconsistent behavior between the sandbox and prod environments. Sandbox payloads include a technician_ids array, but prod is sending assigned_to as a single string. YMMV warning here.

My use case: need to sync status changes to an external CMDB and trigger Slack notifications when jobs hit "Completed." The work_order.completed event seems to fire before photos finish uploading sometimes, which is... not ideal for our downstream workflow.

Anyone got a canonical payload example for work_order.status_changed? Or should I be subscribing to individual status events instead of the generic change event?

Parents
    • job_id → never present. Use work_order_id.
    • Full object vs delta → delta only. Subscribe to work_order.updated if you need full object.
    • Previous status → not in contract. Do not rely on it.

    Environment inconsistency: prod is on v2.1, most sandboxes still on v2.0. technician_ids vs assigned_to is the version delta.

    Docs are wrong here: Setting Up Webhooks shows v2.0 structure. Engineering ticket #4421 to update.

  • Ah, that explains the sandbox/prod mismatch — thanks. Is there a migration path for sandboxes or should I just build defensively against both formats?

    Also any ETA on that docs update? Trying to get this pipeline to production this week and having to reverse engineer the schema is... not my favorite Monday activity.

  • Can you share your current webhook subscription config and a sample payload you're receiving? The field mapping varies by subscription scope — if you're subscribed at account level vs filtered by technician or job type, the payload shape changes.

    Also need to know: are you verifying webhook signatures or just accepting raw POST? If you're not verifying, start there — I've seen proxies modify payloads in transit.

Reply
  • Can you share your current webhook subscription config and a sample payload you're receiving? The field mapping varies by subscription scope — if you're subscribed at account level vs filtered by technician or job type, the payload shape changes.

    Also need to know: are you verifying webhook signatures or just accepting raw POST? If you're not verifying, start there — I've seen proxies modify payloads in transit.

Children
No Data