Work orders
GET /work-orders?status=open&machine_id={id}
POST /work-orders
GET /work-orders/{id}
PATCH /work-orders/{id}/statusstatus: open | planned | in_progress | waiting_parts | completed | cancelled.
priority: low | normal | high | critical.
POST — required machine_id, title. Optional ticket_id (same machine, otherwise 422), description, priority (default normal), assigned_user_id (numeric user id, not a uuid), supplier_id (numeric id, not a uuid), planned_start, planned_end (planned_end ≥ planned_start), estimated_minutes, estimated_cost. An unknown user or supplier in this club → 404. Response 201. number is generated.
PATCH .../status — status is required. Optional when completing: actual_minutes, actual_cost, resolution. in_progress sets started_at when it is still empty. completed sets completed_at.
curl -X PATCH https://app.gymmaintain.com/api/v1/work-orders/<uuid>/status \
-H "Authorization: Bearer gm_..." -H "Content-Type: application/json" \
-d '{"status":"completed","actual_minutes":45,"resolution":"Belt replaced"}'