Article Webhook Not Firing on Job Completion

yeah this one tripped me up too when I first looked at it. if you're subscribed to the work_order.status_changed event and expecting a webhook when a job hits "Completed" — but you're only seeing it sometimes — this is probably why.

Summary

Webhooks fail to fire when job completion occurs via bulk action or API call, while manual completion in the UI works fine.

Symptoms

  • Webhook fires when a technician marks a job complete in the mobile app or web UI
  • No webhook received when completing jobs via Bulk Actions on the dispatch board
  • No webhook received when updating status via PATCH /api/v2/work_orders/{id} or PUT
  • Webhook fires inconsistently for jobs completed through automated workflows

Affected Versions

FieldPulse 3.1.x - 3.2.0. API v2.0 and v2.1 affected.

Root Cause

The webhook event system currently hooks into the UI-level status transition handler. Bulk actions and direct API updates use a different code path that bypasses the event emitter — yeah, I know, it's not great. The team's tracking this as ENG-4421 internally.

There's actually a related edge case here: if you're using Zapier, this same bug means the "Job Completed" trigger won't fire for API-completed jobs either. The Zapier integration uses webhooks under the hood, so it inherits the same limitation.

Workaround

Until the fix ships, you've got a couple options:

// Option 1: Poll for status changes
// Query every 60 seconds for work orders with status=completed
// and updated_at > your last check timestamp

GET /api/v2/work_orders?status=completed&updated_after=2026-02-27T12:00:00Z

Option 2: If you're completing jobs via your own integration, fire a custom webhook from your side after the PATCH returns success. Not ideal, but it keeps your downstream systems in sync.

Status

Fix targeted for 3.2.1 — currently in QA. The change moves status change events to a database-level trigger so all code paths emit consistently.

I'll update this thread when the release candidate is available. If you're blocked on this and need the RC build, ping me directly.