<!--
{
  "availability" : [
    "iOS: 9.0.0 - 26.0.0",
    "iPadOS: 9.0.0 - 26.0.0",
    "macCatalyst: 9.0.0 - 26.0.0",
    "macOS: 10.11.0 - 26.0.0",
    "tvOS: 12.0.0 - 26.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "DeviceManagement",
  "identifier" : "/documentation/DeviceManagement/Schedule-OS-Update-Command",
  "metadataVersion" : "0.1.0",
  "role" : "Web Service Endpoint",
  "symbol" : {
    "kind" : "Web Service Endpoint",
    "modules" : [
      "Device Management"
    ],
    "preciseIdentifier" : "rest:put:mdm#ScheduleOSUpdateCommand"
  },
  "title" : "Schedule OS Update"
}
-->

# Schedule OS Update

Schedule an update of the operating system on a device. Removed: use the declarative management `com.apple.configuration.softwareupdate.enforcement.specific` configuration.

## Discussion

Only supervised iOS, macOS, and tvOS devices are eligible for software update management.

This command can only schedule operating-system updates in iOS and tvOS, however, it can also schedule a variety of system software updates in macOS.

Downloading and installing updates in iOS and tvOS is a two-step process. Send a `ScheduleOSUpdate` command with `Default` for `InstallAction` to download the updates. Then send another `ScheduleOSUpdate` command with a `Default` `InstallAction` to install the updates. Software updates may require a restart, which prevents the device from responding. When this happens, the MDM server resends the `ScheduleOSUpdate` command when the device checks in again, however, the device won’t return a value for `UpdateResults`.

This command uses the [`ScheduleOSUpdateCommand.Command.UpdatesItem`](/documentation/DeviceManagement/ScheduleOSUpdateCommand/Command-data.dictionary/UpdatesItem) `InstallAction` values to offer varying degrees of control to the user of a device. The user can control the update with the `NotifyOnly` and `DownloadOnly` actions, which don’t initiate the update process at all. The `InstallASAP` and `InstallForceRestart` actions attempt to install the update as soon as possible. On iOS devices with a passcode, the user must authorize the update by entering their passcode, allowing them to defer the update a limited number of times. After the user reaches that limit, the system prompts to update every time the device returns to the Home Screen. This makes the device virtually unusable until the user approves the software update. On macOS devices, the `InstallLater` action provides a similar behavior, which specifies how many times the user may defer the update before it’s forced.

A device may return a different `InstallAction` than requested.

Refer to the following sections to determine supported channels and requirements, and to see an example request and response.

### Command availability

|||
|--------------------------|-----------------------------|
|Device channel            |iOS, macOS, Shared iPad, tvOS|
|User channel              |N/A                          |
|Requires supervision      |iOS, macOS, tvOS             |
|Allowed in user enrollment|N/A                          |
|Required access right     |AllowAppInstallation         |

### Example request and response

**Request:**

```plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Command</key>
    <dict>
        <key>RequestType</key>
        <string>ScheduleOSUpdate</string>
        <key>Updates</key>
        <array>
            <dict>
                <key>InstallAction</key>
                <string>DownloadOnly</string>
                <key>ProductKey</key>
                <string>iOSUpdate17A576</string>
                <key>ProductVersion</key>
                <string>13.0</string>
            </dict>
        </array>
    </dict>
    <key>CommandUUID</key>
    <string>0001_ScheduleOSUpdate</string>
</dict>
</plist>
```

**Response:**

```plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CommandUUID</key>
    <string>0001_ScheduleOSUpdate</string>
    <key>Status</key>
    <string>Acknowledged</string>
    <key>UDID</key>
    <string>00008020-000915083C80012E</string>
    <key>UpdateResults</key>
    <array>
        <dict>
            <key>InstallAction</key>
            <string>DownloadOnly</string>
            <key>ProductKey</key>
            <string>iOSUpdate17A576</string>
            <key>Status</key>
            <string>Downloading</string>
        </dict>
    </array>
</dict>
</plist>
```

## Topics

### Commands and responses

[`ScheduleOSUpdateCommand`](/documentation/DeviceManagement/ScheduleOSUpdateCommand)

The command to schedule an update of the operating system on a device. Removed: use the declarative management `com.apple.configuration.softwareupdate.enforcement.specific` configuration.

[`ScheduleOSUpdateResponse`](/documentation/DeviceManagement/ScheduleOSUpdateResponse)

A response from the device after it processes the command to schedule an update of the operating system on a device. Removed: use the declarative management `com.apple.configuration.softwareupdate.enforcement.specific` configuration.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)