Runway REST API (1.0.0)

Download OpenAPI specification:

About Runway

Runway (runway.team) is a release management platform for mobile app teams. Top mobile teams like DoorDash, monday.com, Skyscanner, Gusto, Wealthsimple, and Mercari use Runway to track, automate, and collaborate on their app releases. For more information, visit our website.

Introduction

Welcome to the Runway API and webhooks documentation! The REST API allows you to access information about your releases in Runway. You can also subscribe to webhook events sent by Runway. To get started, create an API key from your organization's dashboard – you'll use this key to authenticate requests to the API.

Authentication

All Runway REST API endpoints are authenticated via an API key passed as an X-API-Key header like so:

X-API-Key: {YOUR_API_KEY}

API keys are created from your organization's dashboard.

Schema

The Runway REST API is accessed via HTTPS, with a base URL of https://api.runway.team. All data is sent and received as JSON. Unless otherwise stated, dates are sent and received in the JSON Schema Validation date-time format, in UTC.

Most Runway REST API endpoints require one or more path parameters that correspond to the ids of various entities, like app and release. You can find your app's identifier in the Overview section of your app's Settings. To construct a release identifier for an existing release in an app, combine the app identifier with the release version like so: {appId}:{version}. For example, the release identifier of a release with version 1.1.0 on an app with an app identifier myapp-ios would be myapp-ios:1.1.0.

Rate limiting

Requests to the API will be limited to 5 requests per second, 8000 requests per day.

Org

Operations to Runway organizations

Get organization details

Returns the details of an organization.

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

Responses

Response samples

Content type
application/json
{
  • "id": "my-org",
  • "name": "My Organization",
  • "subdomain": "my-org",
  • "imageUrl": "string",
  • "createdAt": "2022-03-02T01:15:00Z"
}

List apps in organization

Returns a paginated list of apps in the organization.

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

query Parameters
limit
integer
Default: 5

Maximum number of apps to return (default 5, max 5)

offset
integer
Default: 0

Number of apps to skip for pagination

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get organization metrics

Returns aggregated metrics for the organization over the given date range. Optionally restrict the response to specific metric types or include the underlying time-series data points.

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

query Parameters
startDate
required
string <date>
Example: startDate=2026-01-01

Start of the date range (inclusive), in YYYY-MM-DD format. Interpreted as UTC.

endDate
required
string <date>
Example: endDate=2026-01-31

End of the date range (inclusive), in YYYY-MM-DD format. Interpreted as UTC.

metricTypes
Array of strings
Items Enum: "CIWorkflowSuccessPercent" "CIAverageBuildTime" "CIBuildsCount" "CommitCount" "AICommitsPercentage" "AIAuthorDistribution" "LinesOfCodeAdded" "LinesOfCodeAddedForHotfixes" "LinesOfCodeChanged" "LinesOfCodeChangedForHotfixes" "LinesOfCodeDeleted" "LinesOfCodeDeletedForHotfixes" "ReleaseDuration" "HotfixReleaseDuration" "WaitingForReviewDuration" "InReviewDuration" "ReviewRejectionRate" "ItemsCompleted" "TicketsCount" "LateMergesCount" "TargetDateSuccessRateKickoff" "TargetDateSuccessRateSubmission" "TargetDateSuccessRateRelease" "FixRequestsCount" "FixesCount" "FixRequestsAcceptedCount" "FixRequestsRejectedCount" "PercentCompletedWorkItemsThatAreFixes" "FixAcceptanceRate" "AppStoreBuildCount" "AppStoreBuildBundleDownloadSize" "AppStoreBuildBundleInstallSize" "StatAverageCustomerRating" "StatAverageAppCustomerRating" "ReleaseDurations" "AverageTimeToRecover" "FailureRate" "AverageCLIApprovalTime" "CLICompletionRate" "CLIOverdueRate" "AverageReleaseStepCompletionTime" "AverageHotfixStepCompletionTime" "ReleaseFrequency" "HotfixToNonHotfixReleaseRatio" "AppStoreCrashFreeUsers" "AppStoreCrashFreeSessions" "BetaCrashFreeUsers" "BetaCrashFreeSessions" "SessionAdoptionRate" "StatBuildDistroBuildCount" "StatBuildDistroArtifactSize" "TriageIssuesDetected" "TriageTimeToFixMerged"
Example: metricTypes=CIBuildsCount,ReleaseDuration

Comma-separated list of metric types to include in the response. If omitted, all available metrics are returned. Custom org-defined health metrics (prefixed with OBAA:, configured under App settings → Health metrics) are also accepted but are not enumerated here.

includeDataPoints
boolean
Default: false

If true, include the underlying time-series data points for each metric. Defaults to false.

Responses

Response samples

Content type
application/json
{
  • "metrics": [
    ]
}

List all groups

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new group

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

Request Body schema: application/json
required

The request body for creating a new custom group

name
required
string

The name of the group

userActions
Array of strings (UserAction)
Items Enum: "AddRemoveEditIntegration" "UpdateAppSettings" "EditAutomations" "CreateDeleteRelease" "CreateHotfix" "UpdateScheduleCadence" "UpdateReleaseTargetDates" "CreateBranchPromoteCode" "BumpVersion" "TagCommit" "ApproveScreenshotsMetadata" "PromoteBetaBuildToTestingTrack" "ApproveBetaTesting" "UpdateRegressionStatus" "UpdateMetadataApproval" "SetResumeActiveRCBuild" "TriggerCIWorkflow" "UpdateAppStoreSelectedBuild" "UpdateAppStoreReviewSubmission" "SubmitAppUpdate" "DevRejectAppUpdate" "ReleaseAppUpdate" "UpdateReleasePilot" "AddRemoveEditCLI" "PingCLI" "UAToggleApprovalCLI" "ToggleFRIgnore" "ToggleFeatureFlag" "UpdatePhasedRelease" "AddRemoveEditReleaseBranchPatterns" "AddRemoveEditReleaseTagPatterns" "AddRemoveEditFeatureAffiliations" "AssignBetaTestersToBuilds" "AssignBetaGroupsToBuilds" "UpdateAdditionalBranchConfig" "DownloadBuildArtifact" "UpdateMetadata" "EditReleasePlanningSummary" "EditReleaseSummaryMessage" "EditAppStoreReleaseSettings" "ApplyMetadata" "SubmitBetaBuildForReview" "PauseResumeScheduleCadence" "UpdateBetaTestingNotes" "AccessSSOPortal" "AccessDirectorySyncPortal" "CreateDeleteApp" "InviteUsers" "EditUserRoles" "RemoveOrgUser" "AddUpdateRemoveWebhook" "CreateDeleteAPITokens" "UpdateDirectorySyncRolesForGroups" "StartRollbackResigningSequence" "AddRemoveDevice" "AddRemoveTestDeviceFromApp" "UpdateDeviceInASC" "UploadSigningKey" "ImportExportTranslationStrings" "ApproveTranslations" "AddFixRequest" "UpdateFixRequestStatus" "UploadExportMetadataTranslations" "CreateEditDeleteCustomGroup" "BuildDistroOptIn" "UACreateBuildDistroBucket" "UpdateBucketSettings" "UpdateBucketNotifications" "UpdateBucketMembers" "BucketInviteIndividualTestersToBuilds" "BucketUploadBuilds" "BucketUpdateBuildTesterNotes" "BucketInstallBuilds" "ManageTriageIssues"

The list of user actions that the group can perform

members
Array of strings

The list of user IDs that are members of the group

isEligibleForPilotRotation
boolean
Default: false

Whether members of this group are eligible to be added to a release pilot rotation

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "userActions": [
    ],
  • "members": [
    ],
  • "isEligibleForPilotRotation": false
}

Response samples

Content type
application/json
{
  • "id": "acb-123",
  • "name": "Developers",
  • "userActions": [
    ],
  • "members": [
    ],
  • "isEligibleForPilotRotation": true
}

Update ad hoc groups for users

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

Request Body schema: application/json
required

The request body for updating users groups based on ad-hoc group mappings

Array
userId
required
string

The user's email address.

groupIds
required
Array of strings

The ad-hoc group IDs to map to Runway groups for this user.

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "results": [
    ],
  • "summary": {
    }
}

Update a custom group

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

groupId
required
string

The ID of the group.

Request Body schema: application/json
required

The request body for updating a custom group

name
required
string

The name of the group

userActions
Array of strings (UserAction)
Items Enum: "AddRemoveEditIntegration" "UpdateAppSettings" "EditAutomations" "CreateDeleteRelease" "CreateHotfix" "UpdateScheduleCadence" "UpdateReleaseTargetDates" "CreateBranchPromoteCode" "BumpVersion" "TagCommit" "ApproveScreenshotsMetadata" "PromoteBetaBuildToTestingTrack" "ApproveBetaTesting" "UpdateRegressionStatus" "UpdateMetadataApproval" "SetResumeActiveRCBuild" "TriggerCIWorkflow" "UpdateAppStoreSelectedBuild" "UpdateAppStoreReviewSubmission" "SubmitAppUpdate" "DevRejectAppUpdate" "ReleaseAppUpdate" "UpdateReleasePilot" "AddRemoveEditCLI" "PingCLI" "UAToggleApprovalCLI" "ToggleFRIgnore" "ToggleFeatureFlag" "UpdatePhasedRelease" "AddRemoveEditReleaseBranchPatterns" "AddRemoveEditReleaseTagPatterns" "AddRemoveEditFeatureAffiliations" "AssignBetaTestersToBuilds" "AssignBetaGroupsToBuilds" "UpdateAdditionalBranchConfig" "DownloadBuildArtifact" "UpdateMetadata" "EditReleasePlanningSummary" "EditReleaseSummaryMessage" "EditAppStoreReleaseSettings" "ApplyMetadata" "SubmitBetaBuildForReview" "PauseResumeScheduleCadence" "UpdateBetaTestingNotes" "AccessSSOPortal" "AccessDirectorySyncPortal" "CreateDeleteApp" "InviteUsers" "EditUserRoles" "RemoveOrgUser" "AddUpdateRemoveWebhook" "CreateDeleteAPITokens" "UpdateDirectorySyncRolesForGroups" "StartRollbackResigningSequence" "AddRemoveDevice" "AddRemoveTestDeviceFromApp" "UpdateDeviceInASC" "UploadSigningKey" "ImportExportTranslationStrings" "ApproveTranslations" "AddFixRequest" "UpdateFixRequestStatus" "UploadExportMetadataTranslations" "CreateEditDeleteCustomGroup" "BuildDistroOptIn" "UACreateBuildDistroBucket" "UpdateBucketSettings" "UpdateBucketNotifications" "UpdateBucketMembers" "BucketInviteIndividualTestersToBuilds" "BucketUploadBuilds" "BucketUpdateBuildTesterNotes" "BucketInstallBuilds" "ManageTriageIssues"

The list of user actions that the group can perform

members
Array of strings

The list of user IDs that are members of the group

isEligibleForPilotRotation
boolean

Whether members of this group are eligible to be added to a release pilot rotation

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "userActions": [
    ],
  • "members": [
    ],
  • "isEligibleForPilotRotation": true
}

Response samples

Content type
application/json
{
  • "id": "acb-123",
  • "name": "Developers",
  • "userActions": [
    ],
  • "members": [
    ],
  • "isEligibleForPilotRotation": true
}

Get a custom group

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

groupId
required
string

The ID of the group.

Responses

Response samples

Content type
application/json
{
  • "id": "acb-123",
  • "name": "Developers",
  • "userActions": [
    ],
  • "members": [
    ],
  • "isEligibleForPilotRotation": true
}

Delete a custom group

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

groupId
required
string

The ID of the group.

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

App

Operations to Runway apps

Get app details

Returns the details of an app.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "id": "fake-app",
  • "appName": "Fake app",
  • "platform": "ios",
  • "createdAt": "2022-03-02T01:15:00Z"
}

Get release schedule cadence

Returns the app's release schedule cadence — how often releases happen (weekly / biweekly / monthly / etc.), the target kickoff/submit/release day-and-time pattern, timezone, and skip-next-submit/release flags.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "scheduleCadence": "never",
  • "cadenceTargetDateSets": [
    ],
  • "cadenceTimezone": "string",
  • "allowKickoffWhenPreviousNotComplete": true,
  • "submitWeeksToSkip": 0,
  • "releaseWeeksToSkip": 0
}

Get lifecycle freezes

Returns the app's configured lifecycle freeze periods. Lifecycle freezes pause selected release lifecycle events (kickoff, submit, release) during the configured date ranges without changing the recurring schedule cadence.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Update lifecycle freezes

Replaces only the app's lifecycle freeze periods. This does not change the app's release schedule cadence, but it may move release target dates that fall inside a freeze. Requires the API key to have the UpdateScheduleCadence user action.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for replacing lifecycle freezes

required
Array of objects (LifecycleFreezeSetInput)

Replacement lifecycle freeze list. Pass an empty array to clear all lifecycle freezes.

Responses

Request samples

Content type
application/json
{
  • "lifecycleFreezes": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

Get release schedule

Returns each release's target dates (kickoff, submit, release, rollout completion), status, and release pilot. Includes cadence-predicted future releases (status predicted) whose dates and pilot are estimates derived from the app's schedule and pilot rotation and are subject to change. Omit version for the full schedule (past, current, and predicted future releases); pass it to get a single release. Only available for apps using Runway workflows.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

query Parameters
version
string

Optional release version. Omit to return the full schedule including predicted future releases.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get app store reviews

Returns the customer reviews Runway currently holds for an app, newest first, across every store the app ships to (Apple App Store via App Store Connect, Google Play, Amazon Appstore, Huawei AppGallery, Samsung Galaxy Store). Each review carries the destination it came from, so reviews from different stores can be told apart.

These are reviews left by end users in the app stores — not Apple's or Google's review of a submitted build.

Runway holds the most recent window of reviews returned by each store rather than a full historical archive, so a caller building its own archive should poll often enough that the window always covers the gap since its last poll. submittedAfter and submittedBefore are both inclusive: a review submitted exactly at the boundary is returned. Reviews are uniquely identified by id — dedupe on it when polling incrementally.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

query Parameters
limit
integer [ 1 .. 500 ]
Default: 100

Maximum number of reviews to return.

offset
integer >= 0
Default: 0

Number of reviews to skip, for paging through totalCount.

submittedAfter
string <date-time>

Only return reviews submitted at or after this RFC3339 timestamp (inclusive).

submittedBefore
string <date-time>

Only return reviews submitted at or before this RFC3339 timestamp (inclusive).

stepConfigId
string

Only return reviews from this store destination. Use the destination.stepConfigId value from a previous response.

version
string

Only return reviews left on this app version.

Responses

Response samples

Content type
application/json
{
  • "reviews": [
    ],
  • "totalCount": 0,
  • "hasMore": true,
  • "lastUpdatedAt": "2019-08-24T14:15:22Z"
}

Enable or disable a scheduled release automation

Turns a scheduled release automation on or off without changing its settings. Requires the API key to have the EditAutomations user action.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required
automationType
required
string
Enum: "kickoff" "submit" "release" "halt" "promote" "resume_rollout"

Scheduled automation to update

enabled
required
boolean

Whether the automation should be enabled

Responses

Request samples

Content type
application/json
{
  • "automationType": "kickoff",
  • "enabled": true
}

Response samples

Content type
application/json
{
  • "type": "string",
  • "enabled": true
}

Get app configuration file

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Update an app - coming soon

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for updating a Runway app

name
string

The name of the app

platform
string (AppPlatform)
Enum: "ios" "android" "ios-sdk" "android-sdk" "react-native-ota"

The app's platform

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "platform": "ios"
}

Response samples

Content type
application/json
{
  • "id": "fake-app",
  • "appName": "Fake app",
  • "platform": "ios",
  • "createdAt": "2022-03-02T01:15:00Z"
}

Delete an app - coming soon

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Upload app icon

Upload and set the app icon. For teams using config-as-code who don't have their app icons hosted publicly, this endpoint allows uploading an icon file directly. The icon will be stored and the URL can be used in the icon field of your app config YAML. Accepts multipart/form-data with a PNG or JPEG image (max 10MB).

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: multipart/form-data
required

Multipart form data containing the icon image

icon
string <binary>

The app icon image (PNG or JPEG)

file
string <binary>

Alternative field name for the icon image

Responses

Response samples

Content type
application/json
{
  • "iconUrl": "string"
}

List app integrations

Returns the list of integrations installed on the given app. Use the returned installationId for other endpoints that act on a specific integration (e.g. uploading a Custom CI build).

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
[
  • {
    }
]

List apps in organization

Returns a paginated list of apps in the organization.

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

query Parameters
limit
integer
Default: 5

Maximum number of apps to return (default 5, max 5)

offset
integer
Default: 0

Number of apps to skip for pagination

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an app from configuration file

Authorizations:
apiKey
path Parameters
orgId
required
string

The ID of the org.

Request Body schema: application/yaml
required

The YAML configuration file for creating a new app

string <binary>

The YAML file containing the app configuration. Attach this either as raw text to the request body or as a binary file.

Responses

Response samples

Content type
text/plain
Created app new-app-id

Add a destination to an existing app's workflow from a configuration file

Accepts the same YAML schema as createAppFromConfig, but instead of creating a new app, adds a new destination to the given app's existing workflow. The YAML's name/icon become the destination's name and icon; integrations are installed as new app integrations from existing org providers; appSettings.branchSettings are stored as a per-destination branch config; stepGroups are cloned into the workflow as new step configs. Other fields (appGroup, appUsers, appStoreReleaseSettings, buildDistro, tagSettings, featureAffiliations) are ignored.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/yaml
required

The YAML configuration file describing the destination to add

string <binary>

The YAML file describing the new destination. Attach this either as raw text to the request body or as a binary file.

Responses

Response samples

Content type
text/plain
Added destination new-destination-id to app app_id

Upload App Store review attachment files

Upload attachment files (e.g., screenshots, notes) for App Store Connect review submission. Accepts multipart/form-data with the file to upload.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: multipart/form-data
required

Multipart form data containing the attachment file

file
string <binary>

The attachment file to upload

Responses

Response samples

Content type
application/json
{
  • "files": [
    ]
}

Pause or resume automations

Pause or resume automations for an app using a single endpoint. Set enabled to false to pause and true to resume. Omit automationIds to pause or resume all automations; provide one or more automationIds to affect only those types.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for pausing or resuming automations

enabled
required
boolean

Whether automations should be active. Set to false to pause and true to resume.

automationIds
Array of strings

Optional automation types to pause or resume (e.g. AutoKickoff, AutoSubmit, AutoRelease). Omit to pause or resume all automations.

Responses

Request samples

Content type
application/json
{
  • "enabled": true,
  • "automationIds": [
    ]
}

Response samples

Content type
application/json
{
  • "allAutomationsPaused": true,
  • "pausedAutomationTypes": [
    ]
}

Post data to custom observability and analytics integration

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

integrationInstallationId
required
string

The unique installation ID for the integration. Found in the corresponding integration settings in Runway. Has the format <integration type>:<random string>, for example custom-ci:d5onv9mfdkkqlsl3cie0.

Request Body schema: application/json
required

The request body for pushing custom event data

Array of objects (CustomEventEntity)

Events data points

Responses

Request samples

Content type
application/json
{
  • "data": [
    ]
}

Response samples

Content type
application/json
{
  • "version": "1.2.3",
  • "id": "page_load",
  • "value": 42,
  • "timestamp": "2022-03-02T01:15:00Z"
}

Update auth credentials for an App Store Connect or Google integration

Rotates auth credentials for an App Store Connect (Apple) or Google integration provider. Request body must be sent as multipart/form-data.

Apple (App Store Connect) — provide keyId, issuerId, and the .p8 key file. All installations in the org that share the existing provider will automatically pick up the new credentials.

curl -X POST \
    -F "keyId=ABCD1234" \
    -F "issuerId=12345678-1234-1234-1234-123456789012" \
    -F "key=@AuthKey_ABCD1234.p8" \
    -H "X-API-KEY:API-KEY" \
    https://api.runway.team/v1/app/{appId}/integration/{integrationInstallationId}/updateAuth

Google — provide only the .json service account key file. keyId and issuerId must not be sent. The provider row is updated in place to reference the new key file; all installations sharing that provider automatically pick up the new credentials.

curl -X POST \
    -F "key=@service-account.json" \
    -H "X-API-KEY:API-KEY" \
    https://api.runway.team/v1/app/{appId}/integration/{integrationInstallationId}/updateAuth
Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

integrationInstallationId
required
string

The unique installation ID for the integration. Found in the corresponding integration settings in Runway. Has the format <integration type>:<random string>, for example custom-ci:d5onv9mfdkkqlsl3cie0.

Request Body schema: multipart/form-data
required

The request body for updating auth credentials on an App Store Connect or Google integration. Must be sent as multipart/form-data. For Apple integrations, keyId, issuerId, and a .p8 key file are required. For Google integrations, only a .json key file is required; keyId and issuerId must not be sent.

keyId
string

(Apple only) The App Store Connect API key ID. Required for Apple integrations. Must not be sent for Google integrations.

issuerId
string

(Apple only) The App Store Connect issuer ID. Required for Apple integrations. Must not be sent for Google integrations.

key
required
string <binary>

The private key file. For Apple integrations, must be a .p8 file. For Google integrations, must be a .json service account key file.

Responses

Response samples

Content type
application/json
{
  • "providerId": "apple:ABCD1234-12345678-1234-1234-1234-123456789012",
  • "integrationType": "apple",
  • "keyId": "ABCD1234",
  • "issuerId": "12345678-1234-1234-1234-123456789012"
}

Upload a build for a 'Custom CI' integration

Please note the unique upload server URL for this endpoint.

The binary file must be included in a 'file' field as form data. Please see below for an example curl request:

curl -X POST \
    -F "file=@example.ipa" \
    -F 'data={\"version\":\"1.2.3\",\"ciBuildInfo\":{\"buildIdentifier\":\"123\",\"status\":\"inProgress\",\"startedAt\":\"2022-03-02T01:15:00Z\",\"branch\":\"release-1.2.3\",\"commitHash\":\"abcdef\",\"integrationId\":\"custom-ci\",\"workflowData\":{\"workflowId\":\"123\"}}}}'  \
    -H "X-API-KEY:API-KEY" \
    https://upload-api.runway.team/v1/app/{appId}/integration/{integrationInstallationId}/build
Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

integrationInstallationId
required
string

The unique installation ID for the integration. Found in the corresponding integration settings in Runway. Has the format <integration type>:<random string>, for example custom-ci:d5onv9mfdkkqlsl3cie0.

Request Body schema: multipart/form-data
required

The request body for uploading a CI build and binary to a custom CI integration

file
required
string <binary>
required
object (CustomCIBuildUploadRequestFormData)

Responses

Response samples

Content type
application/json
{
  • "id": "12345",
  • "bucketId": "abc123",
  • "bucketName": "CIs",
  • "binaryBuild": {
    },
  • "ciBuild": {
    },
  • "createdAt": "2022-03-02T01:15:00Z",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "individualTesters": [
    ],
  • "testerNotes": "string",
  • "status": "",
  • "testerNotesSetByBucketAutomation": true,
  • "uploadedAt": "2022-03-02T01:15:00Z",
  • "artifactInfo": {
    },
  • "prData": {
    },
  • "isMultiArtifact": true,
  • "additionalArtifacts": [
    ]
}

List builds for a 'Custom CI' integration on a release

Lists builds uploaded to a Custom CI (Mobile Release Management / MRM) integration for a specific release. Use this to discover the buildHash for a build (e.g. to download its artifact). Only supported for integrations of type customCI — for other CI providers (Bitrise, CircleCI, etc.) builds are fetched directly from the provider and are not listed here. Results are sorted newest first.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

integrationInstallationId
required
string

The unique installation ID for the integration. Found in the corresponding integration settings in Runway. Has the format <integration type>:<random string>, for example custom-ci:d5onv9mfdkkqlsl3cie0.

query Parameters
version
required
string

The release's version string (e.g. 5.12.0).

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Attach an additional file to a 'Custom CI' build

Please note the unique upload server URL for this endpoint.

The additional file must be included in a 'file' field as form data, and the build version must be passed in the data field. Please see below for an example curl request:

curl -X POST \
    -F "file=@test_results.html" \
    -F 'data={"version":"1.2.3"}'  \
    -H "X-API-KEY:API-KEY" \
    https://upload-api.runway.team/v1/app/{appId}/integration/{integrationInstallationId}/build/{buildId}/additionalFiles
Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

integrationInstallationId
required
string

The unique installation ID for the integration. Found in the corresponding integration settings in Runway. Has the format <integration type>:<random string>, for example custom-ci:d5onv9mfdkkqlsl3cie0.

buildId
required
string

The build identifier

Request Body schema: multipart/form-data
required

The request body for uploading an additional file to a custom CI build

file
required
string <binary>
required
object (CustomCIBuildAdditionalFileUploadRequestFormData)

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Download Custom CI build artifact

Redirects to a short-lived signed URL for the primary artifact stored for this Custom CI build. Use GET .../additionalFiles/{filename} for a supplemental file. Requires version to identify the release.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app.

integrationId
required
string

Unique identifier for the Custom CI integration installation on the app. Found in the integration settings in Runway.

buildId
required
string

The Custom CI build identifier (ciBuildInfo.buildIdentifier).

query Parameters
version
required
string
Example: version=1.2.3

Release version for this build (internal or user-facing).

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Download Custom CI additional file

Redirects to a short-lived signed URL for a supplemental artifact on this Custom CI build. Same version query as the primary download.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app.

integrationId
required
string

Unique identifier for the Custom CI integration installation on the app. Found in the integration settings in Runway.

buildId
required
string

The Custom CI build identifier (ciBuildInfo.buildIdentifier).

filename
required
string

Name of the additional artifact file (URL-encoded when necessary).

query Parameters
version
required
string
Example: version=1.2.3

Release version for this build (internal or user-facing).

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Get an app's fix request form fields settings

Returns the app's configured fix request form field settings, including each field's id, name, whether it is required, and any minimum character count. Use the returned fieldIds to build the formFieldsValues when creating a fix request.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "formFieldsSettings": [
    ]
}

Release

Operations to Runway releases

Get release schedule

Returns each release's target dates (kickoff, submit, release, rollout completion), status, and release pilot. Includes cadence-predicted future releases (status predicted) whose dates and pilot are estimates derived from the app's schedule and pilot rotation and are subject to change. Omit version for the full schedule (past, current, and predicted future releases); pass it to get a single release. Only available for apps using Runway workflows.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

query Parameters
version
string

Optional release version. Omit to return the full schedule including predicted future releases.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

List releases

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

query Parameters
timelinePhase
string (ReleaseTimelinePhase)
Enum: "upcoming" "current" "completed"

Filter releases by timeline phase

limit
integer
Default: 20

For pagination, the maximum number of releases to return

offset
integer
Default: 0

For pagination, the number of releases to skip before returning the first release

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new release

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for creating a new release

version
required
string
releaseType
required
string (CreateEditReleaseType)
Enum: "release" "hotfix" "rollback"

Release type used when creating or editing releases.

targetKickoffDate
string <date-time>

The target kickoff date for the release. All platforms.

targetSubmitDate
string <date-time>

The target submission date for the release. iOS and Android platforms only.

targetReleaseDate
string <date-time>

The target release date for the release. iOS platforms only.

releasePilotId
string

The user id (email) of the release pilot for the release. Pass the string 'FROM_ROTATION' to set the release pilot based on the pilot rotation schedule.

releaseName
string

A user-friendly name for your release.

shouldCreateBranch
boolean

Hotfixes only. Whether to immediately create the release branch, cut from the base release tag. Defaults to false.

shouldBumpVersionOnBranch
boolean

Hotfixes only. Whether to bump the version on the newly created release branch. Requires shouldCreateBranch to be true. Defaults to false.

object (CreateReleaseBaseTag)

Hotfixes only. The release tag to branch the hotfix from. Defaults to the tag of the latest completed release. Must match an existing release tag on the app, otherwise the request is rejected.

commitsToCherryPick
Array of strings

Hotfixes only. The hashes of the commits to cherry-pick onto the release branch. Requires shouldCreateBranch to be true.

Responses

Request samples

Content type
application/json
{
  • "version": "1.1.0",
  • "releaseType": "release",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmitDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "releaseName": "Release 1.2.3",
  • "shouldCreateBranch": true,
  • "shouldBumpVersionOnBranch": true,
  • "base": {
    },
  • "commitsToCherryPick": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "isReleaseTagged": true,
  • "isKickedOff": true,
  • "isSubmitted": true,
  • "isReleased": true,
  • "createdAt": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releaseBranch": "release-1.0.0",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "kickedOffAt": "2022-03-02T01:15:00Z",
  • "submittedAt": "2022-03-02T01:15:00Z",
  • "releasedAt": "2022-03-02T01:15:00Z",
  • "rolloutCompletedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "regressionTestingStatus": {
    },
  • "releaseSummary": "string",
  • "workItems": [
    ],
  • "steps": [
    ],
  • "appStoreData": {
    },
  • "customMetadata": {}
}

List release tags

Returns the app's most recent release tags, newest first. These are the tags a hotfix release can be based on — pass one of their names as the base of a create-release request.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
[
  • {
    }
]

List cherry-pick candidate commits

Returns the commits on the app's working branch that can be cherry-picked onto a hotfix release branch, newest first. Pass their hashes as the commitsToCherryPick of a create-release request.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

query Parameters
baseTag
string
Example: baseTag=v1.0.0

The release tag the hotfix will branch from, given as a tag name or the version that tag marks. When set, only commits landed after that tag are returned. Pass the same value you will pass as the create-release base.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get the details of a Runway release

Returns release-level fields (status, target dates, release pilot, summary, branch, timelinePhase, etc.). For step-level data, use the steps endpoints.

Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "displayableVersion": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "releaseBranch": "release-1.0.0",
  • "createdAt": "2022-03-02T01:15:00Z",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "releaseSummary": "string",
  • "releaseDescription": "string"
}

Update a Runway release

Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for updating a release

version
required
string
isHotfix
boolean

Whether the release is a hotfix.

targetKickoffDate
string <date-time>

The target kickoff date for the release. All platforms. Pass null to clear the date.

targetSubmitDate
string <date-time>

The target submission date for the release. iOS and Android platforms only. Pass null to clear the date.

targetReleaseDate
string <date-time>

The target release date for the release. iOS platforms only. Pass null to clear the date.

releasePilotId
string

The user id (email) of the release pilot for the release. Pass the string 'FROM_ROTATION' to set the release pilot based on the pilot rotation schedule.

releaseName
string

A user-friendly name for your release.

releaseDescription
string

A description of the release for internal use by your team.

Responses

Request samples

Content type
application/json
{
  • "version": "1.1.0",
  • "isHotfix": false,
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmitDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "releaseName": "Release 1.2.3",
  • "releaseDescription": "Description of release 1.2.3..."
}

Response samples

Content type
application/json
{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "isReleaseTagged": true,
  • "isKickedOff": true,
  • "isSubmitted": true,
  • "isReleased": true,
  • "createdAt": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releaseBranch": "release-1.0.0",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "kickedOffAt": "2022-03-02T01:15:00Z",
  • "submittedAt": "2022-03-02T01:15:00Z",
  • "releasedAt": "2022-03-02T01:15:00Z",
  • "rolloutCompletedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "regressionTestingStatus": {
    },
  • "releaseSummary": "string",
  • "workItems": [
    ],
  • "steps": [
    ],
  • "appStoreData": {
    },
  • "customMetadata": {}
}

Delete a Runway release

Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Get a release's custom metadata

Returns the custom metadata attached to the release, keyed by a stable id derived from each entry's title. Returns an empty object if none is set.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

Responses

Response samples

Content type
application/json
{}

Update a release's custom metadata

Applies a per-title upsert to the release's custom metadata: a title mapped to a value is set (creating or overwriting that entry), a title mapped to null is deleted, and titles not present in the request are left unchanged. The title is the entry's identity, and its stable id is derived from it server-side.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

Request Body schema: application/json
required

The custom metadata entries to apply to the release. Updates are a per-title upsert: a title mapped to a value is set (creating or overwriting that entry), a title mapped to null is deleted, and titles not present are left unchanged. The title is the entry's identity, and its stable id is derived from it server-side.

required
object

Map of a human-readable title to its value (any JSON type), or null to delete the entry with that title.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "isReleaseTagged": true,
  • "isKickedOff": true,
  • "isSubmitted": true,
  • "isReleased": true,
  • "createdAt": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releaseBranch": "release-1.0.0",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "kickedOffAt": "2022-03-02T01:15:00Z",
  • "submittedAt": "2022-03-02T01:15:00Z",
  • "releasedAt": "2022-03-02T01:15:00Z",
  • "rolloutCompletedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "regressionTestingStatus": {
    },
  • "releaseSummary": "string",
  • "workItems": [
    ],
  • "steps": [
    ],
  • "appStoreData": {
    },
  • "customMetadata": {}
}

Get the details of a Runway release step

Returns the details for a release step, including a data field whose shape depends on the step archetype:

  • releaseCandidate: RC build info (status, integration IDs).
  • approvals: metadata/screenshots approval state via approvalItems.
  • takeoff: info about store release — submittedAt, startedReviewAt, approvedAt, markedRejectedAt, releasedAt, plus the precomputed waitingForReviewSeconds (queued before review started) and timeInReviewSeconds (under review).
  • regressionTesting: regressionItems and testRuns from the connected regression integration.
  • featureReadiness: work items tracked for the release, including project management ticket info and pull request / code review (PR / CR) info.
  • rollout: releaseAdoptionRate, phasedRelease (rollout percentage via userFraction, state, dayNumber, startDate), appStoreReviewData (average rating, total ratings count, surfaced user review issues), and monitoringStatistics (crash-free users, crash-free sessions, custom metrics — each with currentValue, delta, previousValue, monitoringMetricStatus).
  • Other archetypes: data may be null.
Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

stepId
required
string

The id of the release step

Responses

Response samples

Content type
application/json
{
  • "stepId": null,
  • "type": "kickoff",
  • "displayName": "string",
  • "status": "ready",
  • "statusReasonString": "string",
  • "data": {
    },
  • "checklistItems": [
    ]
}

List the steps of a Runway release

Returns a lightweight list of all steps for a release. Use the returned id and stepArchetype values to look up full details via the single step endpoint.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

Responses

Response samples

Content type
application/json
[
  • {
    }
]

List the checklist items of a Runway release

Returns a flat list of every checklist item for a release, covering both Flightpaths step runs (for migrated archetypes) and legacy checklist items (for archetypes still on the legacy model).

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get the details of a Runway release step run

Returns the details of a specific step run in a release. Only available for apps with FlightPaths enabled.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

stepRunId
required
string

The id of the step run

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "stepConfigId": "string",
  • "stepArchetype": "kickoff",
  • "displayName": "string",
  • "status": "ready",
  • "statusReasonString": "string",
  • "checklistItems": [
    ],
  • "data": {
    }
}

Download an artifact from the latest CI build

Redirects to a short-lived signed URL for an artifact persisted by Runway from the newest non-skipped build on a Flightpaths release-candidate step. Omit artifactId to select the preferred primary binary artifact, or pass an artifact ID from the newest build returned by the existing release-step endpoint. This works for every CI provider when Runway has persisted the artifact.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

stepRunId
required
string

The id of the step run

query Parameters
artifactId
string

Optional artifact ID from the newest release-candidate build returned by the existing release-step endpoint. When omitted, Runway selects the preferred primary binary artifact.

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Update App Store metadata for a metadata step run

Updates per-locale App Store listing fields (for example whatsNew release notes) for a metadata step run. Requires Flightpaths: the app must have FlightPaths enabled; legacy (non-Flightpaths) releases are not supported by this endpoint. Obtain stepRunId from the release's step runs (for example GET /app/{appId}/release/{releaseId}/steps or list step runs in the Runway UI).

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

stepRunId
required
string

The id of the step run

Request Body schema: application/json
required

Per-locale App Store metadata updates for a Flightpaths metadata step run (release notes and other listing fields).

required
Array of objects (UpdateMetadataLocalizationRequestItem)

One entry per locale to create or update

Responses

Request samples

Content type
application/json
{
  • "localizations": [
    ]
}

Response samples

Content type
application/json
{
  • "stepId": null,
  • "type": "kickoff",
  • "displayName": "string",
  • "status": "ready",
  • "statusReasonString": "string",
  • "data": {
    },
  • "checklistItems": [
    ]
}

Get StepRun by StepConfig and Release

Returns the details of a step run for a given step config and release. The step run is looked up using the release's FlightPath run and the step config. Only available for apps with FlightPaths enabled.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

stepConfigId
required
string

The id of the step config (FlightPaths). A step config defines a step in the release FlightPath.

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "stepConfigId": "string",
  • "stepArchetype": "kickoff",
  • "displayName": "string",
  • "status": "ready",
  • "statusReasonString": "string",
  • "checklistItems": [
    ],
  • "data": {
    }
}

Get timeline events for a release

Get timeline events for a release. Use these to see what happened and in what order — never to compute durations; timeline events are not reliable timestamps for how long anything took. For step durations and review timing, use the release step endpoints instead.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get timeline events for a step config

Get timeline events for a step config in a release. Use these to see what happened and in what order — never to compute durations; timeline events are not reliable timestamps for how long anything took. For step durations and review timing, use the release step endpoints instead.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

stepConfigId
required
string

The id of the step config (FlightPaths). A step config defines a step in the release FlightPath.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Skip a Runway release

Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "isReleaseTagged": true,
  • "isKickedOff": true,
  • "isSubmitted": true,
  • "isReleased": true,
  • "createdAt": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releaseBranch": "release-1.0.0",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "kickedOffAt": "2022-03-02T01:15:00Z",
  • "submittedAt": "2022-03-02T01:15:00Z",
  • "releasedAt": "2022-03-02T01:15:00Z",
  • "rolloutCompletedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "regressionTestingStatus": {
    },
  • "releaseSummary": "string",
  • "workItems": [
    ],
  • "steps": [
    ],
  • "appStoreData": {
    },
  • "customMetadata": {}
}

Un-skip a Runway release

Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "isReleaseTagged": true,
  • "isKickedOff": true,
  • "isSubmitted": true,
  • "isReleased": true,
  • "createdAt": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releaseBranch": "release-1.0.0",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "kickedOffAt": "2022-03-02T01:15:00Z",
  • "submittedAt": "2022-03-02T01:15:00Z",
  • "releasedAt": "2022-03-02T01:15:00Z",
  • "rolloutCompletedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "regressionTestingStatus": {
    },
  • "releaseSummary": "string",
  • "workItems": [
    ],
  • "steps": [
    ],
  • "appStoreData": {
    },
  • "customMetadata": {}
}

Developer reject a build from submission

Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "isReleaseTagged": true,
  • "isKickedOff": true,
  • "isSubmitted": true,
  • "isReleased": true,
  • "createdAt": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releaseBranch": "release-1.0.0",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "kickedOffAt": "2022-03-02T01:15:00Z",
  • "submittedAt": "2022-03-02T01:15:00Z",
  • "releasedAt": "2022-03-02T01:15:00Z",
  • "rolloutCompletedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "regressionTestingStatus": {
    },
  • "releaseSummary": "string",
  • "workItems": [
    ],
  • "steps": [
    ],
  • "appStoreData": {
    },
  • "customMetadata": {}
}

Developer reject a build from submission for a step run

Developer reject a build from a specific app store submission, store-review, or release step run on a release. For FlightPath-enabled apps only. Returns the rejected step run (scoped to the targeted destination).

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

stepRunId
required
string

The id of the step run

Responses

Response samples

Content type
application/json
{
  • "stepId": null,
  • "type": "kickoff",
  • "displayName": "string",
  • "status": "ready",
  • "statusReasonString": "string",
  • "data": {
    },
  • "checklistItems": [
    ]
}

Manually submit a release to the app store

Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Update the regression testing status of a release

Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for updating a release's regression testing status

status
required
string (RegressionTestingStatusType)
Enum: "inProgress" "passed" "failed" "notStarted"

The updated status of the regression testing step

buildHash
string

The build hash of the RC build that regression testing is being performed on. Leave blank to use the latest successful RC build.

stepRunId
string

Required for workflow apps. The step run to update. Use stepRunId or stepConfigId for workflow apps.

stepConfigId
string

Required for workflow apps. Alternative to stepRunId - identifies the regression step config. Use stepRunId or stepConfigId for workflow apps.

Responses

Request samples

Content type
application/json
{
  • "status": "inProgress",
  • "buildHash": "string",
  • "stepRunId": "string",
  • "stepConfigId": "string"
}

Response samples

Content type
application/json
{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "isReleaseTagged": true,
  • "isKickedOff": true,
  • "isSubmitted": true,
  • "isReleased": true,
  • "createdAt": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releaseBranch": "release-1.0.0",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "kickedOffAt": "2022-03-02T01:15:00Z",
  • "submittedAt": "2022-03-02T01:15:00Z",
  • "releasedAt": "2022-03-02T01:15:00Z",
  • "rolloutCompletedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "regressionTestingStatus": {
    },
  • "releaseSummary": "string",
  • "workItems": [
    ],
  • "steps": [
    ],
  • "appStoreData": {
    },
  • "customMetadata": {}
}

List a release's feature flags

Returns all feature flags for a release, sourced from the app's connected feature flagging integration (LaunchDarkly, Statsig, or Optimizely). Each flag includes its id, name, current status (enabled/disabled/archived/paused), type, rollout percentage, targeting rules and variations, and whether it is read-only. Use a flag's id with the toggle endpoint to enable or disable it. Returns an empty array when the app has no feature flagging integration installed.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Enable or disable a feature flag

Enables or disables a single feature flag for a release. The change is propagated to the app's connected feature flagging provider (LaunchDarkly, Statsig, or Optimizely) and recorded on the release timeline. Obtain flagId from GET /app/{appId}/release/{releaseId}/featureFlags. Read-only flags cannot be toggled and return a 400. Returns 404 when no flag matches flagId (including when the app has no feature flagging integration installed). Returns the updated feature flag on success.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

flagId
required
string

The feature flag id to toggle (from GET /app/{appId}/release/{releaseId}/featureFlags).

Request Body schema: application/json
required

The request body for enabling or disabling a feature flag.

enabled
required
boolean

Set to true to enable the flag or false to disable it. This field is required; omitting it returns a 400.

Responses

Request samples

Content type
application/json
{
  • "enabled": true
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "enabledAt": "2019-08-24T14:15:22Z",
  • "isEstimatedEnabledAt": true,
  • "estimatedDisabledAt": "2019-08-24T14:15:22Z",
  • "minimumVersion": "string",
  • "maximumVersion": "string",
  • "equalVersions": [
    ],
  • "rolloutPercentage": 0,
  • "status": "enabled",
  • "type": "featureFlagOptimizelyExperiment",
  • "owner": "string",
  • "variations": [
    ],
  • "rules": [
    ],
  • "platforms": [
    ],
  • "url": "string",
  • "isReadOnly": true,
  • "isNewlyEnabledInThisVersion": true,
  • "isNewlyDisabledInThisVersion": true,
  • "isSpecificallyTargetingThisVersion": true,
  • "isSpecificallyNotTargetingThisVersion": true,
  • "didChangeInThisVersion": true,
  • "shouldHighlight": true,
  • "highlightTooltipText": "string"
}

Ignore or un-ignore Feature Readiness items

Mark one or more Feature Readiness items as ignored or un-ignored for a release. Ignored items no longer block the release from being considered ready.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

Request Body schema: application/json
required

The request body for ignoring or un-ignoring Feature Readiness items on a release

required
Array of objects

The list of Feature Readiness items to update

Responses

Request samples

Content type
application/json
{
  • "items": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

Search Feature Readiness items

Search the Feature Readiness work items on a release by keyword. Returns only items whose ticket identifier, ticket description, PR/commit title or message, author, or branch name contain the query string (case-insensitive). Returns an empty array when nothing matches. Use this instead of fetching the full featureReadiness step when you need to find items matching a specific ticket, author, or keyword.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

query Parameters
query
required
string

Case-insensitive substring to search for. Matched against ticket identifier, ticket description, PR/commit title or message, author, and branch name.

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "hasMore": true,
  • "total": 0
}

List fix requests on a release

Returns all non-deleted fix requests on a release. Each fix request includes its status (Pending/Approved/Rejected), the requester, current approvers, the form field settings and values, current and required approval counts, and the associated work items (PR/commit/ticket).

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a fix request

Create a new fix request on a release. The fix request targets one or more work items (PRs/commits/tickets) and carries answers to the app's configured form fields via formFieldsValues. Fetch the field ids and validation rules from GET /app/{appId}/fixRequestFormFieldsSettings. The call returns 400 if a required field is missing or a value is shorter than its configured minimum.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

Request Body schema: application/json
required

The request body for creating a fix request on a release. Provide either one or more workItems (whose ids come from the featureReadiness step) or a ticketKey for a pending-association ticket. Supply answers to the app's configured form fields via formFieldsValues — fetch the field ids and rules from GET /app/{appId}/fixRequestFormFieldsSettings. The call returns 400 if a required field is missing or a value is shorter than its configured minimum.

Array of objects (FixRequestFormFieldValue)

Values for the app's configured fix request form fields, each keyed by the field's fieldId (from GET /app/{appId}/fixRequestFormFieldsSettings).

ticketKey
string

Optional. Ticket key for a pending-association ticket to attach the fix to.

ticketUrl
string

Optional. Ticket URL when ticketKey is provided.

Array of objects

Work items to associate with the fix.

Responses

Request samples

Content type
application/json
{
  • "formFieldsValues": [
    ],
  • "ticketKey": "string",
  • "ticketUrl": "string",
  • "workItems": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "status": "Pending",
  • "source": "string",
  • "formFieldsSettings": [
    ],
  • "formFieldsValues": [
    ],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "deletedAt": "2019-08-24T14:15:22Z",
  • "statusUpdatedAt": "2019-08-24T14:15:22Z",
  • "currentApprovals": 0,
  • "requiredApprovals": 0,
  • "requester": {
    },
  • "approvers": [
    ],
  • "workItems": [
    ]
}

Get a fix request

Get the current state of a single fix request, including its status and approvers. Use this to check whether a fix has been approved or rejected.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

fixRequestId
required
string

The ID of the fix request.

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "status": "Pending",
  • "source": "string",
  • "formFieldsSettings": [
    ],
  • "formFieldsValues": [
    ],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "deletedAt": "2019-08-24T14:15:22Z",
  • "statusUpdatedAt": "2019-08-24T14:15:22Z",
  • "currentApprovals": 0,
  • "requiredApprovals": 0,
  • "requester": {
    },
  • "approvers": [
    ],
  • "workItems": [
    ]
}

Approve a fix request

Approve a fix request. The API key must have the UpdateFixRequestStatus user action. When the app requires multiple approvals, the fix stays in Pending until the required number of distinct approvers have approved.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

fixRequestId
required
string

The ID of the fix request.

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "status": "Pending",
  • "source": "string",
  • "formFieldsSettings": [
    ],
  • "formFieldsValues": [
    ],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "deletedAt": "2019-08-24T14:15:22Z",
  • "statusUpdatedAt": "2019-08-24T14:15:22Z",
  • "currentApprovals": 0,
  • "requiredApprovals": 0,
  • "requester": {
    },
  • "approvers": [
    ],
  • "workItems": [
    ]
}

Reject a fix request

Reject a fix request. The API key must have the UpdateFixRequestStatus user action.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

fixRequestId
required
string

The ID of the fix request.

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "status": "Pending",
  • "source": "string",
  • "formFieldsSettings": [
    ],
  • "formFieldsValues": [
    ],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "deletedAt": "2019-08-24T14:15:22Z",
  • "statusUpdatedAt": "2019-08-24T14:15:22Z",
  • "currentApprovals": 0,
  • "requiredApprovals": 0,
  • "requester": {
    },
  • "approvers": [
    ],
  • "workItems": [
    ]
}

Submit step run to app store

Manually submit a specific app store submission step run to the app store.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

stepRunId
required
string

The id of the step run

Request Body schema: application/json
optional

The request body for submit step run. All fields default to false when omitted.

shouldMatchPreviousPhasedRelease
boolean
Default: false

When true, match the previous release's phased rollout percentage on submission.

releasePreviousSubmissionToAllUsersFirst
boolean
Default: false

When true, release the previous submission to 100% of users before submitting this version.

releaseBetaTrackToFullPercentagePriorToSubmission
boolean
Default: false

When true (Google Play only), release the beta track to 100% before submitting.

Responses

Request samples

Content type
application/json
{
  • "shouldMatchPreviousPhasedRelease": false,
  • "releasePreviousSubmissionToAllUsersFirst": false,
  • "releaseBetaTrackToFullPercentagePriorToSubmission": false
}

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Update step run approval

Update the metadata or screenshots approval status of a specific step run in a release.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

stepRunId
required
string

The id of the step run

Request Body schema: application/json
required

The request body for updating a release's metadata or screenshots approval status

isApproved
required
boolean

The updated approval status of the metadata or screenshots for the release

Responses

Request samples

Content type
application/json
{
  • "isApproved": true
}

Response samples

Content type
application/json
{
  • "stepId": null,
  • "type": "kickoff",
  • "displayName": "string",
  • "status": "ready",
  • "statusReasonString": "string",
  • "data": {
    },
  • "checklistItems": [
    ]
}

Update regression step status

Update the regression testing status of a specific step run in a release.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

stepRunId
required
string

The id of the step run

Request Body schema: application/json
required

The request body for updating a release's regression testing status

status
required
string (RegressionTestingStatusType)
Enum: "inProgress" "passed" "failed" "notStarted"

The updated status of the regression testing step

buildHash
string

The build hash of the RC build that regression testing is being performed on. Leave blank to use the latest successful RC build.

stepRunId
string

Required for workflow apps. The step run to update. Use stepRunId or stepConfigId for workflow apps.

stepConfigId
string

Required for workflow apps. Alternative to stepRunId - identifies the regression step config. Use stepRunId or stepConfigId for workflow apps.

Responses

Request samples

Content type
application/json
{
  • "status": "inProgress",
  • "buildHash": "string",
  • "stepRunId": "string",
  • "stepConfigId": "string"
}

Response samples

Content type
application/json
{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "isReleaseTagged": true,
  • "isKickedOff": true,
  • "isSubmitted": true,
  • "isReleased": true,
  • "createdAt": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releaseBranch": "release-1.0.0",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "kickedOffAt": "2022-03-02T01:15:00Z",
  • "submittedAt": "2022-03-02T01:15:00Z",
  • "releasedAt": "2022-03-02T01:15:00Z",
  • "rolloutCompletedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "regressionTestingStatus": {
    },
  • "releaseSummary": "string",
  • "workItems": [
    ],
  • "steps": [
    ],
  • "appStoreData": {
    },
  • "customMetadata": {}
}

Trigger CI workflow for a release-candidate step

Trigger the CI build workflow for a release-candidate step run on a given release. This endpoint is for FlightPath enabled apps only, and the targeted step run must correspond to a step config of archetype releaseCandidate.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

stepRunId
required
string

The id of the step run

Responses

Response samples

Content type
application/json
{
  • "triggeredBuilds": [
    ],
  • "message": "string"
}

Set selected app store build for a step run

Set the selected app store build(s) for an app store submission step run. This endpoint is for FlightPath enabled apps only.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

stepRunId
required
string

The id of the step run

Request Body schema: application/json
required

The request body for setting the selected app store build(s) for a step run.

buildIds
required
Array of strings

The list of build IDs to select for this step run.

Responses

Request samples

Content type
application/json
{
  • "buildIds": [
    ]
}

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Update the metadata or screenshots approval status of a release

Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

stepType
required
string
Enum: "metadata" "screenshots"

The release step type

Request Body schema: application/json
required

The request body for updating a release's metadata or screenshots approval status

isApproved
required
boolean

The updated approval status of the metadata or screenshots for the release

Responses

Request samples

Content type
application/json
{
  • "isApproved": true
}

Response samples

Content type
application/json
{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "isReleaseTagged": true,
  • "isKickedOff": true,
  • "isSubmitted": true,
  • "isReleased": true,
  • "createdAt": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releaseBranch": "release-1.0.0",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "kickedOffAt": "2022-03-02T01:15:00Z",
  • "submittedAt": "2022-03-02T01:15:00Z",
  • "releasedAt": "2022-03-02T01:15:00Z",
  • "rolloutCompletedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "regressionTestingStatus": {
    },
  • "releaseSummary": "string",
  • "workItems": [
    ],
  • "steps": [
    ],
  • "appStoreData": {
    },
  • "customMetadata": {}
}

Generate AI release notes

Authorizations:
apiKey
path Parameters
releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

appId
required
string

The id of the app

notesType
required
string
Enum: "ai-generated-internal" "ai-generated-external"

The type of AI-generated release notes

stepType
required
string
Enum: "kickoff" "metadata" "release" "betaTesting"

The release step type

query Parameters
locale
string
Default: "en-US"
markdownSupported
boolean
Default: false

Responses

Response samples

Content type
application/json
{
  • "content": "string"
}

Checklist item

Operations to checklist items

Create step checklist item

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for creating a new step checklist item

title
required
string

Title of the checklist item

description
string

Description of the checklist item

releaseStep
required
string (ReleaseStepType)
Enum: "kickoff" "featureReadiness" "releaseCandidate" "regressionTesting" "betaTesting" "metadata" "screenshots" "approvals" "submission" "storeReview" "takeoff" "ciDistribution"

The release step that the checklist item appears on

approverGroups
Array of strings (UserGroup)
Items Enum: "pilot" "engineer" "pm" "qa" "design" "em" "marketing" "cx" "ops" "approver"

The list of user groups that can approve this checklist item. Custom groups can be included as well

owners
Array of strings

List of user ids allowed to approve item

notifyEnabled
boolean

Will send a notification when approval is updated.

oneOffForVersion
string

Nullable, checklist item will only appear in this version

stepConfigId
string

Nullable, target a specific step config by ID

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "description": "string",
  • "releaseStep": "kickoff",
  • "approverGroups": [
    ],
  • "owners": [
    ],
  • "notifyEnabled": true,
  • "oneOffForVersion": "string",
  • "stepConfigId": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Get checklist item

Get a checklist item by ID. Supports both legacy checklist-settings and workflows-aware item templates/items.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

checklistItemId
required
string

The id of the checklist item, approval item or regression testing item being fetched / updated

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Update checklist item

Update a checklist item by ID. Supports both legacy checklist-settings and workflows-aware item templates/items.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

checklistItemId
required
string

The id of the checklist item, approval item or regression testing item being fetched / updated

Request Body schema: application/json
required

The request body to update a checklist item template or instance

title
string

Title of the checklist item

description
string

Description of the checklist item

approverGroups
Array of strings (UserGroup)
Items Enum: "pilot" "engineer" "pm" "qa" "design" "em" "marketing" "cx" "ops" "approver"

The list of user groups that can approve this checklist item. Custom groups can be included as well

owners
Array of strings

List of user ids allowed to approve item

notifyEnabled
boolean

Will send a notification when approval is updated.

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "description": "string",
  • "approverGroups": [
    ],
  • "owners": [
    ],
  • "notifyEnabled": true
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Update status for item

This endpoint can be used to update the status on Checklist items, Approval items and Regression Testing items.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

checklistItemId
required
string

The id of the checklist item, approval item or regression testing item being fetched / updated

Request Body schema: application/json
required

The request body to update the status of a checklist item, approval item or regression testing item

status
string (ChecklistItemStatusType)
Enum: "approved" "rejected" "inProgress" "blocked" "passed" "failed"

The checklist item's updated status. Pass null to clear the status.

Responses

Request samples

Content type
application/json
{
  • "status": "approved"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Update comment for item

This endpoint can be used to update the comment on Checklist items, Approval items and Regression Testing items.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

checklistItemId
required
string

The id of the checklist item, approval item or regression testing item being fetched / updated

Request Body schema: application/json
required

The request body to update the comment of a checklist item, approval item or regression testing item

comment
string

The checklist item's updated comment.

Responses

Request samples

Content type
application/json
{
  • "comment": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Approval items

Operations to approval items

Create approval item

Creates a new approval item for the app. For apps using FlightPaths with multiple destinations (e.g., separate iOS and Android approval steps), include stepConfigId in the request body to specify which approvals step the item belongs to. When omitted, the first available approvals step is used, which can be ambiguous in multi-destination FlightPaths. One-off items on FlightPaths apps can be created with an initial status.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for creating a new approval or regression testing item

title
required
string

Title of the approval or regression testing item

description
string

Description of the approval or regression testing item

approverGroups
Array of strings (UserGroup)
Items Enum: "pilot" "engineer" "pm" "qa" "design" "em" "marketing" "cx" "ops" "approver"

The list of user groups that can approve or update this item

owners
Array of strings

List of user ids allowed to approve or update item

notifyEnabled
boolean

Will send a notification when item is updated.

oneOffForVersion
string

Nullable, approval or regression testing item will only appear in this version

stepConfigId
string

Nullable - if using FlightPaths, the id of a specific approvals or regression testing step config for which to create the item

status
string (ChecklistItemStatusType)
Enum: "approved" "rejected" "inProgress" "blocked" "passed" "failed"

Optional initial status for the item, so callers that already know the outcome (e.g. an automated test suite) don't need a follow-up status update. Only supported for one-off items (oneOffForVersion must be set) on apps using FlightPaths. Must be valid for the item's placement: inProgress, blocked, failed or passed for regression testing items; inProgress, blocked, rejected or approved for approval items. Setting failed on a regression testing item creates a triage issue when Triage is enabled. Notifications are not sent for a status set at creation.

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "description": "string",
  • "approverGroups": [
    ],
  • "owners": [
    ],
  • "notifyEnabled": true,
  • "oneOffForVersion": "string",
  • "stepConfigId": "string",
  • "status": "approved"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Update status for item

This endpoint can be used to update the status on Checklist items, Approval items and Regression Testing items.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

checklistItemId
required
string

The id of the checklist item, approval item or regression testing item being fetched / updated

Request Body schema: application/json
required

The request body to update the status of a checklist item, approval item or regression testing item

status
string (ChecklistItemStatusType)
Enum: "approved" "rejected" "inProgress" "blocked" "passed" "failed"

The checklist item's updated status. Pass null to clear the status.

Responses

Request samples

Content type
application/json
{
  • "status": "approved"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Update comment for item

This endpoint can be used to update the comment on Checklist items, Approval items and Regression Testing items.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

checklistItemId
required
string

The id of the checklist item, approval item or regression testing item being fetched / updated

Request Body schema: application/json
required

The request body to update the comment of a checklist item, approval item or regression testing item

comment
string

The checklist item's updated comment.

Responses

Request samples

Content type
application/json
{
  • "comment": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Regression testing items

Operations to regression testing items

Create regression testing item

Creates a new regression testing item for the app. For apps using FlightPaths with multiple destinations (e.g., separate iOS and Android regression testing steps), include stepConfigId in the request body to specify which regression testing step the item belongs to. When omitted, the first available regression testing step is used, which can be ambiguous in multi-destination FlightPaths. One-off items on FlightPaths apps can be created with an initial status.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for creating a new approval or regression testing item

title
required
string

Title of the approval or regression testing item

description
string

Description of the approval or regression testing item

approverGroups
Array of strings (UserGroup)
Items Enum: "pilot" "engineer" "pm" "qa" "design" "em" "marketing" "cx" "ops" "approver"

The list of user groups that can approve or update this item

owners
Array of strings

List of user ids allowed to approve or update item

notifyEnabled
boolean

Will send a notification when item is updated.

oneOffForVersion
string

Nullable, approval or regression testing item will only appear in this version

stepConfigId
string

Nullable - if using FlightPaths, the id of a specific approvals or regression testing step config for which to create the item

status
string (ChecklistItemStatusType)
Enum: "approved" "rejected" "inProgress" "blocked" "passed" "failed"

Optional initial status for the item, so callers that already know the outcome (e.g. an automated test suite) don't need a follow-up status update. Only supported for one-off items (oneOffForVersion must be set) on apps using FlightPaths. Must be valid for the item's placement: inProgress, blocked, failed or passed for regression testing items; inProgress, blocked, rejected or approved for approval items. Setting failed on a regression testing item creates a triage issue when Triage is enabled. Notifications are not sent for a status set at creation.

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "description": "string",
  • "approverGroups": [
    ],
  • "owners": [
    ],
  • "notifyEnabled": true,
  • "oneOffForVersion": "string",
  • "stepConfigId": "string",
  • "status": "approved"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Create regression testing items in batch

Attempts to create each regression testing item in the request and continues when individual items fail. The response includes both successfully created items and per-item errors. For apps using FlightPaths with multiple destinations, include stepConfigId on each item when the target regression step would otherwise be ambiguous. One-off items (oneOffForVersion set) on FlightPaths apps can be created with an initial status, which avoids a separate status update per item; items whose status is invalid are reported in errors and the rest are still created.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for creating multiple regression testing items

required
Array of objects (CreateApprovalOrRegressionTestingItemRequestBody)

The regression testing items to create. The API attempts every item and returns both created items and per-item errors.

Responses

Request samples

Content type
application/json
{
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "requestedCount": 0,
  • "createdCount": 0,
  • "errorCount": 0,
  • "createdItems": [
    ],
  • "errors": [
    ]
}

Update regression testing item statuses in batch

Sets the status of up to 200 existing regression testing items in one request, for example after re-running a test suite against a new build. Identify items by the id returned when they were created. Each item is validated independently: invalid items are reported in errors and the rest are still updated. Only supported for apps using FlightPaths. Sending an item's current status again is accepted and refreshes who set it and when.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for updating the status of multiple regression testing items

required
Array of objects (UpdateRegressionItemStatusRequestItem) <= 200 items

The regression testing items to update, at most 200. Each id may appear once.

Responses

Request samples

Content type
application/json
{
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "requestedCount": 0,
  • "updatedCount": 0,
  • "errorCount": 0,
  • "updatedItems": [
    ],
  • "errors": [
    ]
}

Delete regression testing items in batch

Deletes up to 200 regression testing items in one request, identified by the id returned when they were created. Only the release's item is removed: items that repeat on every release still appear on future releases. Each id is validated independently: ids that are missing, repeated, unknown, already deleted, or not regression testing items are reported in errors, and the rest are still deleted. The remaining items keep their order. Only supported for apps using Flightpaths.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for deleting multiple regression testing items

ids
required
Array of strings <= 200 items

Ids of the regression testing items to delete, at most 200. Each id may appear once.

Responses

Request samples

Content type
application/json
{
  • "ids": [
    ]
}

Response samples

Content type
application/json
{
  • "requestedCount": 0,
  • "deletedCount": 0,
  • "errorCount": 0,
  • "deletedIds": [
    ],
  • "errors": [
    ]
}

Update status for item

This endpoint can be used to update the status on Checklist items, Approval items and Regression Testing items.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

checklistItemId
required
string

The id of the checklist item, approval item or regression testing item being fetched / updated

Request Body schema: application/json
required

The request body to update the status of a checklist item, approval item or regression testing item

status
string (ChecklistItemStatusType)
Enum: "approved" "rejected" "inProgress" "blocked" "passed" "failed"

The checklist item's updated status. Pass null to clear the status.

Responses

Request samples

Content type
application/json
{
  • "status": "approved"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Update comment for item

This endpoint can be used to update the comment on Checklist items, Approval items and Regression Testing items.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

releaseId
required
string

The id of the release. Constructed from the app's id and the release version like so: {appId}:{version}. For the GET single release endpoint, the following keywords are also accepted: live (latest completed release), next or current (current active release).

checklistItemId
required
string

The id of the checklist item, approval item or regression testing item being fetched / updated

Request Body schema: application/json
required

The request body to update the comment of a checklist item, approval item or regression testing item

comment
string

The checklist item's updated comment.

Responses

Request samples

Content type
application/json
{
  • "comment": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

Triage issues

Operations to triage issues

Create a triage issue

Creates a new triage issue on the app. Requires Triage to be enabled on the app.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for creating a new triage issue

description
string

Optional description of the triage issue

reporter
string

Email of the user reporting the issue. Required unless the request is authenticated as a Runway user, in which case it defaults to that user

title
required
string

Title for the issue.

version
string

Optional version string the issue applies to

build
string

Optional build identifier the issue applies to

Responses

Request samples

Content type
application/json
{
  • "description": "string",
  • "reporter": "string",
  • "title": "string",
  • "version": "string",
  • "build": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "appId": "string",
  • "title": "string",
  • "state": "new",
  • "reporter": "string",
  • "assigneeUserIds": [
    ],
  • "suggestedAssigneeUserIds": [
    ],
  • "sources": [
    ],
  • "relatedIssueIds": [
    ],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

List triage issues for an app

Returns a page of triage issues for the app. Requires Triage to be enabled on the app. Results are paginated: use hasMore and total in the response to page through with limit and offset.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

query Parameters
version
string

Filter to issues matching this version (e.g. "1.2.3") — either one of the issue's sources is on that version, or the issue's fix is targeting it

statusGroup
string
Enum: "open" "closed"

Filter to all open states (new, assigned, fixRequested, fixApproved, reopened) or all closed ones (fixMerged, fixRejected, notAPriority)

status
string
Enum: "new" "assigned" "fixRequested" "fixApproved" "reopened" "fixMerged" "fixRejected" "notAPriority"

Filter by a single exact issue state. To match all open or all closed issues, use statusGroup instead

source
string
Enum: "runway" "pmTicket" "userReviews" "betaFeedback" "regressionTesting" "healthMetrics"

Filter to issues that have at least one source of this type

owner
string

Filter to issues assigned to this user (email) or user group

reporter
string

Filter to issues reported by this user (email)

destination
string

Filter to issues that apply to this destination, given as the destination's step config id. An issue applies to a destination when its release version targets that destination (not skipped); issues without a version apply to all destinations.

search
string

Free-text, case-insensitive substring match over the issue's id, title, description, and its sources' text (ticket key/title, failed test case name, review text, reporter)

limit
integer
Default: 20

For pagination, the maximum number of issues to return

offset
integer
Default: 0

For pagination, the number of issues to skip

Responses

Response samples

Content type
application/json
{
  • "issues": [
    ],
  • "hasMore": true,
  • "total": 0,
  • "openCount": 0,
  • "closedCount": 0
}

Get a triage issue

Returns a single triage issue with all of its sources. Requires Triage to be enabled on the app. Returns 400 if no issue with that id exists on the app.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

issueId
required
string

The triage issue id

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "appId": "string",
  • "title": "string",
  • "state": "new",
  • "reporter": "string",
  • "assigneeUserIds": [
    ],
  • "suggestedAssigneeUserIds": [
    ],
  • "sources": [
    ],
  • "relatedIssueIds": [
    ],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Request a fix for a triage issue

Escalates an existing triage issue to a fix request on the given release: the issue moves to fixRequested and a fix request is created on that release to carry the work. Requires Triage to be enabled on the app.

A fix maps to a single feature readiness item, so workItems takes at most one code item (PR or commit) and at most one ticket — anything more returns 400. At least one work item is required unless the app's "create PM ticket on triage issue fix request" automation is enabled, in which case a ticket is created and associated automatically. The call returns 400 if the selected code or ticket is already associated with another fix on that release.

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

issueId
required
string

The triage issue id

Request Body schema: application/json
required

The request body for escalating a triage issue to a fix request on a release. workItems takes at most one code item (PR or commit) and at most one ticket; a ticket that isn't on the release yet can be passed by ticketKey alone and Runway pulls it in. Supply answers to the app's configured fix request form fields via formFieldsValues — fetch the field ids and rules from GET /app/{appId}/fixRequestFormFieldsSettings.

version
required
string

The release the fix should land in (e.g. "1.2.3")

Array of objects (FixRequestFormFieldValue)

Values for the app's configured fix request form fields, each keyed by the field's fieldId (from GET /app/{appId}/fixRequestFormFieldsSettings).

Array of objects

The work that fixes the issue: at most one code item (PR or commit) and at most one ticket.

Responses

Request samples

Content type
application/json
{
  • "version": "string",
  • "formFieldsValues": [
    ],
  • "workItems": [
    ]
}

Response samples

Content type
application/json
{
  • "issue": {
    },
  • "version": "string",
  • "fixRequestId": "string"
}

Build Distro

Operations to Build Distro models

Create a bucket

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Request Body schema: application/json
required

The request body for creating a new bucket

name
required
string

The name of the bucket

orgWideAccessEnabled
required
boolean

Whether or not the bucket should have org-wide access enabled

notificationsEnabled
required
boolean

Whether or not the bucket should have notifications enabled

required
Array of objects (BucketRule)
required
Array of objects (BucketMember)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "orgWideAccessEnabled": true,
  • "notificationsEnabled": true,
  • "rules": [
    ],
  • "members": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "12345",
  • "name": "CIs",
  • "type": "custom",
  • "rules": {
    },
  • "members": [
    ],
  • "orgWideAccessEnabled": true,
  • "status": "active",
  • "notificationsEnabled": true,
  • "notifications": [
    ],
  • "createdAt": "2022-03-02T01:15:00Z",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "automations": [
    ],
  • "archivedAt": "2022-03-02T01:15:00Z",
  • "totalBuildsCount": 0
}

List all buckets

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get a bucket's details

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

bucketId
required
string

The id of the bucket

Responses

Response samples

Content type
application/json
{
  • "id": "12345",
  • "name": "CIs",
  • "type": "custom",
  • "rules": {
    },
  • "members": [
    ],
  • "orgWideAccessEnabled": true,
  • "status": "active",
  • "notificationsEnabled": true,
  • "notifications": [
    ],
  • "createdAt": "2022-03-02T01:15:00Z",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "automations": [
    ],
  • "archivedAt": "2022-03-02T01:15:00Z",
  • "totalBuildsCount": 0
}

Update a bucket

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

bucketId
required
string

The id of the bucket

Request Body schema: application/json
required

Update the properties of a bucket

name
string

The name of the bucket

status
string (BucketStatus)
Enum: "active" "archived"

The status of the bucket

orgWideAccessEnabled
boolean

Whether or not the bucket should have org-wide access enabled

notificationsEnabled
boolean

Whether or not the bucket should have notifications enabled

Array of objects (BucketRule)
Array of objects (BucketMember)
Array of objects (NotificationEntity)
Array of objects (AutomationEntity)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "status": "active",
  • "orgWideAccessEnabled": true,
  • "notificationsEnabled": true,
  • "rules": [
    ],
  • "members": [
    ],
  • "notifications": [
    ],
  • "automations": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "12345",
  • "name": "CIs",
  • "type": "custom",
  • "rules": {
    },
  • "members": [
    ],
  • "orgWideAccessEnabled": true,
  • "status": "active",
  • "notificationsEnabled": true,
  • "notifications": [
    ],
  • "createdAt": "2022-03-02T01:15:00Z",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "automations": [
    ],
  • "archivedAt": "2022-03-02T01:15:00Z",
  • "totalBuildsCount": 0
}

Get a bucket's builds

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

bucketId
required
string

The id of the bucket

query Parameters
limit
integer
Default: 20

For pagination, the maximum number of builds to return

offset
integer
Default: 0

For pagination, the number of builds to skip before returning the first release

Responses

Response samples

Content type
application/json
[]

Get a bucket build's details

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

bucketId
required
string

The id of the bucket

buildDistroBuildId
required
string

The id of the Build Distro build

Responses

Response samples

Content type
application/json
{}

Update a build's details

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

bucketId
required
string

The id of the bucket

buildDistroBuildId
required
string

The id of the Build Distro build

Request Body schema: application/json
required

The request body for updating the details of a Build Distro build

status
string (BuildDistroBuildStatus)
Enum: "active" "expired" "deleted"
testerNotes
string

The tester notes for the build

Array of objects (BuildDistroBuildTester)

Any additional users or user groups assigned as testers for the build. Bucket members of the bucket this build is in are not included in the additional testers list.

Responses

Request samples

Content type
application/json
{
  • "status": "active",
  • "testerNotes": "string",
  • "additionalTesters": [
    ]
}

Response samples

Content type
application/json
{}

Delete a build

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

bucketId
required
string

The id of the bucket

buildDistroBuildId
required
string

The id of the Build Distro build

Responses

Response samples

Content type
application/json
{}

Download a bucket build

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

bucketId
required
string

The id of the bucket

buildDistroBuildId
required
string

The id of the Build Distro build

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Upload a build to a bucket

Please note the unique upload server URL for this endpoint.

The binary file must be included in a 'file' field as form data. Please see below for an example curl request:

curl -X POST \
    -F "file=@example.ipa" \
    -F 'data={"testerNotes":"optional tester notes"}'  \
    -H "X-API-KEY:API-KEY" \
    https://upload-api.runway.team/v1/app/{appId}/bucket/{bucketId}/build
Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

bucketId
required
string

The id of the bucket

Request Body schema: multipart/form-data

The request body for uploading a new Build Distro build

file
required
string <binary>
object (BuildDistroBuildUploadRequestFormData)

Responses

Response samples

Content type
application/json
{}

Attach a file to a build

Please note the unique upload server URL for this endpoint.

The file must be included in a 'file' field as form data. Please see below for an example curl request:

curl -X POST \
    -F "file=@test_results.html" \
    -F 'data={"fileName":"user friendly file name"}'  \
    -H "X-API-KEY:API-KEY" \
    https://upload-api.runway.team/v1/app/{appId}/bucket/{bucketId}/build/{buildDistroBuildId}/additionalFiles
Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

bucketId
required
string

The id of the bucket

buildDistroBuildId
required
string

The id of the Build Distro build

Request Body schema: multipart/form-data

The request body for uploading an additional file to a Build Distro build

file
required
string <binary>
object (BuildDistroBuildAdditionalFileUploadRequestFormData)

Responses

Response samples

Content type
application/json
{}

Download an additional file for a bucket build

Authorizations:
apiKey
path Parameters
appId
required
string

The id of the app

bucketId
required
string

The id of the bucket

buildDistroBuildId
required
string

The id of the Build Distro build

fileName
required
string

The file name of the additional file

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Available tools

Runway exposes a remote MCP (Model Context Protocol) server that lets LLM clients drive Runway on your team's behalf. The tools below are the actions an MCP client can invoke; most are thin wrappers around the REST API endpoints documented in the other sections.

App & org

  • get_app — Get app details.

  • get_org — Get organization details.

  • get_schedule_cadence — Get the app's release cadence (weekly / biweekly / monthly), target kickoff / submit / release day-and-time, and timezone.

  • get_lifecycle_freezes — Get the app's configured lifecycle freeze/code freeze date ranges and affected release lifecycle events.

  • get_org_metrics — Cross-app, cross-release aggregate metrics for the whole org over a historical date range (release durations, review rejection rates, build counts, etc.).

  • list_apps — List all apps in an org.

  • list_integrations — List integrations installed on an app (CI providers, app stores, VCS, etc.).

User groups

  • list_user_groups — List user groups for an org.

  • get_user_group — Get user group details.

  • create_user_group — Create a user group.

  • update_user_group — Update a user group.

  • delete_group — Delete a user group.

Releases

  • list_releases — List releases for an app (basic release-level info only).

  • get_release — Get release details.

  • get_release_schedule — Get concrete target dates, status, and release pilot for past, current, and predicted future releases. Optionally filter by version.

  • create_release — Create a release.

  • update_release — Update a release.

  • delete_release — Delete a release.

  • skip_release — Skip a release.

  • unskip_release — Unskip a release.

  • get_release_timeline_events — Get timeline events for a release. Use these to see what happened and in what order — never to compute durations; get review timing from get_release_step.

  • search_feature_readiness_items — Search Feature Readiness work items on a release by keyword.

  • find_recent_releases_by_work_item — Find recent releases that contain a specific work item (PR, commit, or ticket).

  • release_custom_metadata — Read or update the custom metadata attached to a release: a map of a human-readable title to any-JSON value (e.g. an incident link or experiment id), where the title is the entry's identity. Set operation to get to read, or set to upsert entries by title (map a title to null to delete it); this is unrelated to App Store listing metadata.

Release steps

  • update_release_approval — Approve or unapprove metadata / screenshots on a release.

  • update_release_metadata — Update App Store / Play Store listing metadata (release notes, keywords, description, etc.) per locale.

  • developer_reject_submission — Cancel / pull back / developer-reject a build that's been submitted to the store but not yet released.

  • trigger_ci_workflow — Trigger (start / run / kick off) the CI build workflow for a release's release-candidate (CI) step. FlightPaths-enabled apps only.

  • update_regression_status — Update the regression testing status of a release.

  • ignore_unignore_feature_readiness_items — Ignore or un-ignore Feature Readiness work items on a release.

  • list_release_steps — Lightweight list of steps for a release (returns each step's id, archetype, status).

  • get_release_step — Get details for a release step by archetype. The shape of the returned data depends on the archetype:

    • Feature readiness — work items tracked for the release, including project management tickets and pull request (PR) info.
    • Release candidate — CI build info: each build's number, status, artifacts, and branch / commit info (most recent first).
    • Release — info about store release: submittedAt, startedReviewAt, approvedAt, markedRejectedAt, releasedAt, plus the precomputed waitingForReviewSeconds (queued before review started) and timeInReviewSeconds (under review).
    • Regression testing — regressionItems and testRuns from the connected regression integration.
    • Approvals — metadata / screenshots approval state via approvalItems.
    • Rollout — releaseAdoptionRate, phasedRelease (rollout percentage via userFraction, state, dayNumber, startDate), appStoreReviewData (average rating, total ratings count, surfaced user review issues), and monitoringStatistics (crash-free users, crash-free sessions, custom metrics — each with currentValue, delta, previousValue, monitoringMetricStatus).

Feature flags

  • get_release_feature_flags — Get all feature flags relevant to a release, including status, version targeting, rollout percentage, variations, rules, and per-version change signals.

  • toggle_release_feature_flag — Enable or disable a feature flag for a release. The change is propagated to the underlying feature flag provider and affects production.

Checklist items

  • list_release_checklist_items — List all checklist items on a release.

  • get_checklist_item — Get checklist item details.

  • create_checklist_item — Create a generic step checklist item (non-regression, non-approval).

  • create_approval — Create an approval item.

  • create_regression_items — Create one or more regression testing items.

  • create_regression_step_checklist_item — Create a checklist item on the regression testing step.

  • update_checklist_item_status — Update a checklist item's status.

  • update_checklist_item_comment — Update a checklist item's comment.

Fix requests

  • list_fix_requests — List the fix requests on a release (status, requester, approvals, the work items each covers).

  • get_fix_request — Get a single fix request's current state (status, requester, approvals still needed).

  • get_fix_request_form_fields_settings — Get the app's configured fix request form fields (their ids, and any required / minimum-length rules) needed to create a fix request.

  • create_fix_request — Create a fix request on a release, flagging a PR, commit, or ticket as a fix that needs to land; pass answers to the app's form fields via formFieldsValues.

  • approve_fix_request — Approve a fix request on a release.

  • reject_fix_request — Reject a fix request on a release.

Build Distro

  • list_build_buckets — List Build Distro buckets for an app.

  • get_build_bucket — Get a Build Distro bucket.

  • create_build_bucket — Create a Build Distro bucket.

  • update_build_bucket — Update a Build Distro bucket.

  • list_bucket_builds — List builds in a Build Distro bucket.

  • get_bucket_build — Get a Build Distro build.

  • update_bucket_build — Update a Build Distro build.

  • delete_build — Delete a build from a Build Distro bucket.

  • list_integration_builds — List builds uploaded to a Custom CI (MRM) integration for a release.

  • get_custom_ci_build_artifact_download — Get a signed download URL for the primary binary artifact of a Custom CI (MRM) build.

  • get_custom_ci_build_additional_file_download — Get a signed download URL for a supplemental file attached to a Custom CI build.

  • download_latest_ci_build_artifact — Get a signed download URL for an artifact from the newest build on a CI step.

Triage

Requires Triage to be enabled on the app.

  • create_triage_issue — Create a triage issue on an app.

  • list_triage_issues — List triage issues for an app, with optional filters for version (to scope to a release), status, source, owner, reporter, destination, and a free-text search.

  • get_triage_issue — Get a single triage issue by id, with all of its sources.

  • create_fix_request_on_triage_issue — Create a fix request on an existing triage issue: the issue moves to fixRequested and a fix request is created on the target release.

Schedule cadence

  • update_scheduled_automation — Enable or disable a scheduled release automation (kickoff, submit, release, halt, promote, resume_rollout).

  • update_lifecycle_freezes — Replace only the app's configured lifecycle freeze/code freeze date ranges, without changing schedule cadence.

  • set_automation_pause — Temporarily pause or resume an app's automations (reversible — e.g. during a hotfix, code freeze, or incident). Distinct from update_scheduled_automation, which changes an automation's saved enabled/disabled config.

Webhooks

Operations to webhooks

release.kickedOff Webhook

When a release is kicked off. All platforms.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    }
}

release.submitted Webhook

When an app update was submitted for review. iOS and Android platforms only.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    }
}

release.released Webhook

When an app update was released to users. iOS and OTA platforms only.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    }
}

release.created Webhook

When a new release was drafted in Runway. All platforms.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    }
}

release.targetDateUpdated Webhook

When target dates were updated for the release. All platforms.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    }
}

release.pilotChanged Webhook

When the release pilot for a release was changed. All platforms.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    }
}

release.regressionStatusUpdated Webhook

When the regression status in a release is updated.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    }
}

release.kickoffReminder Webhook

When a reminder is sent that your release is scheduled to be kicked off soon. All platforms.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    }
}

release.submitReminder Webhook

When a reminder is sent that your update is scheduled to be submitted for review soon. iOS and Android platforms only.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    }
}

release.releaseReminder Webhook

When a reminder is sent that your update is scheduled to be released soon. iOS platforms only.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    }
}

release.stepsReadyToSubmit Webhook

When all required release steps are complete; your app update is ready to submit for review. iOS and Android platforms only.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Array of objects (ReleaseStepEntity)

The release step(s) that were affected

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "releaseSteps": [
    ]
}

release.stepsReadyToRelease Webhook

When all required release steps are complete; your app update is ready to release. iOS platforms only.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Array of objects (ReleaseStepEntity)

The release step(s) that were affected

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "releaseSteps": [
    ]
}

releaseStep.statusChanged Webhook

When the status of a release step in Runway has changed. All platforms.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Array of objects (ReleaseStepEntity)

The release step(s) that were affected

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "releaseSteps": [
    ]
}

appStoreVersion.statusUpdated Webhook

When the status of an app store version has changed. iOS and Android platforms only.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

object or object (AppStoreVersionData)

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "appStoreVersionData": {
    }
}

appStoreVersion.phasedReleaseUpdated Webhook

When the status of a phased/staged rollout has changed. iOS and Android platforms only.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

object or object (AppStoreVersionData)

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "appStoreVersionData": {
    }
}

checklistItem.statusChanged Webhook

When the status of a checklist item, regression testing item, or approval item has changed. All platforms.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

object (ChecklistItemEntity)

The checklist item that was affected

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "checklistItem": {
    }
}

buildDistro.newBuildAvailable Webhook

When a new Build Distro build is available in a given bucket

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (BuildDistroBuildEntity)

The details of a Build Distro build

Responses

Request samples

Content type
application/json
{}

buildDistro.buildArtifactAvailable Webhook

When the artifact of a new Build Distro build is available for download

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (BuildDistroBuildEntity)

The details of a Build Distro build

Responses

Request samples

Content type
application/json
{}

ciBuild.statusChanged Webhook

When the status of a CI build changes.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

object (CIBuildEntity)

The build whose status changed

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "build": {
    }
}

ciBuild.appStoreBuildAssociated Webhook

When an app store build is found and associated with a CI build

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

object (CIBuildEntity)

The build whose status changed

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "build": {
    }
}

appStoreBuild.newBuildAvailable Webhook

When a new app store build has been found. iOS and Android platforms only.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

version
string

The version of the app store build

object (AppStoreBuildEntity)

The app store build that was found

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "version": "string",
  • "appStoreBuild": {
    }
}

fixRequest.created Webhook

When a fix request is created on a release.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (WebhookFixRequestReleaseEntity)

The release containing the fix request. This release shape is compatible with both legacy and Flightpath apps.

object (WebhookFixRequestStepRunEntity)

The Flightpath step run containing the fix request. Omitted for legacy apps.

object (WebhookFixRequestEntity)

The fix request affected by the event.

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "stepRun": {
    },
  • "fixRequest": {
    }
}

fixRequest.approved Webhook

When a fix request receives the required number of approvals.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (WebhookFixRequestReleaseEntity)

The release containing the fix request. This release shape is compatible with both legacy and Flightpath apps.

object (WebhookFixRequestStepRunEntity)

The Flightpath step run containing the fix request. Omitted for legacy apps.

object (WebhookFixRequestEntity)

The fix request affected by the event.

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "stepRun": {
    },
  • "fixRequest": {
    }
}

fixRequest.rejected Webhook

When a fix request is rejected.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (WebhookFixRequestReleaseEntity)

The release containing the fix request. This release shape is compatible with both legacy and Flightpath apps.

object (WebhookFixRequestStepRunEntity)

The Flightpath step run containing the fix request. Omitted for legacy apps.

object (WebhookFixRequestEntity)

The fix request affected by the event.

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "stepRun": {
    },
  • "fixRequest": {
    }
}

fixRequest.merged Webhook

When all code changes for a fix request are merged into the release branch.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

object (WebhookFixRequestReleaseEntity)

The release containing the fix request. This release shape is compatible with both legacy and Flightpath apps.

object (WebhookFixRequestStepRunEntity)

The Flightpath step run containing the fix request. Omitted for legacy apps.

object (WebhookFixRequestEntity)

The fix request affected by the event.

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "release": {
    },
  • "stepRun": {
    },
  • "fixRequest": {
    }
}

betaBuild.newBuildAvailable Webhook

When a new beta build has been found. iOS and Android platforms only.

Authorizations:
apiKey
Request Body schema: application/json
eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

object (AppEntity)

The app that the event occurred on

version
string

The version of the app store build

object (AppStoreBuildEntity)

The app store build that was found

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "wasAutomatedByRunway": true,
  • "app": {
    },
  • "version": "string",
  • "appStoreBuild": {
    }
}

WebhookPayload

eventType
required
string

The type of event that was sent

wasAutomatedByRunway
required
boolean

True if the event happened as a result of an action automated by Runway

{
  • "eventType": "string",
  • "wasAutomatedByRunway": true
}

WebhookReleasePayload

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

{
  • "app": {
    },
  • "release": {
    }
}

WebhookChecklistItemPayload

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

object (ChecklistItemEntity)

The checklist item that was affected

{
  • "app": {
    },
  • "release": {
    },
  • "checklistItem": {
    }
}

WebhookAppStoreVersionDataPayload

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

object or object (AppStoreVersionData)
{
  • "app": {
    },
  • "release": {
    },
  • "appStoreVersionData": {
    }
}

WebhookReleaseStepsPayload

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

Array of objects (ReleaseStepEntity)

The release step(s) that were affected

{
  • "app": {
    },
  • "release": {
    },
  • "releaseSteps": [
    ]
}

WebhookCIBuildPayload

object (AppEntity)

The app that the event occurred on

object (ReleaseEntity)

The release that the event occurred on

object (CIBuildEntity)

The build whose status changed

{
  • "app": {
    },
  • "release": {
    },
  • "build": {
    }
}

WebhookBuildDistroBuildPayload

object (BuildDistroBuildEntity)

The details of a Build Distro build

{}

WebhookAppStoreBuildPayload

object (AppEntity)

The app that the event occurred on

version
string

The version of the app store build

object (AppStoreBuildEntity)

The app store build that was found

{
  • "app": {
    },
  • "version": "string",
  • "appStoreBuild": {
    }
}

WebhookFixRequestPayload

object (AppEntity)

The app that the event occurred on

object (WebhookFixRequestReleaseEntity)

The release containing the fix request. This release shape is compatible with both legacy and Flightpath apps.

object (WebhookFixRequestStepRunEntity)

The Flightpath step run containing the fix request. Omitted for legacy apps.

object (WebhookFixRequestEntity)

The fix request affected by the event.

{
  • "app": {
    },
  • "release": {
    },
  • "stepRun": {
    },
  • "fixRequest": {
    }
}

AppEntity

id
required
string

The id of the app entity

appName
required
string

The name of the app

platform
required
string (AppPlatform)
Enum: "ios" "android" "ios-sdk" "android-sdk" "react-native-ota"

The app's platform

createdAt
required
string <date-time>
{
  • "id": "fake-app",
  • "appName": "Fake app",
  • "platform": "ios",
  • "createdAt": "2022-03-02T01:15:00Z"
}

ReleaseEntity

id
required
string

The id of the release entity

version
required
string

The release version

status
required
string (ReleaseStatus)
Enum: "active" "completed" "canceled"

The status of a release

type
required
string (ReleaseType)
Enum: "major" "minor" "point" "hotfix" "rollback"

The type of release

timelinePhase
required
string (ReleaseTimelinePhase)
Enum: "upcoming" "current" "completed"

The timeline phase of the release

isReleaseTagged
required
boolean

Indicates whether the release has been tagged in VCS

isKickedOff
required
boolean

Indicates whether the release has been kicked off in Runway

isSubmitted
required
boolean

Indicates whether the release has been submitted for review in the app store

isReleased
required
boolean

Indicates whether the release has been released to users. For iOS platforms, this corresponds to the App Store status being 'READY_FOR_SALE'. For Android platforms, this corresponds to the version's status being 'inProgress' or 'completed'

createdAt
required
string <date-time>

The date and time when the release was created in Runway

releasePilotId
string

The release pilot for the release

targetKickoffDate
string <date-time>

The target kickoff date and time for the release

targetSubmissionDate
string <date-time>

The target submission date and time for the release

targetReleaseDate
string <date-time>

The target submission date and time for the release

releaseBranch
string

The detected release branch for the release

updatedAt
string <date-time>

The date and time when the release was last updated in Runway

kickedOffAt
string <date-time>

The date and time when the release was kicked off in Runway

submittedAt
string <date-time>

The date and time when the a build for the release was submitted for review

releasedAt
string <date-time>

The date and time when a build for the release was made available to users. For iOS platforms, this corresponds to the App Store status being 'READY_FOR_SALE'. For Android platforms, this corresponds to the version's status being 'inProgress' or 'completed'

rolloutCompletedAt
string <date-time>

The date and time when the rollout completed for the release (phased release or staged rollout reaching 100%)

completedAt
string <date-time>

The date and time when the release was marked as completed in Runway. For iOS and Android platforms, this corresponds to the date on which a build was released to users based on the app store status. For other platforms, it corresponds to the date and time on which the production CI/CD workflow successfully completed for the first time.

object (ReleaseRegressionTestingStatus)
releaseSummary
string

The automatically generated summary of the release.

Array of objects (WorkItem)

The work items associated with the release

required
Array of objects (ReleaseStepEntity)

The steps of the release

object or object (AppStoreVersionData)
object (CustomMetadata)

Custom metadata attached to the release, keyed by a stable id derived from each entry's title. Each value is an entry with a human-readable title and a value that may be any JSON type.

{
  • "id": "fake-app:1.0.0",
  • "version": "1.0.0",
  • "status": "active",
  • "type": "major",
  • "timelinePhase": "upcoming",
  • "isReleaseTagged": true,
  • "isKickedOff": true,
  • "isSubmitted": true,
  • "isReleased": true,
  • "createdAt": "2022-03-02T01:15:00Z",
  • "releasePilotId": "sully@example.com",
  • "targetKickoffDate": "2022-03-02T01:15:00Z",
  • "targetSubmissionDate": "2022-03-02T01:15:00Z",
  • "targetReleaseDate": "2022-03-02T01:15:00Z",
  • "releaseBranch": "release-1.0.0",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "kickedOffAt": "2022-03-02T01:15:00Z",
  • "submittedAt": "2022-03-02T01:15:00Z",
  • "releasedAt": "2022-03-02T01:15:00Z",
  • "rolloutCompletedAt": "2022-03-02T01:15:00Z",
  • "completedAt": "2022-03-02T01:15:00Z",
  • "regressionTestingStatus": {
    },
  • "releaseSummary": "string",
  • "workItems": [
    ],
  • "steps": [
    ],
  • "appStoreData": {
    },
  • "customMetadata": {}
}

GroupEntity

id
required
string

The ID of the group

name
required
string

The name of the group

userActions
required
Array of strings (UserAction)
Items Enum: "AddRemoveEditIntegration" "UpdateAppSettings" "EditAutomations" "CreateDeleteRelease" "CreateHotfix" "UpdateScheduleCadence" "UpdateReleaseTargetDates" "CreateBranchPromoteCode" "BumpVersion" "TagCommit" "ApproveScreenshotsMetadata" "PromoteBetaBuildToTestingTrack" "ApproveBetaTesting" "UpdateRegressionStatus" "UpdateMetadataApproval" "SetResumeActiveRCBuild" "TriggerCIWorkflow" "UpdateAppStoreSelectedBuild" "UpdateAppStoreReviewSubmission" "SubmitAppUpdate" "DevRejectAppUpdate" "ReleaseAppUpdate" "UpdateReleasePilot" "AddRemoveEditCLI" "PingCLI" "UAToggleApprovalCLI" "ToggleFRIgnore" "ToggleFeatureFlag" "UpdatePhasedRelease" "AddRemoveEditReleaseBranchPatterns" "AddRemoveEditReleaseTagPatterns" "AddRemoveEditFeatureAffiliations" "AssignBetaTestersToBuilds" "AssignBetaGroupsToBuilds" "UpdateAdditionalBranchConfig" "DownloadBuildArtifact" "UpdateMetadata" "EditReleasePlanningSummary" "EditReleaseSummaryMessage" "EditAppStoreReleaseSettings" "ApplyMetadata" "SubmitBetaBuildForReview" "PauseResumeScheduleCadence" "UpdateBetaTestingNotes" "AccessSSOPortal" "AccessDirectorySyncPortal" "CreateDeleteApp" "InviteUsers" "EditUserRoles" "RemoveOrgUser" "AddUpdateRemoveWebhook" "CreateDeleteAPITokens" "UpdateDirectorySyncRolesForGroups" "StartRollbackResigningSequence" "AddRemoveDevice" "AddRemoveTestDeviceFromApp" "UpdateDeviceInASC" "UploadSigningKey" "ImportExportTranslationStrings" "ApproveTranslations" "AddFixRequest" "UpdateFixRequestStatus" "UploadExportMetadataTranslations" "CreateEditDeleteCustomGroup" "BuildDistroOptIn" "UACreateBuildDistroBucket" "UpdateBucketSettings" "UpdateBucketNotifications" "UpdateBucketMembers" "BucketInviteIndividualTestersToBuilds" "BucketUploadBuilds" "BucketUpdateBuildTesterNotes" "BucketInstallBuilds" "ManageTriageIssues"

The actions that the group is allowed to perform

members
required
Array of strings

The members of the group

isEligibleForPilotRotation
required
boolean

Whether members of this group are eligible to be added to a release pilot rotation

{
  • "id": "acb-123",
  • "name": "Developers",
  • "userActions": [
    ],
  • "members": [
    ],
  • "isEligibleForPilotRotation": true
}

ReleaseStepEntity

stepId
any

The identifier of the step

type
required
string (ReleaseStepType)
Enum: "kickoff" "featureReadiness" "releaseCandidate" "regressionTesting" "betaTesting" "metadata" "screenshots" "approvals" "submission" "storeReview" "takeoff" "ciDistribution"

The type of release step

displayName
required
string

The display name of the step

status
required
string (ReleaseStepStatus)
Enum: "ready" "pending" "pendingChecklist" "blocked" "inactive"

The status of a release step

statusReasonString
required
string

The user-friendly description of the reason for the status of the step

object or object or object or object or object (ReleaseStepData)
required
Array of objects (ChecklistItemEntity)

The list of checklist items for the release step

{
  • "stepId": null,
  • "type": "kickoff",
  • "displayName": "string",
  • "status": "ready",
  • "statusReasonString": "string",
  • "data": {
    },
  • "checklistItems": [
    ]
}

StepRunEntity

id
required
string

The identifier of the step run

stepConfigId
required
string

The identifier of the step config this step run was created from

stepArchetype
required
string (ReleaseStepType)
Enum: "kickoff" "featureReadiness" "releaseCandidate" "regressionTesting" "betaTesting" "metadata" "screenshots" "approvals" "submission" "storeReview" "takeoff" "ciDistribution"

The type of release step

displayName
required
string

The display name of the step run

status
required
string (ReleaseStepStatus)
Enum: "ready" "pending" "pendingChecklist" "blocked" "inactive"

The status of a release step

statusReasonString
required
string

The user-friendly description of the reason for the status of the step run

required
Array of objects (ChecklistItemEntity)

The list of checklist items for the step run

object or object or object or object or object (StepRunData)
{
  • "id": "string",
  • "stepConfigId": "string",
  • "stepArchetype": "kickoff",
  • "displayName": "string",
  • "status": "ready",
  • "statusReasonString": "string",
  • "checklistItems": [
    ],
  • "data": {
    }
}

ChecklistItemEntity

id
required
string

The identifier of the checklist item

title
required
string

The title of the checklist item

description
string

The description of the checklist item. Accepts markdown.

approverGroups
required
Array of strings (UserGroup)
Items Enum: "pilot" "engineer" "pm" "qa" "design" "em" "marketing" "cx" "ops" "approver"

The list of user groups that can approve this checklist item. Custom groups can be included as well.

releaseType
required
string
Enum: "all" "hotfixOnly" "rollbackOnly" "allExceptHotfix"

The type of release this checklist item will appear on

notifyEnabled
required
boolean

Whether the checklist item will notify on Slack when its status changes

statuses
required
Array of strings (ChecklistItemStatusType)
Items Enum: "approved" "rejected" "inProgress" "blocked" "passed" "failed"

The list of possible checklist item status types for this checklist item. A subset of all possible ChecklistItemStatusType values

releaseStepType
string

The release step that the checklist item appears on. Will be null if the placement of the item is not binary. Can either be of type ReleaseStepType, or a step's Step ID can be sent instead

stepId
any

The step ID of the release step the checklist item appears on

oneOffForVersion
string

If the checklist item only applies for a single release version, this field will contain the version string for that version

object (ChecklistItemStatus)

The status of the checklist item. Will be null if a binary placement checklist item is not complete, or when a status has not been set yet

placement
required
string (ChecklistItemPlacement)
Enum: "stepChecklist" "approvals" "regressionTesting"

The placement of the checklist item

object (ChecklistItemComment)

A comment on a checklist item

{
  • "id": "string",
  • "title": "Gather new release notes",
  • "description": "Contact sully@demo.com on the copywriting team to get new release notes together.",
  • "approverGroups": [
    ],
  • "releaseType": "all",
  • "notifyEnabled": true,
  • "statuses": [
    ],
  • "releaseStepType": "string",
  • "stepId": null,
  • "oneOffForVersion": "1.1.0",
  • "status": {
    },
  • "placement": "stepChecklist",
  • "comment": {
    }
}

AppleAppStoreData

type
required
string (AppStoreDataType)
Enum: "AppleAppStoreData" "GooglePlayStoreData"

The type of app store data

releaseType
required
string

The release type in ASC for the release

earliestReleaseDate
string <date-time>

the earliest release date that the update will be released on, set if the release type is SCHEDULED. If the update is approved before the earliest release date, it will be released automatically on the earliestReleaseDate

state
required
string

The ASC state of the release, can be one of a number of version states defined by Apple.

object (ApplePhasedRelease)

The phased release details for the release. Will be null if the release is not a phased released release (set to release updates to all users)

{
  • "type": "AppleAppStoreData",
  • "releaseType": "string",
  • "earliestReleaseDate": "2019-08-24T14:15:22Z",
  • "state": "string",
  • "phasedRelease": {
    }
}

GooglePlayStoreData

type
required
string (AppStoreDataType)
Enum: "AppleAppStoreData" "GooglePlayStoreData"

The type of app store data

state
required
string (GooglePlayVersionState)

The Google Play Developer API status of the versioned release, can be one of a number of release statuses

object (GoogleStagedRollout)

The staged rollout details for the release. Will be null if the release is not a staged rollout

{
  • "type": "AppleAppStoreData",
  • "state": "string",
  • "phasedRelease": {
    }
}

GooglePlayVersionState

string (GooglePlayVersionState)

The Google Play Developer API status of the versioned release, can be one of a number of release statuses

"string"

GoogleStagedRollout

state
required
string (GooglePlayVersionState)

The Google Play Developer API status of the versioned release, can be one of a number of release statuses

userFraction
number [ 0 .. 1 ]
{
  • "state": "string",
  • "userFraction": 0
}

ApplePhasedRelease

state
required
string

The phased release state for the update, can be one of a number of phased release states defined by Apple

dayNumber
required
number [ 1 .. 7 ]

The phased release day

startDate
string <date-time>

The date the phased release began

{
  • "state": "string",
  • "dayNumber": 1,
  • "startDate": "2019-08-24T14:15:22Z"
}

ChecklistItemPlacement

string (ChecklistItemPlacement)
Enum: "stepChecklist" "approvals" "regressionTesting"

The placement of a given checklist item

"stepChecklist"

UserGroup

string (UserGroup)
Enum: "pilot" "engineer" "pm" "qa" "design" "em" "marketing" "cx" "ops" "approver"

The list of possible groups a user can have. Users can have multiple groups. Specify the ID of default groups as listed, or use the ID of a custom groups.

"pilot"

ChecklistItemStatus

status
required
string (ChecklistItemStatusType)
Enum: "approved" "rejected" "inProgress" "blocked" "passed" "failed"

The checklist item status key. For binary placement checklist items, the status will always be approved if set

createdBy
required
string

The userId (email) of the user that created the checklist item

createdAt
required
string <date-time>

The date and time the checklist item was created

{
  • "status": "approved",
  • "createdBy": "string",
  • "createdAt": "2022-03-02T01:15:00Z"
}

ChecklistItemStatusType

string (ChecklistItemStatusType)
Enum: "approved" "rejected" "inProgress" "blocked" "passed" "failed"

All possible statuses for a checklist item

"approved"

ReleaseType

string (ReleaseType)
Enum: "major" "minor" "point" "hotfix" "rollback"

The type of release

"major"

IntegrationType

string (IntegrationType)
Enum: "amazon" "apple" "google" "huawei" "samsung" "expo-eas" "appcenter-beta" "apple-beta" "google-beta" "firebase-beta" "runway-build-distro-beta" "appcenter-ci" "apple-ci" "azure-ci" "bitrise" "buildkite" "circleci" "codemagic" "generic-ci" "github-ci" "gitlab-ci" "jenkins" "travis" "launchdarkly" "optimizely" "statsig" "firebase-remote-config" "amplitude-experiment" "asana" "azure-it" "jira" "linear" "pivotal" "shortcut" "monday" "slack" "microsoft-teams" "amplitude" "datadog-analytics" "mixpanel-analytics" "google-analytics" "apple-power-performance-metrics" "new-relic-analytics" "custom-analytics" "testrail" "qase" "browserstack" "xray" "bugsnag" "firebase" "sentry" "embrace-stability-monitoring" "datadog-stability-monitoring" "dynatrace-stability-monitoring" "new-relic-stability-monitoring" "luciq-stability-monitoring" "luciq-analytics" "github-vcs-dist" "bitbucket" "github" "gitlab-vcs" "azure-vcs" "pagerduty-scheduling" "incident-io-scheduling" "opsgenie-scheduling" "crowdin" "lokalise" "jira-service-management-scheduling"

The type of integration

"amazon"

CreateEditReleaseType

string (CreateEditReleaseType)
Enum: "release" "hotfix" "rollback"

Release type used when creating or editing releases.

"release"

UserAction

string (UserAction)
Enum: "AddRemoveEditIntegration" "UpdateAppSettings" "EditAutomations" "CreateDeleteRelease" "CreateHotfix" "UpdateScheduleCadence" "UpdateReleaseTargetDates" "CreateBranchPromoteCode" "BumpVersion" "TagCommit" "ApproveScreenshotsMetadata" "PromoteBetaBuildToTestingTrack" "ApproveBetaTesting" "UpdateRegressionStatus" "UpdateMetadataApproval" "SetResumeActiveRCBuild" "TriggerCIWorkflow" "UpdateAppStoreSelectedBuild" "UpdateAppStoreReviewSubmission" "SubmitAppUpdate" "DevRejectAppUpdate" "ReleaseAppUpdate" "UpdateReleasePilot" "AddRemoveEditCLI" "PingCLI" "UAToggleApprovalCLI" "ToggleFRIgnore" "ToggleFeatureFlag" "UpdatePhasedRelease" "AddRemoveEditReleaseBranchPatterns" "AddRemoveEditReleaseTagPatterns" "AddRemoveEditFeatureAffiliations" "AssignBetaTestersToBuilds" "AssignBetaGroupsToBuilds" "UpdateAdditionalBranchConfig" "DownloadBuildArtifact" "UpdateMetadata" "EditReleasePlanningSummary" "EditReleaseSummaryMessage" "EditAppStoreReleaseSettings" "ApplyMetadata" "SubmitBetaBuildForReview" "PauseResumeScheduleCadence" "UpdateBetaTestingNotes" "AccessSSOPortal" "AccessDirectorySyncPortal" "CreateDeleteApp" "InviteUsers" "EditUserRoles" "RemoveOrgUser" "AddUpdateRemoveWebhook" "CreateDeleteAPITokens" "UpdateDirectorySyncRolesForGroups" "StartRollbackResigningSequence" "AddRemoveDevice" "AddRemoveTestDeviceFromApp" "UpdateDeviceInASC" "UploadSigningKey" "ImportExportTranslationStrings" "ApproveTranslations" "AddFixRequest" "UpdateFixRequestStatus" "UploadExportMetadataTranslations" "CreateEditDeleteCustomGroup" "BuildDistroOptIn" "UACreateBuildDistroBucket" "UpdateBucketSettings" "UpdateBucketNotifications" "UpdateBucketMembers" "BucketInviteIndividualTestersToBuilds" "BucketUploadBuilds" "BucketUpdateBuildTesterNotes" "BucketInstallBuilds" "ManageTriageIssues"

A possible action a user can perform

"AddRemoveEditIntegration"

ReleaseStatus

string (ReleaseStatus)
Enum: "active" "completed" "canceled"

The status of a release

"active"

AppPlatform

string (AppPlatform)
Enum: "ios" "android" "ios-sdk" "android-sdk" "react-native-ota"

The app's platform

"ios"

CIBuildEntity

buildHash
required
string

A unique identifier for the build from a CI system, generated from the combination of integrationId and build identifier

buildIdentifier
required
string

The identifier of the build as set by the integration provider

integrationId
required
string (IntegrationType)
Enum: "amazon" "apple" "google" "huawei" "samsung" "expo-eas" "appcenter-beta" "apple-beta" "google-beta" "firebase-beta" "runway-build-distro-beta" "appcenter-ci" "apple-ci" "azure-ci" "bitrise" "buildkite" "circleci" "codemagic" "generic-ci" "github-ci" "gitlab-ci" "jenkins" "travis" "launchdarkly" "optimizely" "statsig" "firebase-remote-config" "amplitude-experiment" "asana" "azure-it" "jira" "linear" "pivotal" "shortcut" "monday" "slack" "microsoft-teams" "amplitude" "datadog-analytics" "mixpanel-analytics" "google-analytics" "apple-power-performance-metrics" "new-relic-analytics" "custom-analytics" "testrail" "qase" "browserstack" "xray" "bugsnag" "firebase" "sentry" "embrace-stability-monitoring" "datadog-stability-monitoring" "dynatrace-stability-monitoring" "new-relic-stability-monitoring" "luciq-stability-monitoring" "luciq-analytics" "github-vcs-dist" "bitbucket" "github" "gitlab-vcs" "azure-vcs" "pagerduty-scheduling" "incident-io-scheduling" "opsgenie-scheduling" "crowdin" "lokalise" "jira-service-management-scheduling"

The integration type that created this build

buildUrl
required
string

The URL to the build in the CI system

buildStartedAt
required
string <date-time>

The start date and time of the build

buildFinishedAt
string <date-time>

The end date and time of the build

buildStatus
required
string (CIBuildStatus)
Enum: "inProgress" "stopped" "success" "failure" "skipped"

The internal Runway status used for logic

providerBuildStatusString
string

The status string displayed to the user from the provider

commit
required
string

The commit hash that triggered the build

commitMessage
string

The commit message associated with the commit hash that triggered the build

commitAuthor
string

The author of the commit that triggered the build

commitUrl
string

The URL to the commit in the version control system

workflowName
string

The displayable name of the workflow

branchName
required
string

The branch name the build was triggered from

workflowRunIdOrCommaDelimitedIds
string

The workflow run ID(s) associated with this build. Can be a single ID or comma-delimited list of IDs

{
  • "buildHash": "abc123def456",
  • "buildIdentifier": "123",
  • "integrationId": "amazon",
  • "buildStartedAt": "2022-03-02T01:15:00Z",
  • "buildFinishedAt": "2022-03-02T01:20:00Z",
  • "buildStatus": "inProgress",
  • "providerBuildStatusString": "In progress",
  • "commit": "abcdef123456",
  • "commitMessage": "Fix bug in authentication",
  • "commitAuthor": "John Doe",
  • "workflowName": "CI Build",
  • "branchName": "main",
  • "workflowRunIdOrCommaDelimitedIds": "workflow-run-123"
}

CIBuildRequestEntity

buildIdentifier
required
string

The identifier/number of the build as set by the CI provider

startedAt
required
string <date-time>

The start date and time of the build

finishedAt
string <date-time>

The end date and time of the build. When passing build info as part of an artifact upload, this value should always be set.

status
required
string (CIBuildStatus)
Enum: "inProgress" "stopped" "success" "failure" "skipped"

The status of the CI build. When passing build info as part of an artifact upload, this value should always be success.

url
string

Your CI provider's url for the build

commitHash
required
string

The full commit hash of that triggered the build

commitMessage
string

The commit message associated with the commit hash that triggered the build

commitAuthor
string

The author of the commit that triggered the build

commitUrl
string

The url for the commit that triggered the build

branch
required
string

The branch the build was triggered off of

integrationId
required
string (CIIntegrationId)
Enum: "appcenter-ci" "apple-ci" "azure-ci" "bitbucket-ci" "bitrise" "buildkite" "circleci" "codemagic" "generic-ci" "github-ci" "gitlab-ci" "jenkins" "travis" "custom-ci"

Type of CI integration.

object (CIBuildWorkflowData)
{
  • "buildIdentifier": "123",
  • "startedAt": "2022-03-02T01:15:00Z",
  • "finishedAt": "2022-03-02T01:15:00Z",
  • "status": "inProgress",
  • "url": "string",
  • "commitHash": "e7a5fcf0f92ff69d59333ed0e40194f3c96791f6",
  • "commitMessage": "string",
  • "commitAuthor": "string",
  • "commitUrl": "string",
  • "branch": "main",
  • "integrationId": "appcenter-ci",
  • "workflowData": {
    }
}

AppStoreBuildEntity

id
required
string

The id of the app store build

buildIdentifier
required
string

The build number/identifier of the app store build

uploadedAt
required
string <date-time>

The date and time the build was uploaded to the app store

downloadSizeBytes
integer

The download size of the build bundle in bytes, for the device model in sizeDeviceModel. App Store Connect builds only, and only once Apple has computed the size

installSizeBytes
integer

The install size of the build bundle in bytes, for the device model in sizeDeviceModel. App Store Connect builds only, and only once Apple has computed the size

sizeDeviceModel
string

The device model the reported sizes apply to, configured per app (defaults to Universal)

{
  • "id": "abc123",
  • "buildIdentifier": "123",
  • "uploadedAt": "2022-03-02T01:15:00Z",
  • "downloadSizeBytes": 84215296,
  • "installSizeBytes": 151003136,
  • "sizeDeviceModel": "Universal"
}

BuildDistroBuildEntity

buildId
required
string

The id of the Build Distro build

status
required
string (BuildDistroBuildStatus)
Enum: "active" "expired" "deleted"
bucketName
required
string

The name of the build's bucket

bucketId
required
string

The ID of the build's bucket

artifactFileName
string

The name of the artifact file associated with the build

createdAt
required
string <date-time>
updatedAt
required
string <date-time>
required
Array of objects (BuildDistroBuildTester)

Any additional users or user groups assigned as testers for the build. Bucket members of the bucket this build is in are not included in the additional testers list.

testerNotes
string

Optional tester notes for the build

downloadURL
string

The url to download the build. The request to this URL must be authenticated with a Runway API key.

object (CIBuildEntity)

The CI build associated with this Build Distro build

binaryBuildNumber
string

The build number found associated to the binary artifact

binaryBuildVersion
string

The build version found associated to the binary artifact

binaryBuildType
string

The type of binary artifact

required
Array of objects (BuildDistroAdditionalArtifact)

Additional artifacts for the build

{}

CustomCIBuildEntity

id
required
string

The id of the Build Distro build

bucketId
required
string

The ID of the build's bucket

bucketName
required
string

The name of the build's bucket

object

The binary build details

object (CIBuildEntity)

The CI build associated with this Build Distro build

createdAt
required
string <date-time>

The date and time when the build was created

updatedAt
required
string <date-time>

The date and time when the build was last updated

individualTesters
required
Array of strings

List of individual tester user IDs

testerNotes
required
string

Optional tester notes for the build

status
required
string
Enum: "" "expired" "deleted"

The status of the build

testerNotesSetByBucketAutomation
required
boolean

Whether the tester notes were set by bucket automation

installationUrl
required
string

The URL for installing the build

downloadUrl
string

The URL to download the build. The request to this URL must be authenticated with a Runway API key.

uploadedAt
required
string <date-time>

The date and time when the build was uploaded

object

Information about the artifact

object

Pull request data if the build was created from a PR rule

isMultiArtifact
required
boolean

Whether this is a multi-artifact build

required
Array of objects

Additional artifacts for the build

{
  • "id": "12345",
  • "bucketId": "abc123",
  • "bucketName": "CIs",
  • "binaryBuild": {
    },
  • "ciBuild": {
    },
  • "createdAt": "2022-03-02T01:15:00Z",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "individualTesters": [
    ],
  • "testerNotes": "string",
  • "status": "",
  • "testerNotesSetByBucketAutomation": true,
  • "uploadedAt": "2022-03-02T01:15:00Z",
  • "artifactInfo": {
    },
  • "prData": {
    },
  • "isMultiArtifact": true,
  • "additionalArtifacts": [
    ]
}

BuildDistroAdditionalArtifact

fileName
required
string

The name of the file

size
required
number

The file's size in bytes

downloadUrl
required
string

The file's download URL. Requests to this URL must be authenticated with a Runway API key.

BuildDistroBucketEntity

id
required
string

The id of the Build Distro bucket

name
required
string

The name of the bucket

type
required
string (BucketType)
Enum: "custom" "personal" "rc" "dev"

The type of bucket

required
object (BucketRule)

Any rules defined for the bucket

required
Array of objects (BucketMember)

The members of the bucket

orgWideAccessEnabled
required
boolean

Whether or not the bucket has org-wide access enabled

status
required
string (BucketStatus)
Enum: "active" "archived"

The status of the bucket

notificationsEnabled
required
boolean

Whether or not the bucket has notifications enabled

required
Array of objects (NotificationEntity)

The notifications for the bucket

createdAt
required
string <date-time>
updatedAt
required
string <date-time>
required
Array of objects (AutomationEntity)

The automations for the bucket

archivedAt
string <date-time>
totalBuildsCount
required
integer

The total count of builds in the bucket

{
  • "id": "12345",
  • "name": "CIs",
  • "type": "custom",
  • "rules": {
    },
  • "members": [
    ],
  • "orgWideAccessEnabled": true,
  • "status": "active",
  • "notificationsEnabled": true,
  • "notifications": [
    ],
  • "createdAt": "2022-03-02T01:15:00Z",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "automations": [
    ],
  • "archivedAt": "2022-03-02T01:15:00Z",
  • "totalBuildsCount": 0
}

WorkItem

id
required
string

The id of the work item

required
object (WorkItemTicket)

Issue tracking item associated with work item, WorkItemTicket

required
WorkItemCodeCommit (object) or WorkItemCodePullRequest (object)

VCS item associated with work item

explanationText
required
string

The detailed explanation of why this work item appears in this release

ignored
required
boolean

If the work item has been marked as ignored

isItemDone
required
boolean

If the work item is completed

{
  • "id": "acb-1234",
  • "ticket": {
    },
  • "code": {
    },
  • "explanationText": "string",
  • "ignored": true,
  • "isItemDone": true
}

WorkItemTicket

identifier
required
string

The identifier of the ticket

description
required
string

The description of the ticket

url
required
string

The url of the ticket

owner
required
string

The owner of the ticket

reporter
required
string

The reporter of the ticket

status
required
string

The status of the ticket

createdAt
required
string <date-time>

The date and time the ticket was created

updatedAt
required
string <date-time>

The date and time the ticket was last updated

isTicketDone
required
boolean

If the ticket is completed

project
required
object

The project the ticket is associated with

{
  • "identifier": "string",
  • "description": "string",
  • "url": "string",
  • "owner": "string",
  • "reporter": "string",
  • "status": "string",
  • "createdAt": "2022-03-02T01:15:00Z",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "isTicketDone": true,
  • "project": { }
}

WorkItemCodeCommit

identifier
required
string

The identifier of the commit

codeStatus
required
string (CodeStatus)
Enum: "openPR" "merged" "unmerged" "cherryPickPending" "cherryPickOpen" "cherryPickFailed" "cherryPickMerged"

The status of the code

type
required
string (CodeType)
Enum: "commit" "pullRequest"

The type of code item (commit in this case)

url
required
string

The url of the commit

author
required
string

The author of the commit

message
required
string

The message of the commit

branch
required
string

The branch of the commit

committedAt
required
string <date-time>

The date and time the commit was created

authoredAt
required
string <date-time>

The date and time the commit was authored

{
  • "identifier": "string",
  • "codeStatus": "openPR",
  • "type": "commit",
  • "url": "string",
  • "author": "string",
  • "message": "string",
  • "branch": "string",
  • "committedAt": "2022-03-02T01:15:00Z",
  • "authoredAt": "2022-03-02T01:15:00Z"
}

WorkItemCodePullRequest

identifier
required
string

The identifier of the pull request

codeStatus
string (CodeStatus)
Enum: "openPR" "merged" "unmerged" "cherryPickPending" "cherryPickOpen" "cherryPickFailed" "cherryPickMerged"

The status of the pull request

type
required
string (CodeType)
Enum: "commit" "pullRequest"

The type of code item (pullRequest in this case)

url
required
string

The url of the pull request

title
required
string

The title of the pull request

description
required
string

The description of the pull request

baseBranch
required
string

The base branch of the pull request

headBranch
required
string

The head branch of the pull request

author
required
string

The author of the pull request

createdAt
required
string <date-time>

The date and time the pull request was created

updatedAt
required
string <date-time>

The date and time the pull request was last updated

pullRequestStatus
required
string (PullRequestStatus)
Enum: "open" "merged" "closed" "unknown"

The status of the pull request

{
  • "identifier": "string",
  • "codeStatus": "openPR",
  • "type": "commit",
  • "url": "string",
  • "title": "string",
  • "description": "string",
  • "baseBranch": "string",
  • "headBranch": "string",
  • "author": "string",
  • "createdAt": "2022-03-02T01:15:00Z",
  • "updatedAt": "2022-03-02T01:15:00Z",
  • "pullRequestStatus": "open"
}

CodeStatus

string (CodeStatus)
Enum: "openPR" "merged" "unmerged" "cherryPickPending" "cherryPickOpen" "cherryPickFailed" "cherryPickMerged"

Status of WorkItemCode entity

"openPR"

CodeType

string (CodeType)
Enum: "commit" "pullRequest"

Type of WorkItemCode entity

"commit"

PullRequestStatus

string (PullRequestStatus)
Enum: "open" "merged" "closed" "unknown"

Status of WorkItemCode entity

"open"

BucketMember

permissionLevel
required
string
Enum: "admin" "uploader" "tester"

The permission level associated with the tester

type
required
string
Enum: "user" "userGroup"

The type of tester

id
required
string

The ID of the user or user group

{
  • "permissionLevel": "admin",
  • "type": "user",
  • "id": "string"
}

BuildDistroBuildTester

type
required
string
Enum: "user" "userGroup"

The type of tester

id
required
string

The ID of the user or user group

{
  • "type": "user",
  • "id": "string"
}

NotificationEntity

type
required
string
enabled
required
boolean
{
  • "type": "string",
  • "enabled": true
}

AutomationEntity

type
required
string
enabled
required
boolean
{
  • "type": "string",
  • "enabled": true
}

BucketRule

type
required
string

The type of rule

fileFilterPatterns
required
Array of strings

The patterns to match files on

branch
string

The branch to match on. You should only set this value on branch rules.

baseBranch
string

The target branch for Pull Requests to match on. You should only set this value on pr rules.

workflowId
string

The Id for the workflow associated with this rule.

{
  • "type": "string",
  • "fileFilterPatterns": [
    ],
  • "branch": "string",
  • "baseBranch": "string",
  • "workflowId": "string"
}

BuildDistroBuildStatus

string (BuildDistroBuildStatus)
Enum: "active" "expired" "deleted"
"active"

TriageIssueEntity

id
string

Unique identifier for the issue

appId
string
title
string

Title for the issue. Always present: issues without their own title fall back to the text of their first source, then to "Triage issue " — matching what the Runway UI displays.

state
string
Enum: "new" "assigned" "fixRequested" "fixApproved" "reopened" "fixMerged" "fixRejected" "notAPriority"

Current state of the issue

reporter
string or null

Email of the user who reported the issue

assigneeUserIds
Array of strings
suggestedAssigneeUserIds
Array of strings

Additional candidates surfaced by the auto-assign automation

Array of objects (TriageIssueSource)

The signals that contributed to this issue (Runway-reported, PM ticket, user reviews, regression test failures, health metrics, beta feedback)

relatedIssueIds
Array of strings
createdAt
string <date-time>
updatedAt
string <date-time>
{
  • "id": "string",
  • "appId": "string",
  • "title": "string",
  • "state": "new",
  • "reporter": "string",
  • "assigneeUserIds": [
    ],
  • "suggestedAssigneeUserIds": [
    ],
  • "sources": [
    ],
  • "relatedIssueIds": [
    ],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

TriageIssueSource

type
required
string
Enum: "runway" "pmTicket" "userReviews" "betaFeedback" "regressionTesting" "healthMetrics"

Origin of the source signal

description
string

Human-readable description for this source (e.g. the reported message for runway, the failed test case for regressionTesting, the ticket description for pmTicket)

version
string

Version string the source applies to, when known

build
string

Build identifier the source applies to, when known

{
  • "type": "runway",
  • "description": "string",
  • "version": "string",
  • "build": "string"
}