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}orPUT - 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.