Maintenance API asset status update stuck in 'In Progress' after PATCH request

Using the maintenance management API to update asset status after completing work orders. The PATCH request returns 200 success, but assets remain stuck in ‘In Progress’ status instead of moving to ‘Completed’. This is breaking our workflow completion tracking for automated maintenance processes.

We’re sending status field in the PATCH body as documented, but the transition never happens. Manually updating the same asset in the UI works fine and the status changes immediately.


PATCH /maintenance/assets/A-00123
{"status": "Completed", "completion_date": "2024-11-18"}
Response: 200 OK

Checking the asset afterwards shows status still ‘In Progress’. Are there mandatory PATCH fields required for asset status transitions beyond what’s in the documentation?

I’ve dealt with this extensively. The issue is that Workday’s maintenance workflow requires specific field validation before allowing status transitions. For ‘In Progress’ to ‘Completed’, you must include work order reference, actual labor hours, and close code in the PATCH request, even though they’re not marked as mandatory in the API docs.

The maintenance workflow automation depends on these fields to calculate metrics and close associated records. Without them, the workflow engine blocks the transition.

I added polling and confirmed the status isn’t changing. What specific fields are required for the Completed transition? The documentation only mentions status and completion_date as mandatory.

The 200 response doesn’t mean the status changed - it just means the API accepted your request. Workday’s maintenance API validates field updates asynchronously. If validation fails (missing required data, workflow rules not met), the update is silently rejected but you still get 200 OK.

You need to poll the asset status after the PATCH to verify the change actually took effect. Add a GET request 5-10 seconds after the PATCH to confirm the new status.

Here’s the complete solution for asset status transitions via the maintenance API:

Asset Status Transition Requirements: Workday’s maintenance module uses a state machine for asset status. Each transition has specific prerequisites that must be met before the status can change. The ‘In Progress’ to ‘Completed’ transition requires:

  1. Associated work order must be in ‘Closed’ status
  2. All required work order fields must be populated (labor hours, parts, completion notes)
  3. Asset must have no pending maintenance tasks
  4. Completion date must be within valid range (not future, not before start date)

The API documentation doesn’t clearly explain these dependencies because they’re enforced at the workflow level, not the API level. This is why you get 200 OK but no status change - the API accepts your request, but the workflow engine rejects it.

Mandatory PATCH Fields for Status Completion: Your current PATCH payload is missing critical fields:


PATCH /maintenance/assets/A-00123
{
  "status": "Completed",
  "completion_date": "2024-11-18",
  "work_order_ref": "WO-2024-5678",
  "actual_labor_hours": 3.5,
  "completion_notes": "Replaced pump assembly",
  "close_code": "REPAIRED"
}

The work_order_ref links the asset update to the corresponding work order. Without this, Workday can’t validate that the work order is properly closed. The actual_labor_hours and close_code are required for maintenance metrics and reporting - the workflow won’t allow completion without them.

Maintenance Workflow Automation Solution: For automated maintenance processes, implement a two-step update sequence:

Step 1 - Close the work order:


PATCH /maintenance/work-orders/WO-2024-5678
{
  "status": "Closed",
  "actual_hours": 3.5,
  "parts_used": [{"part_id": "P-123", "quantity": 1}],
  "completion_notes": "Replaced pump assembly",
  "close_code": "REPAIRED",
  "closed_date": "2024-11-18"
}

Step 2 - Update asset status (include work order reference):


PATCH /maintenance/assets/A-00123
{
  "status": "Completed",
  "completion_date": "2024-11-18",
  "work_order_ref": "WO-2024-5678",
  "actual_labor_hours": 3.5,
  "completion_notes": "Replaced pump assembly",
  "close_code": "REPAIRED"
}

Critical: You must wait 2-3 seconds between Step 1 and Step 2 to allow the work order status to propagate through Workday’s workflow engine. If you update the asset too quickly, the work order validation will fail.

For workflow completion tracking, implement verification polling:


GET /maintenance/assets/A-00123?fields=status,work_order_status

Poll every 5 seconds for up to 30 seconds after the PATCH. If status hasn’t changed to ‘Completed’ after 30 seconds, there’s likely a validation error. Check the work order status - if it’s not ‘Closed’, that’s your blocker.

Common validation failures:

  • Work order still ‘In Progress’ (close it first)
  • Missing required parts list (even if no parts used, pass empty array)
  • Invalid close code (must match configured values in tenant)
  • Completion date before work order start date
  • User lacks ‘Complete Maintenance Work Orders’ permission

The UI works because it enforces these requirements through the form validation before submission. The API allows you to send incomplete data, but the backend workflow rejects it silently. Always include all required fields in your PATCH request to ensure successful status transitions.