Update Work Order
Update an existing work order. This endpoint now handles both general field updates AND status changes.
**Required Permission:** `update_work_orders`
All fields are optional. Only send the fields you want to update.
## Status Changes
You can now update the work order status through this endpoint by providing the `status` field along with any other fields you want to update.
### Status-Related Fields
- `status` - Enum: draft, pending_approval, approved, scheduled, dispatched, en_route, arrived, in_progress, on_hold, completed, cancelled, rescheduled, requires_parts, requires_approval, quality_check, invoiced, closed
- `notes` - string, max:1000 (activity log notes for status change)
- `reason` - string, max:500 (reason for status change)
- `occurred_at` - date (for backdating if authorized)
### Conditional Required Fields (when changing status)
- `cancellation_reason` - Required when status = cancelled
- `hold_reason` - Required when status = on_hold
- `new_scheduled_start` - Required when status = rescheduled (datetime)
### Additional Optional Fields for Status Changes
- `completion_summary` - string (when completing)
- `customer_signature_received` - boolean (when completing)
- `quality_check_passed` - boolean (when completing)
- `expected_resume_date` - date (when on_hold)
- `new_scheduled_end` - datetime (when rescheduling)
- `reschedule_reason` - string, max:500 (when rescheduling)
## Status Transitions
Not all status transitions are allowed. The system validates transitions based on the current status.
## General Updatable Fields
- `customer_id` - UUID
- `location_id` - UUID
- `service_id` - UUID (links work order to a service from the service catalog)
- `category` - Enum: scheduled, emergency, warranty, contract, inspection, installation, repair, delivery, consultation, follow_up, recall, upgrade
- `priority` - Enum: low, normal, high, urgent, emergency, critical
- `source` - Enum: customer_request, scheduled_maintenance, emergency_call, contract, inspection, internal, warranty_claim, follow_up, system_generated, mobile_app, web_portal, call_center
- `scheduled_start` - datetime (Y-m-d H:i:s)
- `scheduled_end` - datetime (Y-m-d H:i:s)
- `requested_completion_by` - datetime
- `completion_percentage` - integer, min:0, max:100
- `work_started_at` - datetime
- `work_completed_at` - datetime
- `special_instructions` - string
- `completion_summary` - string
- `primary_contact_id` - UUID
- `customer_presence_required` - boolean
- `customer_notification_sent` - boolean
- `customer_notified_at` - datetime
- `preferred_communication_methods` - array
- `estimated_labor_cost` - numeric
- `estimated_parts_cost` - numeric
- `actual_labor_cost` - numeric, min:0
- `actual_parts_cost` - numeric, min:0
- `customer_signature_required` - boolean
- `customer_signature_received` - boolean
- `customer_signed_at` - datetime
- `quality_check_required` - boolean
- `quality_check_passed` - boolean
- `quality_checked_by` - UUID
- `quality_checked_at` - datetime
- `customer_satisfaction_score` - integer, min:1, max:5
- `customer_feedback` - string
- `requires_follow_up` - boolean
- `follow_up_date` - date
- `follow_up_completed` - boolean
- `warranty_applicable` - boolean
- `warranty_days` - integer
- `warranty_expires_at` - date
- `assigned_supervisor_id` - UUID
- `external_work_order_id` - string
- `customer_po_number` - string
- `contract_number` - string
- `external_references` - array
- `response_time_minutes` - integer
- `resolution_time_minutes` - integer
- `completed_on_time` - boolean
- `completed_within_estimate` - boolean
- `callback_count` - integer
- `requires_manager_approval` - boolean
- `approved_by` - UUID
- `approved_at` - datetime
- `approval_notes` - string
- `risk_level` - Enum: low, medium, high, critical
- `safety_incident_occurred` - boolean
- `safety_requirements` - array
- `permit_required` - boolean
- `permit_number` - string
## Auto-Calculated Fields (do not send these)
- `estimated_total` - Automatically calculated from estimated_labor_cost + estimated_parts_cost
- `actual_total` - Automatically calculated from actual_labor_cost + actual_parts_cost
- `actual_duration_minutes` - Automatically calculated from work_started_at and work_completed_at
Headers
{{tenant_key_name}}
Request
This endpoint expects a multipart form.
tag_type_ids[]
Optional: Tag type UUIDs to sync during update
Response
Successful response

