Release Management API — V1 to V2 Migration Guide

A complete reference for migrating your integrations from API V1 to V2.

⚠️ V1 is deprecated. V1 will continue to be supported until at least the end of 2026, but we strongly recommend migrating to V2 as soon as possible.

1. Overview of Changes

V2 reorganises the API into four dedicated API docs, each with its own base URL. The main structural changes are:

2. New API Structure

RM App API V2.1
Base URL: {baseURL}/release-management/v2/apps/v1
Apps, Public Assets, Installable Artifacts, Presets, Apple App Store (app-level), Outgoing Webhooks
RM Store Releases API V2.1
Base URL: {baseURL}/release-management/v2/store-releases/v1
App Versions (formerly Releases), Approvals, Release Candidates, Beta Distribution, Apple App Store release management, Google Play Store release management
RM Build Distributions API V2.1
Base URL: {baseURL}/release-management/v2/build-distributions/v1
Build Distributions, Tester Groups, Testers
RM CodePush API V2.1
Base URL: {baseURL}/release-management/v2/code-push/v1
Deployments, Updates, Metrics

V1 base URL was: {baseURL}/release-management/v1

3. Apps (formerly Connected Apps) — App API

The /connected-apps path prefix is removed. Apps are now the root resource of the App API.

V1V2
POST/connected-appsPOST/
GET/connected-appsGET/
GET/connected-apps/{id}GET/{id}
PATCH/connected-apps/{id}PATCH/{id}
DELETE/connected-apps/{id}DELETE/{id}

4. Public Assets — App API

No longer nested under a connected app path. The path parameter is renamed from public_asset_id to id. The app is identified via the app_id query parameter.

V1V2
GET/connected-apps/{connected_app_id}/public-assets/{public_asset_id}/status GET/public-assets/{id}/status?app_id=...
GET/connected-apps/{connected_app_id}/public-assets/{public_asset_id}/upload-url GET/public-assets/{id}/upload-url?app_id=...

5. Installable Artifacts — App API

No longer nested under a connected app. The path parameter is renamed from installable_artifact_id to id. What-to-test endpoints are part of the same resource group. The app is identified via the app_id query parameter.

V1V2
GET/connected-apps/{connected_app_id}/installable-artifacts GET/installable-artifacts?app_id=...
DELETE/connected-apps/{connected_app_id}/installable-artifacts/{installable_artifact_id} DELETE/installable-artifacts/{id}
GET/connected-apps/{connected_app_id}/installable-artifacts/{installable_artifact_id}/status GET/installable-artifacts/{id}/status
GET/connected-apps/{connected_app_id}/installable-artifacts/{installable_artifact_id}/upload-url GET/installable-artifacts/{id}/upload-url
PATCH/connected-apps/{connected_app_id}/installable-artifacts/{installable_artifact_id}/public-install-page PATCH/installable-artifacts/{id}/public-install-page
GET/connected-apps/{connected_app_id}/installable-artifacts/{installable_artifact_id}/what-to-test (tag: Installable Artifacts - What To Test) GET/installable-artifacts/{id}/what-to-test
PATCH/connected-apps/{connected_app_id}/installable-artifacts/{installable_artifact_id}/what-to-test (tag: Installable Artifacts - What To Test) PATCH/installable-artifacts/{id}/what-to-test

6. Presets — App API

No longer nested under a connected app. The app is identified via the app_id query parameter or body field.

V1V2
GET/connected-apps/{connected_app_id}/presets GET/presets?app_id=...
GET/connected-apps/{connected_app_id}/presets/{id} GET/presets/{id}
POST/connected-apps/{connected_app_id}/presets/ POST/presets
PUT/connected-apps/{connected_app_id}/presets/{id} PUT/presets/{id}
DELETE/connected-apps/{connected_app_id}/presets/{id} DELETE/presets/{id}

7. Apple App Store — App API

These app-level Apple App Store endpoints are no longer nested under a connected app path. The app_id is passed as a query parameter for GET requests and as a body field for POST requests.

Note: Apple App Store release management endpoints (submit for review, phased release, etc.) remain nested under /app-versions/{id}/apple-app-store/... in the Store Releases API. Only the app-version management endpoints moved here.
V1V2
GET/connected-apps/{connected_app_id}/apple-app-store/app-versions/draft GET/apple-app-store/app-versions/draft?app_id=...
POST/connected-apps/{connected_app_id}/apple-app-store/app-versions POST/apple-app-store/app-versions (app_id in body)

8. Outgoing Webhooks — App API

The paths are unchanged. Outgoing Webhooks are now under the App API base URL.

In V1, POST /outgoing-webhooks and GET /outgoing-webhooks were top-level. In V2, they remain top-level under the new App API base URL.
PathChange
/outgoing-webhooksBase URL changed only
/outgoing-webhooks/{id}Base URL changed only
/outgoing-webhooks/{id}/deliveriesBase URL changed only
/outgoing-webhooks/{id}/deliveries/{delivery_id}/redeliverBase URL changed only

Note: In V2, outgoing webhooks scoped to an app version are accessible at /app-versions/{id}/outgoing-webhooks in the Store Releases API.

9. Store Releases (formerly Releases) — Store Releases API

The /releases resource is renamed to /app-versions and moved to the Store Releases API. All nested paths follow the same rename pattern (release_idid).

App Versions (core)

V1V2
POST/releases (body: connected_app_id)POST/app-versions (body: app_id)
GET/releases?connected_app_id=...GET/app-versions?app_id=...
GET/releases/{id}GET/app-versions/{id}
PATCH/releases/{id}PATCH/app-versions/{id}
DELETE/releases/{id}DELETE/app-versions/{id}

Release Candidate

V1V2
GET/releases/{release_id}/release-candidateGET/app-versions/{id}/release-candidate
PUT/releases/{release_id}/release-candidate/uploadPUT/app-versions/{id}/release-candidate/upload
GET/releases/{release_id}/release-candidate/upload/statusGET/app-versions/{id}/release-candidate/upload/status
POST/releases/{release_id}/release-candidate/submit-for-beta-reviewPOST/app-versions/{id}/release-candidate/submit-for-beta-review

Approvals

V1V2
GET/releases/{release_id}/approvalsGET/app-versions/{id}/approvals
POST/releases/{release_id}/approvalsPOST/app-versions/{id}/approvals
GET/releases/{release_id}/approvals/{task_id}GET/app-versions/{id}/approvals/{task_id}
PATCH/releases/{release_id}/approvals/{task_id}PATCH/app-versions/{id}/approvals/{task_id}
DELETE/releases/{release_id}/approvals/{task_id}DELETE/app-versions/{id}/approvals/{task_id}

Beta Distribution

V1V2
GET/releases/{release_id}/beta-distribution/what-to-testGET/app-versions/{id}/beta-distribution/what-to-test
POST/releases/{release_id}/beta-distribution/what-to-testPOST/app-versions/{id}/beta-distribution/what-to-test
PATCH/releases/{release_id}/beta-distribution/what-to-test/{id}PATCH/app-versions/{id}/beta-distribution/what-to-test/{what_to_test_id}
DELETE/releases/{release_id}/beta-distribution/what-to-test/{id}DELETE/app-versions/{id}/beta-distribution/what-to-test/{what_to_test_id}
GET/releases/{release_id}/beta-distribution/testing-groupsGET/app-versions/{id}/beta-distribution/testing-groups
PATCH/releases/{release_id}/beta-distribution/testing-groups/{group_id}PATCH/app-versions/{id}/beta-distribution/testing-groups/{group_id}
DELETE/releases/{release_id}/beta-distribution/testing-groups/{group_id}DELETE/app-versions/{id}/beta-distribution/testing-groups/{group_id}

Apple App Store Release & Review

V1V2
POST/releases/{release_id}/apple-app-store/review/submitPOST/app-versions/{id}/apple-app-store/review/submit
POST/releases/{release_id}/apple-app-store/review/cancelPOST/app-versions/{id}/apple-app-store/review/cancel
GET/releases/{release_id}/apple-app-store/review/statusGET/app-versions/{id}/apple-app-store/review/status
GET/releases/{release_id}/apple-app-store/release/statusGET/app-versions/{id}/apple-app-store/release/status
GET/releases/{release_id}/apple-app-store/release/settingsGET/app-versions/{id}/apple-app-store/release/settings
PATCH/releases/{release_id}/apple-app-store/release/settingsPATCH/app-versions/{id}/apple-app-store/release/settings
POST/releases/{release_id}/apple-app-store/releasePOST/app-versions/{id}/apple-app-store/release
POST/releases/{release_id}/apple-app-store/release/pausePOST/app-versions/{id}/apple-app-store/release/pause
POST/releases/{release_id}/apple-app-store/release/continuePOST/app-versions/{id}/apple-app-store/release/continue

Google Play Store Release

V1V2
POST/releases/{release_id}/google-play-store/releasePOST/app-versions/{id}/google-play-store/release
PATCH/releases/{release_id}/google-play-store/localized-release-notesPATCH/app-versions/{id}/google-play-store/localized-release-notes
POST/releases/{release_id}/google-play-store/staged-rollout-schedulePOST/app-versions/{id}/google-play-store/staged-rollout-schedule
GET/releases/{release_id}/google-play-store/staged-rollout-scheduleGET/app-versions/{id}/google-play-store/staged-rollout-schedule
POST/releases/{release_id}/google-play-store/staged-rollout-schedule/pausePOST/app-versions/{id}/google-play-store/staged-rollout-schedule/pause
POST/releases/{release_id}/google-play-store/staged-rollout-schedule/resumePOST/app-versions/{id}/google-play-store/staged-rollout-schedule/resume
DELETE/releases/{release_id}/google-play-store/staged-rollout-scheduleDELETE/app-versions/{id}/google-play-store/staged-rollout-schedule

10. Build Distributions — Build Distributions API

Moved to a dedicated API. The connected_app_id path parameter is replaced with an app_id query parameter.

V1V2
GET/connected-apps/{connected_app_id}/build-distributions GET/?app_id=...
GET/connected-apps/{connected_app_id}/build-distributions/test-builds GET/test-builds?app_id=...

11. Tester Groups — Build Distributions API

No longer nested under a connected app. The app_id is passed as a query parameter or body field.

V1V2
GET/connected-apps/{connected_app_id}/tester-groupsGET/tester-groups?app_id=...
POST/connected-apps/{connected_app_id}/tester-groupsPOST/tester-groups (app_id in body)
GET/connected-apps/{connected_app_id}/tester-groups/{id}GET/tester-groups/{id}
PUT/connected-apps/{connected_app_id}/tester-groups/{id}PUT/tester-groups/{id}
DELETE/connected-apps/{connected_app_id}/tester-groups/{id}DELETE/tester-groups/{id}
POST/connected-apps/{connected_app_id}/tester-groups/{id}/add-testersPOST/tester-groups/{id}/add-testers
POST/connected-apps/{connected_app_id}/tester-groups/{id}/notifyPOST/tester-groups/{id}/notify
GET/connected-apps/{connected_app_id}/tester-groups/{id}/potential-testersGET/tester-groups/{id}/potential-testers

12. Testers — Build Distributions API

No longer nested under a connected app. The app_id is passed as a query parameter.

V1V2
GET/connected-apps/{connected_app_id}/testers GET/testers?app_id=...
DELETE/connected-apps/{connected_app_id}/testers/{tester_slug} DELETE/testers/{tester_slug}

13. CodePush — CodePush API

Moved to a dedicated API. Resources are promoted to top-level; the /connected-apps/{connected_app_id}/code-push/ prefix is removed. The app is identified via the app_id query parameter or body field.

⚠️ CodePush Packages are deprecated. The /deployments/{deployment_id}/packages/... endpoints from V1 have no V2 equivalent. Migrate to the Updates API instead.

Metrics

V1V2
GET/workspaces/{id}/code-push/metrics GET/metrics

Deployments

V1V2
GET/connected-apps/{connected_app_id}/code-push/deploymentsGET/deployments?app_id=...
POST/connected-apps/{connected_app_id}/code-push/deploymentsPOST/deployments (app_id in body)
GET/connected-apps/{connected_app_id}/code-push/deployments/{id}GET/deployments/{id}
PATCH/connected-apps/{connected_app_id}/code-push/deployments/{id}PATCH/deployments/{id}
DELETE/connected-apps/{connected_app_id}/code-push/deployments/{id}DELETE/deployments/{id}
POST/connected-apps/{connected_app_id}/code-push/deployments/{id}/promotePOST/deployments/{id}/promote
POST/connected-apps/{connected_app_id}/code-push/deployments/{id}/rollbackPOST/deployments/{id}/rollback

Updates (formerly nested under Deployments)

In V1, updates were nested under a specific deployment: /deployments/{deployment_id}/updates/.... In V2, updates are top-level resources.

V1V2
GET/connected-apps/{connected_app_id}/code-push/deployments/{deployment_id}/updatesGET/updates?app_id=...
GET/connected-apps/{connected_app_id}/code-push/deployments/{deployment_id}/updates/{id}GET/updates/{id}
PATCH/connected-apps/{connected_app_id}/code-push/deployments/{deployment_id}/updates/{id}PATCH/updates/{id}
DELETE/connected-apps/{connected_app_id}/code-push/deployments/{deployment_id}/updates/{id}DELETE/updates/{id}
GET/connected-apps/{connected_app_id}/code-push/deployments/{deployment_id}/updates/{id}/statusGET/updates/{id}/status
GET/connected-apps/{connected_app_id}/code-push/deployments/{deployment_id}/updates/{id}/upload-urlGET/updates/{id}/upload-url