---
schema_version: "1"
id: c512a53ad5167129374fd89e0298f3ea50747feca5bc7894d79388fbcef2e701
title: Schedule a Push Upgrade Using SOAP API for First- and Second-Generation Managed Packages
collection: developer
version: current
locale: en-us
portal_url: https://docs.salesforce.com/developer/current/en-us/platform-pkg-exchange/managed_packaging/guides/second-generation/push-upgrade-use-api.md
canonical_url: https://developer.salesforce.com/docs/platform/pkg2-dev/guide/push-upgrade-use-api.html
source_site: developer.salesforce.com
content_type: documentation
content_hash: cbfddd416e7c5dd0c8803c4e01bcf02a9ee882a8b21ea7f2b589db6f34be2ad3
products:
  - Second-Generation Managed Packaging Developer Guide
  - merged-docs
---

# Schedule a Push Upgrade Using SOAP API for First- and Second-Generation Managed Packages

After you’ve created an updated version of your package, you can automatically deploy it to customers using a push upgrade.

## Before You Begin

**note:** Partners can also grant select customers the ability to block push upgrades by setting up customized push upgrades. See [Enable a Package Subscriber to Restrict Push Upgrades](https://developer.salesforce.com/docs/platform/pkg2-dev/guide/push-upgrade-customized.md) for more information.

For code samples and more detailed steps, see SOAP API object documentation linked in each step.

1.  Authenticate to your [Dev Hub org](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_calls_login.htm).

2.  Query [MetadataPackage](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_metadatapackage.htm) to verify package details.

3.  Query [MetadataPackageVersion](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_metadatapackageversion.htm) to verify the package version to use for the push upgrade.

4.  Query [PackageSubscriber](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_packagesubscriber.htm) to retrieve details about subscriber orgs such as the org ID and installed package version. To retrieve information about more than 2,000 subscribers, use SOAP API [`queryMore()`](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_calls_querymore.htm) call.

5.  Create a [PackagePushRequest](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_packagepushrequest.htm) object. Specify the `PackageVersionId` and `ScheduledStartTime` (optional). If you omit the `ScheduledStartTime`, the push begins when you set the PackagePushRequest's status to `Pending`.

6.  Create a [PackagePushJob](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_packagepushjob.htm) for each subscriber and associate it with the `PackagePushRequest` you created in the previous step.

7.  Schedule the push upgrade by changing the status of the `PackagePushRequest` to `Pending`.

## Next Steps

**note:** Scheduled push upgrades begin as soon as resources are available on the Salesforce instance, which is either at or after the start time you specify. In certain scenarios, the push upgrade could start a few hours after the scheduled start time.
