Как бороться с тем, что клиент не узнает о смене состояния сервера из-за таймаута?
Ещё как вариант рассмотрите возможность асинхронного выполнения операций на сервере. Нужно организовать два-три метода в API. Первый метод запускает процесс изменения состояния (с валидацией текущего состояния и возможности его изменения) и не требует обязательного возврата результата. Второй метод (не обязательный) возвращает прогресс изменения состояния сервера. Третий - возвращает результат - текущее состояние сервера. В этом случае даже если на один из запросов не придёт ответа, клиент может запрос повторить.
Если нет ответа от сервер то считать операцию не выполненной и пробовать все сначала.