Skip to content

Instantly share code, notes, and snippets.

@UrbanChrisy
Created June 28, 2025 21:01
Show Gist options
  • Select an option

  • Save UrbanChrisy/543ae7576da7a21ba7827ba1bba2ca18 to your computer and use it in GitHub Desktop.

Select an option

Save UrbanChrisy/543ae7576da7a21ba7827ba1bba2ca18 to your computer and use it in GitHub Desktop.
Expo Graphql Schema
schema {
query: RootQuery
mutation: RootMutation
}
directive @deprecated(
reason: String = "No longer supported"
) on ARGUMENT_DEFINITION | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION
directive @include(
if: Boolean!
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
directive @oneOf on INPUT_OBJECT
directive @skip(
if: Boolean!
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
directive @specifiedBy(
url: String!
) on SCALAR
type AcceptUserInvitationResult {
success: Boolean!
}
"""A method of authentication for an Actor"""
type AccessToken {
createdAt: DateTime!
id: ID!
lastUsedAt: DateTime
note: String
owner: Actor!
revokedAt: DateTime
updatedAt: DateTime!
visibleTokenPrefix: String!
}
type AccessTokenMutation {
"""Create an AccessToken for an Actor"""
createAccessToken(
createAccessTokenData: CreateAccessTokenInput!
): CreateAccessTokenResponse!
"""Delete an AccessToken"""
deleteAccessToken(
id: ID!
): DeleteAccessTokenResult!
"""Revoke an AccessToken"""
setAccessTokenRevoked(
id: ID!
revoked: Boolean
): AccessToken!
}
"""An account is a container owning projects, credentials, billing and other organization
data and settings. Actors may own and be members of accounts."""
type Account {
accessTokens: [AccessToken!]! @deprecated(reason: "Legacy access tokens are deprecated")
"""Coalesced project activity for all apps belonging to this account."""
activityTimelineProjectActivities(
""" Offset the query """
createdBefore: DateTime
""" Types of objects to filter """
filterTypes: [ActivityTimelineProjectActivityType!]
limit: Int!
): [ActivityTimelineProjectActivity!]!
appCount: Int!
appStoreConnectApiKeys: [AppStoreConnectApiKey!]! @deprecated(reason: "Use appStoreConnectApiKeysPaginated")
appStoreConnectApiKeysPaginated(
after: String
before: String
first: Int
last: Int
): AccountAppStoreConnectApiKeysConnection!
appleAppIdentifiers(
bundleIdentifier: String
): [AppleAppIdentifier!]!
appleDevices(
identifier: String
limit: Int
offset: Int
): [AppleDevice!]! @deprecated(reason: "Use appleDevicesPaginated")
appleDevicesPaginated(
after: String
before: String
filter: AppleDeviceFilterInput
first: Int
last: Int
): AccountAppleDevicesConnection!
appleDistributionCertificates: [AppleDistributionCertificate!]! @deprecated(reason: "Use appleDistributionCertificatesPaginated")
appleDistributionCertificatesPaginated(
after: String
before: String
first: Int
last: Int
): AccountAppleDistributionCertificatesConnection!
appleProvisioningProfiles(
appleAppIdentifierId: ID
): [AppleProvisioningProfile!]! @deprecated(reason: "Use appleProvisioningProfilesPaginated")
appleProvisioningProfilesPaginated(
after: String
before: String
first: Int
last: Int
): AccountAppleProvisioningProfilesConnection!
applePushKeys: [ApplePushKey!]! @deprecated(reason: "Use applePushKeysPaginated")
applePushKeysPaginated(
after: String
before: String
first: Int
last: Int
): AccountApplePushKeysConnection!
appleTeams(
appleTeamIdentifier: String
limit: Int
offset: Int
): [AppleTeam!]! @deprecated(reason: "Use appleTeamsPaginated")
"""iOS credentials for account"""
appleTeamsPaginated(
after: String
before: String
filter: AppleTeamFilterInput
first: Int
last: Int
): AccountAppleTeamsConnection!
"""Apps associated with this account"""
apps(
includeUnpublished: Boolean
limit: Int!
offset: Int!
): [App!]! @deprecated(reason: "Use appsPaginated")
"""Paginated list of apps associated with this account. By default sorted by name. Use filter to adjust the sorting order."""
appsPaginated(
after: String
before: String
filter: AccountAppsFilterInput
first: Int
last: Int
): AccountAppsConnection!
"""Audit logs for account"""
auditLogsPaginated(
after: String
before: String
filter: AuditLogFilterInput
first: Int
last: Int
): AuditLogConnection!
availableBuilds: Int @deprecated(reason: "Build packs are no longer supported")
"""Billing information. Only visible to members with the ADMIN or OWNER role."""
billing: Billing
billingPeriod(
date: DateTime!
): BillingPeriod!
"""(EAS Build) Builds associated with this account"""
builds(
limit: Int!
offset: Int!
platform: AppPlatform
status: BuildStatus
): [Build!]!
"""Whether this account can enable SSO."""
canEnableSSO: Boolean!
createdAt: DateTime!
displayName: String
"""Environment secrets for an account"""
environmentSecrets(
filterNames: [String!]
): [EnvironmentSecret!]!
"""Environment variables for an account"""
environmentVariables(
environment: EnvironmentVariableEnvironment
filterNames: [String!]
): [EnvironmentVariable!]!
"""Environment variables for an account with decrypted secret values"""
environmentVariablesIncludingSensitive(
environment: EnvironmentVariableEnvironment
filterNames: [String!]
): [EnvironmentVariableWithSecret!]!
"""GitHub App installations for an account"""
githubAppInstallations: [GitHubAppInstallation!]!
googleServiceAccountKeys: [GoogleServiceAccountKey!]! @deprecated(reason: "Use googleServiceAccountKeysPaginated")
"""Android credentials for account"""
googleServiceAccountKeysPaginated(
after: String
before: String
first: Int
last: Int
): AccountGoogleServiceAccountKeysConnection!
hasBuilds: Boolean!
id: ID!
isCurrent: Boolean!
isDisabled: Boolean!
"""Whether an Account plan falls into AppDevDomainName's free or paid tier"""
isFreeAppDevDomainTier: Boolean!
"""Whether this account has SSO enabled. Can be queried by all members."""
isSSOEnabled: Boolean!
lastDeletionAttemptTime: DateTime
logRocketOrganization: LogRocketOrganization
name: String!
"""Offers set on this account"""
offers: [Offer!]
"""Owning User of this account if personal account"""
owner: User @deprecated(reason: "Deprecated in favor of ownerUserActor")
"""Owning UserActor of this account if personal account"""
ownerUserActor: UserActor
pendingSentryInstallation: PendingSentryInstallation
profileImageUrl: String!
pushSecurityEnabled: Boolean!
requiresAccessTokenForPushSecurity: Boolean! @deprecated(reason: "Legacy access tokens are deprecated")
sentryInstallation: SentryInstallation
"""Snacks associated with this account"""
snacks(
limit: Int!
offset: Int!
): [Snack!]!
"""SSO configuration for this account"""
ssoConfiguration: AccountSSOConfiguration
"""Subscription info visible to members that have VIEWER role"""
subscription: SubscriptionDetails
subscriptionChangesPending: Boolean @deprecated(reason: "No longer needed")
"""Coalesced project activity for an app using pagination"""
timelineActivity(
after: String
before: String
filter: TimelineActivityFilterInput
first: Int
last: Int
): TimelineActivityConnection!
unlimitedBuilds: Boolean! @deprecated(reason: "See isCurrent")
updatedAt: DateTime!
"""Account query object for querying EAS usage metrics"""
usageMetrics: AccountUsageMetrics!
"""Owning UserActor of this account if personal account"""
userActorOwner: UserActor @deprecated(reason: "Deprecated in favor of ownerUserActor")
"""Pending user invitations for this account"""
userInvitations: [UserInvitation!]!
"""Actors associated with this account and permissions they hold"""
users: [UserPermission!]!
"""Permission info for the viewer on this account"""
viewerUserPermission: UserPermission!
willAutoRenewBuilds: Boolean @deprecated(reason: "Build packs are no longer supported")
}
type AccountAppStoreConnectApiKeysConnection {
edges: [AccountAppStoreConnectApiKeysEdge!]!
pageInfo: PageInfo!
}
type AccountAppStoreConnectApiKeysEdge {
cursor: String!
node: AppStoreConnectApiKey!
}
type AccountAppleDevicesConnection {
edges: [AccountAppleDevicesEdge!]!
pageInfo: PageInfo!
}
type AccountAppleDevicesEdge {
cursor: String!
node: AppleDevice!
}
type AccountAppleDistributionCertificatesConnection {
edges: [AccountAppleDistributionCertificatesEdge!]!
pageInfo: PageInfo!
}
type AccountAppleDistributionCertificatesEdge {
cursor: String!
node: AppleDistributionCertificate!
}
type AccountAppleProvisioningProfilesConnection {
edges: [AccountAppleProvisioningProfilesEdge!]!
pageInfo: PageInfo!
}
type AccountAppleProvisioningProfilesEdge {
cursor: String!
node: AppleProvisioningProfile!
}
type AccountApplePushKeysConnection {
edges: [AccountApplePushKeysEdge!]!
pageInfo: PageInfo!
}
type AccountApplePushKeysEdge {
cursor: String!
node: ApplePushKey!
}
type AccountAppleTeamsConnection {
edges: [AccountAppleTeamsEdge!]!
pageInfo: PageInfo!
}
type AccountAppleTeamsEdge {
cursor: String!
node: AppleTeam!
}
type AccountAppsConnection {
edges: [AccountAppsEdge!]!
pageInfo: PageInfo!
}
type AccountAppsEdge {
cursor: String!
node: App!
}
input AccountAppsFilterInput {
searchTerm: String
sortByField: AccountAppsSortByField!
}
enum AccountAppsSortByField {
LATEST_ACTIVITY_TIME
"""Name prefers the display name but falls back to full_name with @account/
part stripped."""
NAME
}
input AccountDataInput {
name: String!
}
type AccountGoogleServiceAccountKeysConnection {
edges: [AccountGoogleServiceAccountKeysEdge!]!
pageInfo: PageInfo!
}
type AccountGoogleServiceAccountKeysEdge {
cursor: String!
node: GoogleServiceAccountKey!
}
type AccountMutation {
"""Cancels all subscriptions immediately"""
cancelAllSubscriptionsImmediately(
accountID: ID!
): Account!
"""Cancel scheduled subscription change"""
cancelScheduledSubscriptionChange(
accountID: ID!
): Account!
"""Buys or revokes account's additional concurrencies, charging the account the appropriate amount if needed."""
changeAdditionalConcurrenciesCount(
accountID: ID!
newAdditionalConcurrenciesCount: Int!
): Account!
"""Upgrades or downgrades the active subscription to the newPlanIdentifier, which must be one of the EAS plans (i.e., Production or Enterprise)."""
changePlan(
accountID: ID!
couponCode: String
newPlanIdentifier: String!
): Account!
"""Add specified account Permissions for Actor. Actor must already have at least one permission on the account."""
grantActorPermissions(
accountID: ID!
actorID: ID!
permissions: [Permission]
): Account!
"""Remove profile image for the account. Do nothing if there's no profile image associated."""
removeProfileImage(
accountID: ID!
): Account!
"""Rename this account and the primary user's username if this account is a personal account"""
rename(
accountID: ID!
newName: String!
): Account!
"""Requests a refund for the specified charge by requesting a manual refund from support"""
requestRefund(
accountID: ID!
chargeID: ID!
description: String
reason: String
): Boolean
"""Revoke specified Permissions for Actor. Actor must already have at least one permission on the account."""
revokeActorPermissions(
accountID: ID!
actorID: ID!
permissions: [Permission]
): Account!
"""Set the display name for the account."""
setDisplayName(
accountID: ID!
displayName: String!
): Account!
"""Require authorization to send push notifications for experiences owned by this account"""
setPushSecurityEnabled(
accountID: ID!
pushSecurityEnabled: Boolean!
): Account!
}
input AccountNotificationSubscriptionInput {
accountId: ID!
event: NotificationEvent!
type: NotificationType!
userId: ID!
}
type AccountQuery {
"""Query an Account by ID"""
byId(
"""Account id to use to look up account"""
accountId: String!
): Account!
"""Query an Account by name"""
byName(
"""Account name to use to look up account"""
accountName: String!
): Account!
}
"""Auth configuration data for an SSO account."""
type AccountSSOConfiguration {
authProtocol: AuthProtocolType!
authProviderIdentifier: AuthProviderIdentifier!
clientIdentifier: String!
clientSecret: String!
createdAt: DateTime!
id: ID!
issuer: String!
updatedAt: DateTime!
}
input AccountSSOConfigurationData {
authProtocol: AuthProtocolType!
authProviderIdentifier: AuthProviderIdentifier!
clientIdentifier: String!
clientSecret: String!
issuer: String!
}
type AccountSSOConfigurationMutation {
"""Create an AccountSSOConfiguration for an Account"""
createAccountSSOConfiguration(
accountId: ID!
accountSSOConfigurationData: AccountSSOConfigurationData!
): AccountSSOConfiguration!
"""Delete an AccountSSOConfiguration"""
deleteAccountSSOConfiguration(
id: ID!
): DeleteAccountSSOConfigurationResult!
"""Update an AccountSSOConfiguration"""
updateAccountSSOConfiguration(
accountSSOConfigurationData: AccountSSOConfigurationData!
id: ID!
): AccountSSOConfiguration!
}
"""Public auth configuration data for an SSO account."""
type AccountSSOConfigurationPublicData {
authProtocol: AuthProtocolType!
authProviderIdentifier: AuthProviderIdentifier!
authorizationUrl: String!
id: ID!
issuer: String!
}
type AccountSSOConfigurationPublicDataQuery {
"""Get AccountSSOConfiguration public data by account name"""
publicDataByAccountName(
"""Account name to use to look up account SSO configuration"""
accountName: String!
): AccountSSOConfigurationPublicData!
}
enum AccountUploadSessionType {
PROFILE_IMAGE_UPLOAD
WORKFLOWS_PROJECT_SOURCES
}
type AccountUsageEASBuildMetadata {
billingResourceClass: EASBuildBillingResourceClass
platform: AppPlatform
waiverType: EASBuildWaiverType
}
union AccountUsageMetadata = AccountUsageEASBuildMetadata
type AccountUsageMetric {
id: ID!
metricType: UsageMetricType!
serviceMetric: EASServiceMetric!
timestamp: DateTime!
value: Float!
}
type AccountUsageMetrics {
byBillingPeriod(
date: DateTime!
service: EASService
): UsageMetricTotal!
metricsForServiceMetric(
filterParams: JSONObject
granularity: UsageMetricsGranularity!
serviceMetric: EASServiceMetric!
timespan: UsageMetricsTimespan!
): [AccountUsageMetric!]!
}
interface ActivityTimelineProjectActivity {
activityTimestamp: DateTime!
actor: Actor
id: ID!
}
enum ActivityTimelineProjectActivityType {
BUILD
SUBMISSION
UPDATE
WORKER
WORKFLOW_RUN
}
"""A regular user, SSO user, or robot that can authenticate with Expo services and be a member of accounts."""
interface Actor {
"""Access Tokens belonging to this actor"""
accessTokens: [AccessToken!]!
"""Associated accounts"""
accounts: [Account!]!
created: DateTime!
"""Best-effort human readable name for this actor for use in user interfaces during action attribution.
For example, when displaying a sentence indicating that actor X created a build or published an update."""
displayName: String!
"""Experiments associated with this actor"""
experiments: [ActorExperiment!]!
"""Server feature gate values for this actor, optionally filtering by desired gates.
Only resolves for the viewer."""
featureGates(
filter: [String!]
): JSONObject!
firstName: String
id: ID!
isExpoAdmin: Boolean!
lastDeletionAttemptTime: DateTime
}
type ActorExperiment {
createdAt: DateTime!
enabled: Boolean!
experiment: Experiment!
id: ID!
updatedAt: DateTime!
}
type ActorExperimentMutation {
"""Create or update the value of a User Experiment"""
createOrUpdateActorExperiment(
enabled: Boolean!
experiment: Experiment!
): ActorExperiment!
}
type ActorQuery {
"""Query an Actor by ID"""
byId(
id: ID!
): Actor! @deprecated(reason: "Public actor queries are no longer supported")
}
input AddUserInput {
audience: MailchimpAudience = EXPO_DEVELOPERS
email: String!
tags: [MailchimpTag!]
}
type AddUserPayload {
email_address: String
id: String
list_id: String
status: String
tags: [MailchimpTagPayload!]
timestamp_signup: String
}
type AddonDetails {
id: ID!
name: String!
nextInvoice: DateTime
planId: String!
quantity: Int
willCancel: Boolean
}
type Address {
city: String
country: String
line1: String
state: String
zip: String
}
type AndroidAppBuildCredentials {
androidKeystore: AndroidKeystore
id: ID!
isDefault: Boolean!
isLegacy: Boolean!
name: String!
}
input AndroidAppBuildCredentialsInput {
"""@isDefault: if set, these build credentials will become the default for the Android app. All other build credentials will have their default status set to false."""
isDefault: Boolean!
keystoreId: ID!
name: String!
}
type AndroidAppBuildCredentialsMutation {
"""Create a set of build credentials for an Android app"""
createAndroidAppBuildCredentials(
androidAppBuildCredentialsInput: AndroidAppBuildCredentialsInput!
androidAppCredentialsId: ID!
): AndroidAppBuildCredentials!
"""delete a set of build credentials for an Android app"""
deleteAndroidAppBuildCredentials(
id: ID!
): deleteAndroidAppBuildCredentialsResult!
"""Set the build credentials to be the default for the Android app"""
setDefault(
id: ID!
isDefault: Boolean!
): AndroidAppBuildCredentials!
"""Set the keystore to be used for an Android app"""
setKeystore(
id: ID!
keystoreId: ID!
): AndroidAppBuildCredentials!
"""Set the name of a set of build credentials to be used for an Android app"""
setName(
id: ID!
name: String!
): AndroidAppBuildCredentials!
}
type AndroidAppCredentials {
androidAppBuildCredentialsArray: [AndroidAppBuildCredentials!]! @deprecated(reason: "use androidAppBuildCredentialsList instead")
androidAppBuildCredentialsList: [AndroidAppBuildCredentials!]!
androidFcm: AndroidFcm
app: App!
applicationIdentifier: String
googleServiceAccountKeyForFcmV1: GoogleServiceAccountKey
googleServiceAccountKeyForSubmissions: GoogleServiceAccountKey
id: ID!
isLegacy: Boolean!
}
input AndroidAppCredentialsFilter {
applicationIdentifier: String
legacyOnly: Boolean
}
input AndroidAppCredentialsInput {
fcmId: ID
googleServiceAccountKeyForFcmV1Id: ID
googleServiceAccountKeyForSubmissionsId: ID
}
type AndroidAppCredentialsMutation {
"""Create a set of credentials for an Android app"""
createAndroidAppCredentials(
androidAppCredentialsInput: AndroidAppCredentialsInput!
appId: ID!
applicationIdentifier: String!
): AndroidAppCredentials!
"""Create a GoogleServiceAccountKeyEntity to store credential and
connect it with an edge from AndroidAppCredential"""
createFcmV1Credential(
accountId: ID!
androidAppCredentialsId: String!
credential: String!
): AndroidAppCredentials!
"""Delete a set of credentials for an Android app"""
deleteAndroidAppCredentials(
id: ID!
): DeleteAndroidAppCredentialsResult!
"""Set the FCM push key to be used in an Android app"""
setFcm(
fcmId: ID!
id: ID!
): AndroidAppCredentials!
"""Set the Google Service Account Key to be used for Firebase Cloud Messaging V1"""
setGoogleServiceAccountKeyForFcmV1(
googleServiceAccountKeyId: ID!
id: ID!
): AndroidAppCredentials!
"""Set the Google Service Account Key to be used for submitting an Android app"""
setGoogleServiceAccountKeyForSubmissions(
googleServiceAccountKeyId: ID!
id: ID!
): AndroidAppCredentials!
}
enum AndroidBuildType {
APK
APP_BUNDLE
"""@deprecated Use developmentClient option instead."""
DEVELOPMENT_CLIENT
}
input AndroidBuilderEnvironmentInput {
bun: String
corepack: Boolean
env: JSONObject
expoCli: String
image: String
ndk: String
node: String
pnpm: String
yarn: String
}
type AndroidFcm {
account: Account!
createdAt: DateTime!
"""Legacy FCM: returns the Cloud Messaging token, parses to a String
FCM v1: returns the Service Account Key file, parses to an Object"""
credential: JSON!
id: ID!
snippet: FcmSnippet!
updatedAt: DateTime!
version: AndroidFcmVersion!
}
input AndroidFcmInput {
credential: String!
version: AndroidFcmVersion!
}
type AndroidFcmMutation {
"""Create an FCM V0/Legacy credential"""
createAndroidFcm(
accountId: ID!
androidFcmInput: AndroidFcmInput!
): AndroidFcm! @deprecated(reason: "FCM Legacy credentials are no longer supported by Google. Use createFcmV1Credential instead.")
"""Delete an FCM V0/Legacy credential"""
deleteAndroidFcm(
id: ID!
): deleteAndroidFcmResult!
}
enum AndroidFcmVersion {
LEGACY
V1
}
input AndroidJobBuildCredentialsInput {
keystore: AndroidJobKeystoreInput!
}
input AndroidJobInput {
applicationArchivePath: String
artifactPath: String @deprecated
buildArtifactPaths: [String!]
buildProfile: String
buildType: AndroidBuildType
builderEnvironment: AndroidBuilderEnvironmentInput
cache: BuildCacheInput
customBuildConfig: CustomBuildConfigInput
developmentClient: Boolean
environment: EnvironmentVariableEnvironment
experimental: JSONObject
gradleCommand: String
loggerLevel: WorkerLoggerLevel
mode: BuildMode
projectArchive: ProjectArchiveSourceInput!
projectRootDirectory: String!
releaseChannel: String
secrets: AndroidJobSecretsInput
triggeredBy: BuildTrigger
type: BuildWorkflow!
updates: BuildUpdatesInput
username: String
version: AndroidJobVersionInput
}
input AndroidJobKeystoreInput {
dataBase64: String!
keyAlias: String!
keyPassword: String
keystorePassword: String!
}
input AndroidJobOverridesInput {
applicationArchivePath: String
artifactPath: String @deprecated
buildArtifactPaths: [String!]
buildProfile: String
buildType: AndroidBuildType
builderEnvironment: AndroidBuilderEnvironmentInput
cache: BuildCacheInput
customBuildConfig: CustomBuildConfigInput
developmentClient: Boolean
experimental: JSONObject
gradleCommand: String
loggerLevel: WorkerLoggerLevel
mode: BuildMode
releaseChannel: String
secrets: AndroidJobSecretsInput
updates: BuildUpdatesInput
username: String
version: AndroidJobVersionInput
}
input AndroidJobSecretsInput {
buildCredentials: AndroidJobBuildCredentialsInput
robotAccessToken: String
}
input AndroidJobVersionInput {
versionCode: String!
}
type AndroidKeystore {
account: Account!
createdAt: DateTime!
id: ID!
keyAlias: String!
keyPassword: String
keystore: String!
keystorePassword: String!
md5CertificateFingerprint: String
sha1CertificateFingerprint: String
sha256CertificateFingerprint: String
type: AndroidKeystoreType!
updatedAt: DateTime!
}
input AndroidKeystoreInput {
base64EncodedKeystore: String!
keyAlias: String!
keyPassword: String
keystorePassword: String!
}
type AndroidKeystoreMutation {
"""Create a Keystore"""
createAndroidKeystore(
accountId: ID!
androidKeystoreInput: AndroidKeystoreInput!
): AndroidKeystore
"""Delete a Keystore"""
deleteAndroidKeystore(
id: ID!
): DeleteAndroidKeystoreResult!
}
enum AndroidKeystoreType {
JKS
PKCS12
UNKNOWN
}
type AndroidSubmissionConfig {
applicationIdentifier: String @deprecated(reason: "applicationIdentifier is deprecated and will be auto-detected on submit")
archiveType: SubmissionAndroidArchiveType @deprecated(reason: "archiveType is deprecated and will be null")
releaseStatus: SubmissionAndroidReleaseStatus
rollout: Float
track: SubmissionAndroidTrack!
}
input AndroidSubmissionConfigInput {
applicationIdentifier: String
archiveUrl: String
changelog: String
changesNotSentForReview: Boolean
googleServiceAccountKeyId: String
googleServiceAccountKeyJson: String
isVerboseFastlaneEnabled: Boolean
releaseStatus: SubmissionAndroidReleaseStatus
rollout: Float
track: SubmissionAndroidTrack!
}
"""Represents an Exponent App (or Experience in legacy terms)"""
type App implements Project {
accessTokens: [AccessToken!]! @deprecated(reason: "Legacy access tokens are deprecated")
"""Coalesced project activity for an app"""
activityTimelineProjectActivities(
""" Offset the query """
createdBefore: DateTime
filterChannels: [String!]
filterPlatforms: [AppPlatform!]
""" Types of objects to filter """
filterTypes: [ActivityTimelineProjectActivityType!]
limit: Int!
): [ActivityTimelineProjectActivity!]!
"""Android app credentials for the project"""
androidAppCredentials(
filter: AndroidAppCredentialsFilter
): [AndroidAppCredentials!]!
"""ios.appStoreUrl field from most recent classic update manifest"""
appStoreUrl: String @deprecated(reason: "Classic updates have been deprecated.")
assetLimitPerUpdateGroup: Int!
branchesPaginated(
after: String
before: String
filter: BranchFilterInput
first: Int
last: Int
): AppBranchesConnection!
"""(EAS Build) Builds associated with this app"""
builds(
filter: BuildFilter
limit: Int!
offset: Int!
"""Deprecated, use filter instead"""
platform: AppPlatform
"""Deprecated, use filter instead"""
status: BuildStatus
): [Build!]!
buildsPaginated(
after: String
before: String
filter: BuildFilterInput
first: Int
last: Int
): AppBuildsConnection!
"""Classic update release channel names that have at least one build"""
buildsReleaseChannels: [String!]! @deprecated(reason: "Classic updates have been deprecated.")
channelsPaginated(
after: String
before: String
filter: ChannelFilterInput
first: Int
last: Int
): AppChannelsConnection!
deployment(
channel: String!
runtimeVersion: String!
): Deployment
"""Deployments associated with this app"""
deployments(
after: String
before: String
filter: DeploymentFilterInput
first: Int
last: Int
): DeploymentsConnection!
description: String! @deprecated(reason: "Classic updates have been deprecated.")
devDomainName: AppDevDomainName
"""Environment secrets for an app"""
environmentSecrets(
filterNames: [String!]
): [EnvironmentSecret!]!
"""Environment variables for an app"""
environmentVariables(
environment: EnvironmentVariableEnvironment
filterNames: [String!]
): [EnvironmentVariable!]!
"""Environment variables for an app with decrypted secret values"""
environmentVariablesIncludingSensitive(
environment: EnvironmentVariableEnvironment
filterNames: [String!]
): [EnvironmentVariableWithSecret!]!
fingerprintsPaginated(
after: String
before: String
filter: FingerprintFilterInput
first: Int
last: Int
): AppFingerprintsConnection!
fullName: String!
githubBuildTriggers: [GitHubBuildTrigger!]!
githubJobRunTriggers: [GitHubJobRunTrigger!]!
githubRepository: GitHubRepository
githubRepositorySettings: GitHubRepositorySettings
"""githubUrl field from most recent classic update manifest"""
githubUrl: String @deprecated(reason: "Classic updates have been deprecated.")
"""Info about the icon specified in the most recent classic update manifest"""
icon: AppIcon @deprecated(reason: "Classic updates have been deprecated.")
iconUrl: String @deprecated(reason: "No longer supported")
id: ID!
"""App query field for querying EAS Insights about this app"""
insights: AppInsights!
internalDistributionBuildPrivacy: AppInternalDistributionBuildPrivacy!
"""iOS app credentials for the project"""
iosAppCredentials(
filter: IosAppCredentialsFilter
): [IosAppCredentials!]!
isDeleting: Boolean! @deprecated(reason: "Use lastDeletionAttemptTime !== null instead")
"""Whether the latest classic update publish is using a deprecated SDK version"""
isDeprecated: Boolean! @deprecated(reason: "Classic updates have been deprecated.")
isLikedByMe: Boolean! @deprecated(reason: "'likes' have been deprecated.")
lastDeletionAttemptTime: DateTime
lastPublishedTime: DateTime! @deprecated(reason: "No longer supported")
"""Time of the last user activity (update, branch, submission)."""
latestActivity: DateTime!
latestAppVersionByPlatformAndApplicationIdentifier(
applicationIdentifier: String!
platform: AppPlatform!
): AppVersion
latestReleaseForReleaseChannel(
platform: AppPlatform!
releaseChannel: String!
): AppRelease @deprecated(reason: "Classic updates have been deprecated.")
"""ID of latest classic update release"""
latestReleaseId: ID! @deprecated(reason: "Classic updates have been deprecated.")
likeCount: Int! @deprecated(reason: "'likes' have been deprecated.")
likedBy(
limit: Int
offset: Int
): [User!]! @deprecated(reason: "'likes' have been deprecated.")
logRocketProject: LogRocketProject
name: String!
ownerAccount: Account!
packageName: String! @deprecated(reason: "No longer supported")
packageUsername: String! @deprecated(reason: "No longer supported")
"""android.playStoreUrl field from most recent classic update manifest"""
playStoreUrl: String @deprecated(reason: "Classic updates have been deprecated.")
privacy: String! @deprecated(reason: "No longer supported")
privacySetting: AppPrivacy! @deprecated(reason: "No longer supported")
profileImageUrl: String
"""Whether there have been any classic update publishes"""
published: Boolean! @deprecated(reason: "Classic updates have been deprecated.")
"""App query field for querying details about an app's push notifications"""
pushNotifications: AppPushNotifications!
pushSecurityEnabled: Boolean!
"""Classic update release channel names (to be removed)"""
releaseChannels: [String!]! @deprecated(reason: "Classic updates have been deprecated.")
requiresAccessTokenForPushSecurity: Boolean! @deprecated(reason: "Legacy access tokens are deprecated")
resourceClassExperiment: ResourceClassExperiment
"""Runtimes associated with this app"""
runtimes(
after: String
before: String
filter: RuntimeFilterInput
first: Int
last: Int
): RuntimesConnection!
scopeKey: String!
"""SDK version of the latest classic update publish, 0.0.0 otherwise"""
sdkVersion: String! @deprecated(reason: "Classic updates have been deprecated.")
sentryProject: SentryProject
slug: String!
"""EAS Submissions associated with this app"""
submissions(
filter: SubmissionFilter!
limit: Int!
offset: Int!
): [Submission!]!
submissionsPaginated(
after: String
before: String
first: Int
last: Int
): AppSubmissionsConnection!
suggestedDevDomainName: String!
"""Coalesced project activity for an app using pagination"""
timelineActivity(
after: String
before: String
filter: TimelineActivityFilterInput
first: Int
last: Int
): TimelineActivityConnection!
trendScore: Float! @deprecated(reason: "'likes' have been deprecated.")
"""get an EAS branch owned by the app by name"""
updateBranchByName(
name: String!
): UpdateBranch
"""EAS branches owned by an app"""
updateBranches(
limit: Int!
offset: Int!
): [UpdateBranch!]!
"""get an EAS channel owned by the app by name"""
updateChannelByName(
name: String!
): UpdateChannel
"""EAS channels owned by an app"""
updateChannels(
limit: Int!
offset: Int!
): [UpdateChannel!]!
"""EAS updates owned by an app grouped by update group"""
updateGroups(
filter: UpdatesFilter
limit: Int!
offset: Int!
): [[Update!]!]!
"""Time of last classic update publish"""
updated: DateTime! @deprecated(reason: "Classic updates have been deprecated.")
"""EAS updates owned by an app"""
updates(
limit: Int!
offset: Int!
): [Update!]!
updatesPaginated(
after: String
before: String
filter: UpdateFilterInput
first: Int
last: Int
): AppUpdatesConnection!
"""Project query object for querying EAS usage metrics"""
usageMetrics: AppUsageMetrics!
username: String! @deprecated(reason: "Use ownerAccount.name instead")
users: [User!] @deprecated(reason: "No longer supported")
"""Webhooks for an app"""
webhooks(
filter: WebhookFilter
): [Webhook!]!
workerCustomDomain: WorkerCustomDomain
workerDeployment(
deploymentIdentifier: WorkerDeploymentIdentifier!
): WorkerDeployment
workerDeploymentAlias(
aliasName: WorkerDeploymentIdentifier
): WorkerDeploymentAlias
workerDeploymentAliases(
after: String
before: String
first: Int
last: Int
): WorkerDeploymentAliasesConnection!
workerDeployments(
after: String
before: String
first: Int
last: Int
): WorkerDeploymentsConnection!
workerDeploymentsCrash(
crashKey: ID!
sampleFor: CrashSampleFor
): WorkerDeploymentCrashEdge!
workerDeploymentsCrashes(
filters: CrashesFilters
timespan: DatasetTimespan!
): WorkerDeploymentCrashes
workerDeploymentsRequest(
requestKey: WorkerDeploymentRequestID!
): WorkerDeploymentRequestEdge!
workerDeploymentsRequests(
filters: RequestsFilters
timespan: DatasetTimespan!
): WorkerDeploymentRequests
workflowRunGitBranchesPaginated(
after: String
before: String
filter: WorkflowRunGitBranchFilterInput
first: Int
last: Int
): AppWorkflowRunGitBranchesConnection!
workflowRunsPaginated(
after: String
before: String
filter: AppWorkflowRunFilterInput
first: Int
last: Int
): AppWorkflowRunsConnection!
workflows: [Workflow!]!
}
type AppBranchEdge {
cursor: String!
node: UpdateBranch!
}
type AppBranchesConnection {
edges: [AppBranchEdge!]!
pageInfo: PageInfo!
}
type AppBuildEdge {
cursor: String!
node: BuildOrBuildJob!
}
type AppBuildsConnection {
edges: [AppBuildEdge!]!
pageInfo: PageInfo!
}
type AppChannelEdge {
cursor: String!
node: UpdateChannel!
}
type AppChannelsConnection {
edges: [AppChannelEdge!]!
pageInfo: PageInfo!
}
input AppDataInput {
id: ID!
internalDistributionBuildPrivacy: AppInternalDistributionBuildPrivacy
privacy: String
}
type AppDevDomainName {
app: App
id: ID!
name: DevDomainName!
}
type AppDevDomainNameMutation {
"""Creates a DevDomainName assigning it to an app"""
assignDevDomainName(
appId: ID!
name: DevDomainName!
): AppDevDomainName!
"""Updates a DevDomainName for a given app"""
changeDevDomainName(
appId: ID!
name: DevDomainName!
): AppDevDomainName!
}
type AppFingerprintEdge {
cursor: String!
node: Fingerprint!
}
type AppFingerprintsConnection {
edges: [AppFingerprintEdge!]!
pageInfo: PageInfo!
}
type AppIcon {
colorPalette: JSON @deprecated(reason: "No longer supported")
originalUrl: String!
primaryColor: String
url: String!
}
input AppInfoInput {
displayName: String
}
input AppInput {
accountId: ID!
appInfo: AppInfoInput
projectName: String!
}
type AppInsights {
hasEventsFromExpoInsightsClientModule: Boolean!
totalUniqueUsers(
timespan: InsightsTimespan!
): Int
uniqueUsersByAppVersionOverTime(
timespan: InsightsTimespan!
): UniqueUsersOverTimeData!
uniqueUsersByPlatformOverTime(
timespan: InsightsTimespan!
): UniqueUsersOverTimeData!
}
enum AppInternalDistributionBuildPrivacy {
PRIVATE
PUBLIC
}
type AppMutation {
"""Create an app"""
createApp(
appInput: AppInput!
): App!
grantAccess(
accessLevel: String
toUser: ID!
): App @deprecated(reason: "No longer supported")
"""Remove profile image (icon) for the app. Do nothing if there's no profile image associated."""
removeProfileImage(
appId: ID!
): App!
"""Delete an App. Returns the ID of the background job receipt. Use BackgroundJobReceiptQuery to get the status of the job."""
scheduleAppDeletion(
appId: ID!
): BackgroundJobReceipt!
"""Set display info for app"""
setAppInfo(
appId: ID!
appInfo: AppInfoInput!
): App!
"""Require api token to send push notifs for experience"""
setPushSecurityEnabled(
appId: ID!
pushSecurityEnabled: Boolean!
): App!
"""Set resource class experiment for app"""
setResourceClassExperiment(
appId: ID!
resourceClassExperiment: ResourceClassExperiment
): App!
}
input AppNotificationSubscriptionInput {
appId: ID!
event: NotificationEvent!
type: NotificationType!
userId: ID!
}
enum AppPlatform {
ANDROID
IOS
}
enum AppPrivacy {
HIDDEN
PUBLIC
UNLISTED
}
type AppPushNotifications {
id: ID!
insights: AppPushNotificationsInsights!
}
type AppPushNotificationsInsights {
id: ID!
notificationsSentOverTime(
timespan: InsightsTimespan!
): NotificationsSentOverTimeData!
successFailureOverTime(
timespan: InsightsTimespan!
): NotificationsSentOverTimeData!
totalNotificationsSent(
filters: [JSON!] = "[]"
timespan: InsightsTimespan!
): Int!
}
type AppQuery {
"""Public apps in the app directory"""
all(
"""Filter to use to filter public app list"""
filter: AppsFilter!
limit: Int
offset: Int
"""Method to sort by"""
sort: AppSort!
): [App!]! @deprecated(reason: "App directory no longer supported")
"""Look up app by dev domain name, if one has been created"""
byDevDomainName(
name: DevDomainName!
): App!
byFullName(
"""App full name used to look up app"""
fullName: String!
): App!
"""Look up app by app id"""
byId(
appId: String!
): App!
}
type AppRelease {
hash: String!
id: ID!
manifest: JSON!
publishedTime: DateTime!
publishingUsername: String!
runtimeVersion: String
s3Key: String!
s3Url: String!
sdkVersion: String!
version: String!
}
enum AppSort {
"""Sort by recently published"""
RECENTLY_PUBLISHED
"""Sort by highest trendScore"""
VIEWED
}
type AppStoreConnectApiKey {
account: Account!
appleTeam: AppleTeam
createdAt: DateTime!
id: ID!
issuerIdentifier: String!
keyIdentifier: String!
keyP8: String!
name: String
roles: [AppStoreConnectUserRole!]
updatedAt: DateTime!
}
input AppStoreConnectApiKeyInput {
appleTeamId: ID
issuerIdentifier: String!
keyIdentifier: String!
keyP8: String!
name: String
roles: [AppStoreConnectUserRole!]
}
type AppStoreConnectApiKeyMutation {
"""Create an App Store Connect Api Key for an Apple Team"""
createAppStoreConnectApiKey(
accountId: ID!
appStoreConnectApiKeyInput: AppStoreConnectApiKeyInput!
): AppStoreConnectApiKey!
"""Delete an App Store Connect Api Key"""
deleteAppStoreConnectApiKey(
id: ID!
): deleteAppStoreConnectApiKeyResult!
"""Update an App Store Connect Api Key for an Apple Team"""
updateAppStoreConnectApiKey(
appStoreConnectApiKeyUpdateInput: AppStoreConnectApiKeyUpdateInput!
id: ID!
): AppStoreConnectApiKey!
}
type AppStoreConnectApiKeyQuery {
byId(
id: ID!
): AppStoreConnectApiKey!
}
input AppStoreConnectApiKeyUpdateInput {
appleTeamId: ID
}
enum AppStoreConnectUserRole {
ACCESS_TO_REPORTS
ACCOUNT_HOLDER
ADMIN
APP_MANAGER
CLOUD_MANAGED_APP_DISTRIBUTION
CLOUD_MANAGED_DEVELOPER_ID
CREATE_APPS
CUSTOMER_SUPPORT
DEVELOPER
FINANCE
IMAGE_MANAGER
MARKETING
READ_ONLY
SALES
TECHNICAL
UNKNOWN
}
type AppSubmissionEdge {
cursor: String!
node: Submission!
}
type AppSubmissionsConnection {
edges: [AppSubmissionEdge!]!
pageInfo: PageInfo!
}
type AppUpdateEdge {
cursor: String!
node: Update!
}
type AppUpdatesConnection {
edges: [AppUpdateEdge!]!
pageInfo: PageInfo!
}
enum AppUploadSessionType {
PROFILE_IMAGE_UPLOAD
}
type AppUsageMetric {
id: ID!
metricType: UsageMetricType!
serviceMetric: EASServiceMetric!
timestamp: DateTime!
value: Float!
}
type AppUsageMetricTotal {
billingPeriod: BillingPeriod!
id: ID!
planMetrics: [EstimatedUsage!]!
"""Total cost of overages, in cents"""
totalCost: Float!
}
type AppUsageMetrics {
byBillingPeriod(
date: DateTime!
service: EASService
): AppUsageMetricTotal!
metricsForServiceMetric(
filterParams: JSONObject
granularity: UsageMetricsGranularity!
serviceMetric: EASServiceMetric!
timespan: UsageMetricsTimespan!
): [AppUsageMetric!]!
}
"""Represents Play Store/App Store version of an application"""
type AppVersion {
"""Store identifier for an application
- Android - applicationId
- iOS - bundle identifier"""
applicationIdentifier: String!
"""Value that identifies build in a store (it's visible to developers, but not to end users)
- Android - versionCode in build.gradle ("android.versionCode" field in app.json)
- iOS - CFBundleVersion in Info.plist ("ios.buildNumber" field in app.json)"""
buildVersion: String!
id: ID!
platform: AppPlatform!
runtimeVersion: String
"""User-facing version in a store
- Android - versionName in build.gradle ("version" field in app.json)
- iOS - CFBundleShortVersionString in Info.plist ("version" field in app.json)"""
storeVersion: String!
}
input AppVersionInput {
appId: ID!
applicationIdentifier: String!
buildVersion: String!
platform: AppPlatform!
runtimeVersion: String
storeVersion: String!
}
type AppVersionMutation {
"""Create an app version"""
createAppVersion(
appVersionInput: AppVersionInput!
): AppVersion!
}
input AppWithGithubRepositoryInput {
accountId: ID!
appInfo: AppInfoInput
installationIdentifier: String
projectName: String!
}
type AppWorkflowRunEdge {
cursor: String!
node: WorkflowRun!
}
input AppWorkflowRunFilterInput {
requestedGitRef: String
status: WorkflowRunStatus
}
type AppWorkflowRunGitBranchEdge {
cursor: String!
node: AppWorkflowRunGitBranchNode!
}
type AppWorkflowRunGitBranchNode {
lastRunAt: DateTime!
name: String!
}
type AppWorkflowRunGitBranchesConnection {
edges: [AppWorkflowRunGitBranchEdge!]!
pageInfo: PageInfo!
}
type AppWorkflowRunsConnection {
edges: [AppWorkflowRunEdge!]!
pageInfo: PageInfo!
}
type AppleAppIdentifier {
account: Account!
appleTeam: AppleTeam
bundleIdentifier: String!
id: ID!
parentAppleAppIdentifier: AppleAppIdentifier
}
input AppleAppIdentifierInput {
appleTeamId: ID
bundleIdentifier: String!
parentAppleAppId: ID
}
type AppleAppIdentifierMutation {
"""Create an Identifier for an iOS App"""
createAppleAppIdentifier(
accountId: ID!
appleAppIdentifierInput: AppleAppIdentifierInput!
): AppleAppIdentifier!
}
type AppleDevice {
account: Account!
appleTeam: AppleTeam!
createdAt: DateTime!
deviceClass: AppleDeviceClass
enabled: Boolean
id: ID!
identifier: String!
model: String
name: String
softwareVersion: String
}
enum AppleDeviceClass {
IPAD
IPHONE
MAC
UNKNOWN
}
input AppleDeviceFilterInput {
appleTeamIdentifier: String
class: AppleDeviceClass
identifier: String
}
input AppleDeviceInput {
appleTeamId: ID!
deviceClass: AppleDeviceClass
enabled: Boolean
identifier: String!
model: String
name: String
softwareVersion: String
}
type AppleDeviceMutation {
"""Create an Apple Device"""
createAppleDevice(
accountId: ID!
appleDeviceInput: AppleDeviceInput!
): AppleDevice!
"""Delete an Apple Device"""
deleteAppleDevice(
id: ID!
): DeleteAppleDeviceResult!
"""Update an Apple Device"""
updateAppleDevice(
appleDeviceUpdateInput: AppleDeviceUpdateInput!
id: ID!
): AppleDevice!
}
type AppleDeviceRegistrationRequest {
account: Account!
appleTeam: AppleTeam!
id: ID!
}
type AppleDeviceRegistrationRequestMutation {
"""Create an Apple Device registration request"""
createAppleDeviceRegistrationRequest(
accountId: ID!
appleTeamId: ID!
): AppleDeviceRegistrationRequest!
}
type AppleDeviceRegistrationRequestQuery {
byId(
id: ID!
): AppleDeviceRegistrationRequest!
}
input AppleDeviceUpdateInput {
name: String
}
type AppleDistributionCertificate {
account: Account!
appleTeam: AppleTeam
certificateP12: String
certificatePassword: String
certificatePrivateSigningKey: String
createdAt: DateTime!
developerPortalIdentifier: String
id: ID!
iosAppBuildCredentialsList: [IosAppBuildCredentials!]!
serialNumber: String!
updatedAt: DateTime!
validityNotAfter: DateTime!
validityNotBefore: DateTime!
}
input AppleDistributionCertificateInput {
appleTeamId: ID
certP12: String!
certPassword: String!
certPrivateSigningKey: String
developerPortalIdentifier: String
}
type AppleDistributionCertificateMutation {
"""Create a Distribution Certificate"""
createAppleDistributionCertificate(
accountId: ID!
appleDistributionCertificateInput: AppleDistributionCertificateInput!
): AppleDistributionCertificate
"""Delete a Distribution Certificate"""
deleteAppleDistributionCertificate(
id: ID!
): DeleteAppleDistributionCertificateResult!
}
type AppleProvisioningProfile {
account: Account!
appleAppIdentifier: AppleAppIdentifier!
appleDevices: [AppleDevice!]!
appleTeam: AppleTeam
appleUUID: String!
createdAt: DateTime!
developerPortalIdentifier: String
expiration: DateTime!
id: ID!
provisioningProfile: String
status: String!
updatedAt: DateTime!
}
input AppleProvisioningProfileInput {
appleProvisioningProfile: String!
developerPortalIdentifier: String
}
type AppleProvisioningProfileMutation {
"""Create a Provisioning Profile"""
createAppleProvisioningProfile(
accountId: ID!
appleAppIdentifierId: ID!
appleProvisioningProfileInput: AppleProvisioningProfileInput!
): AppleProvisioningProfile!
"""Delete a Provisioning Profile"""
deleteAppleProvisioningProfile(
id: ID!
): DeleteAppleProvisioningProfileResult!
"""Delete Provisioning Profiles"""
deleteAppleProvisioningProfiles(
ids: [ID!]!
): [DeleteAppleProvisioningProfileResult!]!
"""Update a Provisioning Profile"""
updateAppleProvisioningProfile(
appleProvisioningProfileInput: AppleProvisioningProfileInput!
id: ID!
): AppleProvisioningProfile!
}
type ApplePushKey {
account: Account!
appleTeam: AppleTeam
createdAt: DateTime!
id: ID!
iosAppCredentialsList: [IosAppCredentials!]!
keyIdentifier: String!
keyP8: String!
updatedAt: DateTime!
}
input ApplePushKeyInput {
appleTeamId: ID!
keyIdentifier: String!
keyP8: String!
}
type ApplePushKeyMutation {
"""Create an Apple Push Notification key"""
createApplePushKey(
accountId: ID!
applePushKeyInput: ApplePushKeyInput!
): ApplePushKey!
"""Delete an Apple Push Notification key"""
deleteApplePushKey(
id: ID!
): deleteApplePushKeyResult!
}
type AppleTeam {
account: Account!
appleAppIdentifiers(
bundleIdentifier: String
): [AppleAppIdentifier!]!
appleDevices(
limit: Int
offset: Int
): [AppleDevice!]!
appleDistributionCertificates: [AppleDistributionCertificate!]!
appleProvisioningProfiles(
appleAppIdentifierId: ID
): [AppleProvisioningProfile!]!
applePushKeys: [ApplePushKey!]!
appleTeamIdentifier: String!
appleTeamName: String
appleTeamType: AppleTeamType
id: ID!
}
input AppleTeamFilterInput {
appleTeamIdentifier: String
}
input AppleTeamInput {
appleTeamIdentifier: String!
appleTeamName: String
appleTeamType: AppleTeamType
}
type AppleTeamMutation {
"""Create an Apple Team"""
createAppleTeam(
accountId: ID!
appleTeamInput: AppleTeamInput!
): AppleTeam!
"""Update an Apple Team"""
updateAppleTeam(
appleTeamUpdateInput: AppleTeamUpdateInput!
id: ID!
): AppleTeam!
}
type AppleTeamQuery {
byAppleTeamIdentifier(
accountId: ID!
identifier: String!
): AppleTeam
}
enum AppleTeamType {
COMPANY_OR_ORGANIZATION
INDIVIDUAL
IN_HOUSE
}
input AppleTeamUpdateInput {
appleTeamName: String
appleTeamType: AppleTeamType
}
enum AppsFilter {
"""Featured Projects"""
FEATURED
"""New Projects"""
NEW
}
input AscApiKeyInput {
issuerIdentifier: String!
keyIdentifier: String!
keyP8: String!
}
type Asset {
contentType: String!
fileSHA256: String!
fileSize: Int!
finalFileSize: Int
id: ID!
storageKey: String!
}
input AssetMapGroup {
android: AssetMapSourceInput
ios: AssetMapSourceInput
web: AssetMapSourceInput
}
input AssetMapSourceInput {
bucketKey: String
type: AssetMapSourceType
}
enum AssetMapSourceType {
GCS
}
type AssetMetadataResult {
status: AssetMetadataStatus!
storageKey: String!
}
enum AssetMetadataStatus {
DOES_NOT_EXIST
EXISTS
}
type AssetMutation {
"""Returns an array of specifications for upload. Each URL is valid for an hour.
The content type of the asset you wish to upload must be specified."""
getSignedAssetUploadSpecifications(
"""max 1400"""
assetContentTypes: [String!]!
): GetSignedAssetUploadSpecificationsResult!
}
"""Check to see if assets with given storageKeys exist"""
type AssetQuery {
byStorageKeys(
storageKeys: [String!]!
): [Asset!]!
metadata(
storageKeys: [String!]!
): [AssetMetadataResult!]!
signedUrls(
storageKeys: [String!]!
updateId: ID!
): [AssetSignedUrlResult!]!
}
type AssetSignedUrlResult {
headers: JSON
storageKey: String!
url: String!
}
type AuditLog {
account: Account
actor: Actor
createdAt: DateTime!
id: ID!
metadata: JSONObject
targetEntityId: ID!
targetEntityMutationType: TargetEntityMutationType!
targetEntityTypeName: EntityTypeName!
targetEntityTypePublicName: String!
websiteMessage: String!
}
type AuditLogConnection {
edges: [AuditLogEdge!]!
pageInfo: PageInfo!
}
type AuditLogEdge {
cursor: String!
node: AuditLog!
}
input AuditLogExportInput {
accountId: ID!
createdAfter: String!
createdBefore: String!
format: AuditLogsExportFormat!
targetEntityMutationType: [TargetEntityMutationType!]
targetEntityTypeName: [EntityTypeName!]
}
input AuditLogFilterInput {
entityTypes: [EntityTypeName!]
mutationTypes: [TargetEntityMutationType!]
}
type AuditLogMutation {
"""Exports Audit Logs for an account. Returns the ID of the background job receipt. Use BackgroundJobReceiptQuery to get the status of the job."""
exportAuditLogs(
exportInput: AuditLogExportInput!
): BackgroundJobReceipt!
}
type AuditLogQuery {
"""Audit logs for account"""
byId(
auditLogId: ID!
): AuditLog!
typeNamesMap: [LogNameTypeMapping!]!
}
enum AuditLogsExportFormat {
CSV
JSON
JSONL
}
enum AuthProtocolType {
OIDC
}
enum AuthProviderIdentifier {
GENERIC
GOOGLE_WS
MS_ENTRA_ID
OKTA
ONE_LOGIN
STUB_IDP
}
type AverageAssetMetrics {
averageDownloadSizeBytes: Int!
count: Int!
storageKey: String!
}
type BackgroundJobReceipt {
account: Account!
createdAt: DateTime!
errorCode: String
errorMessage: String
id: ID!
resultData: JSONObject
resultId: ID
resultType: BackgroundJobResultType!
state: BackgroundJobState!
tries: Int!
updatedAt: DateTime!
willRetry: Boolean!
}
type BackgroundJobReceiptQuery {
"""Look up background job receipt by ID"""
byId(
id: ID!
): BackgroundJobReceipt!
}
enum BackgroundJobResultType {
AUDIT_LOGS_EXPORT
GITHUB_BUILD
USER_AUDIT_LOGS_EXPORT
VOID
}
enum BackgroundJobState {
FAILURE
IN_PROGRESS
QUEUED
SUCCESS
}
type Billing {
"""History of invoices"""
charges: [Charge]
id: ID!
payment: PaymentDetails @deprecated(reason: "No longer used")
subscription: SubscriptionDetails
}
type BillingPeriod {
anchor: DateTime!
end: DateTime!
id: ID!
start: DateTime!
}
input BranchFilterInput {
searchTerm: String
}
type BranchQuery {
"""Query a Branch by ID"""
byId(
"""Branch ID to use to look up branch"""
branchId: ID!
): UpdateBranch!
}
type Build implements ActivityTimelineProjectActivity & BuildOrBuildJob {
activityTimestamp: DateTime!
actor: Actor
app: App!
appBuildVersion: String
appIdentifier: String
appVersion: String
artifacts: BuildArtifacts
buildMode: BuildMode
buildProfile: String
canRetry(
newMode: BuildMode
): Boolean!
cancelingActor: Actor
channel: String @deprecated(reason: "Use 'updateChannel' field instead.")
childBuild: Build
cliVersion: String
completedAt: DateTime
createdAt: DateTime!
customNodeVersion: String
customWorkflowName: String
deployment: Deployment
developmentClient: Boolean
distribution: DistributionType
enqueuedAt: DateTime
error: BuildError
estimatedWaitTimeLeftSeconds: Int
expirationDate: DateTime
fingerprint: Fingerprint
gitCommitHash: String
gitCommitMessage: String
gitRef: String
githubRepositoryOwnerAndName: String @deprecated(reason: "Use 'githubRepository' field instead")
id: ID!
"""Queue position is 1-indexed"""
initialQueuePosition: Int
initiatingActor: Actor
initiatingUser: User @deprecated(reason: "User type is deprecated")
iosEnterpriseProvisioning: BuildIosEnterpriseProvisioning
isForIosSimulator: Boolean!
isGitWorkingTreeDirty: Boolean
isWaived: Boolean!
logFiles: [String!]!
maxBuildTimeSeconds: Int!
"""Retry time starts after completedAt"""
maxRetryTimeMinutes: Int
message: String
metrics: BuildMetrics
parentBuild: Build
platform: AppPlatform!
priority: BuildPriority!
project: Project! @deprecated(reason: "Use app field instead")
projectMetadataFileUrl: String
projectRootDirectory: String
provisioningStartedAt: DateTime
"""Queue position is 1-indexed"""
queuePosition: Int
reactNativeVersion: String
releaseChannel: String
requiredPackageManager: String
resolvedEnvironment: EnvironmentVariableEnvironment
"""The builder resource class requested by the developer"""
resourceClass: BuildResourceClass! @deprecated(reason: "Use resourceClassDisplayName instead")
"""String describing the resource class used to run the build"""
resourceClassDisplayName: String!
retryDisabledReason(
newMode: BuildMode
): BuildRetryDisabledReason
runFromCI: Boolean
runtime: Runtime
runtimeVersion: String @deprecated(reason: "Use 'runtime' field instead.")
sdkVersion: String
selectedImage: String
status: BuildStatus!
submissions: [Submission!]!
updateChannel: UpdateChannel
updatedAt: DateTime!
workerStartedAt: DateTime
}
type BuildAnnotation {
authorUsername: String
buildPhase: String!
exampleBuildLog: String
id: ID!
internalNotes: String
message: String!
regexFlags: String
regexString: String!
title: String!
}
input BuildAnnotationDataInput {
buildPhase: String!
exampleBuildLog: String
internalNotes: String
message: String!
regexFlags: String
regexString: String!
title: String!
}
input BuildAnnotationFiltersInput {
buildPhases: [String!]!
}
type BuildAnnotationMutation {
"""Create a Build Annotation"""
createBuildAnnotation(
buildAnnotationData: BuildAnnotationDataInput!
): BuildAnnotation!
"""Delete a Build Annotation"""
deleteBuildAnnotation(
buildAnnotationId: ID!
): DeleteBuildAnnotationResult!
"""Update a Build Annotation"""
updateBuildAnnotation(
buildAnnotationData: BuildAnnotationDataInput!
buildAnnotationId: ID!
): BuildAnnotation!
}
type BuildAnnotationsQuery {
"""View build annotations"""
all(
filters: BuildAnnotationFiltersInput
): [BuildAnnotation!]!
"""Find a build annotation by ID"""
byId(
buildAnnotationId: ID!
): BuildAnnotation!
}
type BuildArtifacts {
applicationArchiveUrl: String
buildArtifactsUrl: String
buildUrl: String
fingerprintUrl: String @deprecated(reason: "Use 'runtime.fingerprint.debugInfoUrl' instead.")
xcodeBuildLogsUrl: String
}
input BuildCacheInput {
clear: Boolean
disabled: Boolean
key: String
paths: [String!]
}
enum BuildCredentialsSource {
LOCAL
REMOTE
}
type BuildError {
buildPhase: BuildPhase
docsUrl: String
errorCode: String!
message: String!
}
input BuildFilter {
appBuildVersion: String
appIdentifier: String
appVersion: String
buildProfile: String
channel: String
developmentClient: Boolean
distribution: DistributionType
fingerprintHash: String
hasFingerprint: Boolean
platform: AppPlatform
runtimeVersion: String
sdkVersion: String
simulator: Boolean
status: BuildStatus
}
input BuildFilterInput {
channel: String
developmentClient: Boolean
distributions: [DistributionType!]
fingerprintHash: String
hasFingerprint: Boolean
platforms: [AppPlatform!]
releaseChannel: String
runtimeVersion: String
simulator: Boolean
}
enum BuildIosEnterpriseProvisioning {
ADHOC
UNIVERSAL
}
type BuildLimitThresholdExceededMetadata {
account: Account!
thresholdsExceeded: [NotificationThresholdExceeded!]!
}
enum BuildLimitThresholdExceededMetadataType {
IOS
TOTAL
}
input BuildMetadataInput {
appBuildVersion: String
appIdentifier: String
appName: String
appVersion: String
buildProfile: String
channel: String
cliVersion: String
credentialsSource: BuildCredentialsSource
customNodeVersion: String
customWorkflowName: String
developmentClient: Boolean
distribution: DistributionType
environment: String
fingerprintHash: String
fingerprintSource: FingerprintSourceInput
gitCommitHash: String
gitCommitMessage: String
iosEnterpriseProvisioning: BuildIosEnterpriseProvisioning
isGitWorkingTreeDirty: Boolean
message: String
reactNativeVersion: String
releaseChannel: String
requiredPackageManager: String
runFromCI: Boolean
runWithNoWaitFlag: Boolean
runtimeVersion: String
sdkVersion: String
selectedImage: String
simulator: Boolean
trackingContext: JSONObject
username: String
workflow: BuildWorkflow
}
type BuildMetrics {
buildDuration: Int
buildQueueTime: Int
buildWaitTime: Int
}
enum BuildMode {
BUILD
CUSTOM
LOCAL
REPACK
RESIGN
}
type BuildMutation {
"""Cancel an EAS Build build"""
cancel: Build! @deprecated(reason: "Use cancelBuild instead")
"""Cancel an EAS Build build"""
cancelBuild(
buildId: ID!
): Build!
"""Create an Android build"""
createAndroidBuild(
appId: ID!
buildParams: BuildParamsInput
job: AndroidJobInput!
metadata: BuildMetadataInput
): CreateBuildResult!
"""Create an iOS build"""
createIosBuild(
appId: ID!
buildParams: BuildParamsInput
job: IosJobInput!
metadata: BuildMetadataInput
): CreateBuildResult!
"""Create a local build"""
createLocalBuild(
appId: ID!
artifactSource: LocalBuildArchiveSourceInput!
job: LocalBuildJobInput!
metadata: BuildMetadataInput
): CreateBuildResult!
"""Delete an EAS Build build"""
deleteBuild(
buildId: ID!
): Build!
"""Retry an Android EAS Build"""
retryAndroidBuild(
buildId: ID!
jobOverrides: AndroidJobOverridesInput
): Build!
"""Retry an EAS Build build"""
retryBuild(
buildId: ID!
): Build! @deprecated(reason: "Use retryAndroidBuild and retryIosBuild instead")
"""Retry an iOS EAS Build"""
retryIosBuild(
buildId: ID!
jobOverrides: IosJobOverridesInput
): Build!
"""Update metadata for EAS Build build"""
updateBuildMetadata(
buildId: ID!
metadata: BuildMetadataInput!
): Build!
}
interface BuildOrBuildJob {
id: ID!
}
input BuildParamsInput {
reactNativeVersion: String
resourceClass: BuildResourceClass!
sdkVersion: String
}
enum BuildPhase {
BUILDER_INFO
CLEAN_UP_CREDENTIALS
COMPLETE_BUILD
CONFIGURE_EXPO_UPDATES
CONFIGURE_XCODE_PROJECT
CUSTOM
DOWNLOAD_APPLICATION_ARCHIVE
EAS_BUILD_INTERNAL
FAIL_BUILD
FIX_GRADLEW
INSTALL_CUSTOM_TOOLS
INSTALL_DEPENDENCIES
INSTALL_PODS
ON_BUILD_CANCEL_HOOK
ON_BUILD_COMPLETE_HOOK
ON_BUILD_ERROR_HOOK
ON_BUILD_SUCCESS_HOOK
PARSE_CUSTOM_WORKFLOW_CONFIG
POST_INSTALL_HOOK
PREBUILD
PREPARE_ARTIFACTS
PREPARE_CREDENTIALS
PREPARE_PROJECT
PRE_INSTALL_HOOK
PRE_UPLOAD_ARTIFACTS_HOOK
QUEUE
READ_APP_CONFIG
READ_PACKAGE_JSON
RESTORE_CACHE
RUN_EXPO_DOCTOR
RUN_FASTLANE
RUN_GRADLEW
SAVE_CACHE
SET_UP_BUILD_ENVIRONMENT
SPIN_UP_BUILDER
START_BUILD
UNKNOWN
UPLOAD_APPLICATION_ARCHIVE
UPLOAD_ARTIFACTS @deprecated(reason: "No longer supported")
UPLOAD_BUILD_ARTIFACTS
}
type BuildPlanCreditThresholdExceededMetadata {
account: Account!
buildCreditUsage: Int!
planLimit: Int!
threshold: Int!
}
enum BuildPriority {
HIGH
NORMAL
NORMAL_PLUS
}
"""Publicly visible data for a Build."""
type BuildPublicData {
artifacts: PublicArtifacts!
buildMode: BuildMode
distribution: DistributionType
id: ID!
isForIosSimulator: Boolean!
platform: AppPlatform!
project: ProjectPublicData!
status: BuildStatus!
}
type BuildPublicDataQuery {
"""Get BuildPublicData by ID"""
byId(
id: ID!
): BuildPublicData
}
type BuildQuery {
"""Get all builds.
By default, they are sorted from latest to oldest.
Available only for admin users."""
all(
limit: Int
offset: Int
order: Order
statuses: [BuildStatus!]
): [Build!]!
"""Get all builds for a specific app.
They are sorted from latest to oldest."""
allForApp(
appId: String!
limit: Int
offset: Int
platform: AppPlatform
status: BuildStatus
): [Build!]! @deprecated(reason: "Use App.builds instead")
"""Look up EAS Build by build ID"""
byId(
buildId: ID!
): Build!
}
input BuildResignInput {
applicationArchiveSource: ProjectArchiveSourceInput
}
enum BuildResourceClass {
ANDROID_DEFAULT
ANDROID_LARGE
ANDROID_MEDIUM
IOS_DEFAULT
IOS_INTEL_LARGE @deprecated(reason: "No longer available. Use IOS_M_LARGE instead.")
IOS_INTEL_MEDIUM @deprecated(reason: "No longer available. Use IOS_M_MEDIUM instead.")
IOS_LARGE
IOS_M1_LARGE @deprecated(reason: "Use IOS_M_MEDIUM instead")
IOS_M1_MEDIUM @deprecated(reason: "Use IOS_M_MEDIUM instead")
IOS_MEDIUM
IOS_M_LARGE
IOS_M_MEDIUM
LEGACY
LINUX_LARGE
LINUX_MEDIUM
}
enum BuildRetryDisabledReason {
ALREADY_RETRIED
INVALID_STATUS
IS_GITHUB_BUILD
NOT_COMPLETED_YET
TOO_MUCH_TIME_ELAPSED
}
enum BuildStatus {
CANCELED
ERRORED
FINISHED
IN_PROGRESS
IN_QUEUE
NEW
PENDING_CANCEL
}
enum BuildTrigger {
EAS_CLI
GIT_BASED_INTEGRATION
}
input BuildUpdatesInput {
channel: String
}
enum BuildWorkflow {
GENERIC
MANAGED
UNKNOWN
}
type Card {
brand: String
cardHolder: String
expMonth: Int
expYear: Int
last4: String
}
input ChannelFilterInput {
searchTerm: String
}
type ChannelQuery {
"""Query a Channel by ID"""
byId(
"""Channel ID to use to look up channel"""
channelId: ID!
): UpdateChannel!
}
type Charge {
amount: Int!
createdAt: DateTime!
id: ID!
invoiceId: String
paid: Boolean!
receiptUrl: String
wasRefunded: Boolean!
}
type CodeSigningInfo {
alg: String!
keyid: String!
sig: String!
}
input CodeSigningInfoInput {
alg: String!
keyid: String!
sig: String!
}
type Concurrencies {
android: Int!
ios: Int!
total: Int!
}
enum ContinentCode {
AF
AN
AS
EU
NA
OC
SA
T1
}
enum CrashSampleFor {
NEWEST
OLDEST
}
input CrashesFilters {
crashKind: [WorkerDeploymentCrashKind!]
name: [String!]
}
input CreateAccessTokenInput {
actorID: ID!
note: String
}
type CreateAccessTokenResponse {
"""AccessToken created"""
accessToken: AccessToken!
"""Full token string to be used for authentication"""
token: String!
}
input CreateAndConfigureRepositoryInput {
appId: ID!
installationIdentifier: Int!
}
input CreateAndroidSubmissionInput {
appId: ID!
archiveSource: SubmissionArchiveSourceInput
archiveUrl: String
config: AndroidSubmissionConfigInput!
submittedBuildId: ID
}
type CreateBuildResult {
build: Build!
deprecationInfo: EASBuildDeprecationInfo
}
input CreateEnvironmentSecretInput {
name: String!
type: EnvironmentSecretType
value: String!
}
input CreateEnvironmentVariableInput {
environments: [EnvironmentVariableEnvironment!]
fileName: String
name: String!
overwrite: Boolean
type: EnvironmentSecretType
value: String!
visibility: EnvironmentVariableVisibility!
}
input CreateFingerprintInput {
hash: String!
source: FingerprintSourceInput
}
input CreateGitHubAppInstallationInput {
accountId: ID!
installationIdentifier: Int!
}
input CreateGitHubBuildTriggerInput {
appId: ID!
autoSubmit: Boolean!
buildProfile: String!
environment: EnvironmentVariableEnvironment
executionBehavior: GitHubBuildTriggerExecutionBehavior!
isActive: Boolean!
platform: AppPlatform!
"""A branch or tag name, or a wildcard pattern where the code change originates from. For example, `main` or `release/*`."""
sourcePattern: String!
submitProfile: String
"""A branch name or a wildcard pattern that the pull request targets. For example, `main` or `release/*`."""
targetPattern: String
type: GitHubBuildTriggerType!
}
input CreateGitHubJobRunTriggerInput {
appId: ID!
isActive: Boolean!
jobType: GitHubJobRunJobType!
sourcePattern: String!
targetPattern: String
triggerType: GitHubJobRunTriggerType!
}
input CreateGitHubRepositoryInput {
appId: ID!
githubAppInstallationId: ID!
githubRepositoryIdentifier: Int!
nodeIdentifier: String!
}
input CreateGitHubRepositorySettingsInput {
appId: ID!
"""The base directory is the directory to change to before starting a build. This string should be a properly formatted POSIX path starting with '/', './', or the name of the directory relative to the root of the repository. Valid examples include: '/apps/expo-app', './apps/expo-app', and 'apps/expo-app'. This is intended for monorepos or apps that live in a subdirectory of a repository."""
baseDirectory: String!
}
input CreateIosSubmissionInput {
appId: ID!
archiveSource: SubmissionArchiveSourceInput
archiveUrl: String
config: IosSubmissionConfigInput!
submittedBuildId: ID
}
input CreateSentryProjectInput {
appId: ID!
sentryProjectId: String!
sentryProjectSlug: String!
}
input CreateSharedEnvironmentVariableInput {
environments: [EnvironmentVariableEnvironment!]
fileName: String
isGlobal: Boolean
name: String!
overwrite: Boolean
type: EnvironmentSecretType
value: String!
visibility: EnvironmentVariableVisibility!
}
type CreateSubmissionResult {
"""Created submission"""
submission: Submission!
}
type CumulativeAverageMetrics {
averageDownloadSizeBytes: Int!
launchAssetCount: Int!
}
type CumulativeMetrics {
data: UpdatesMetricsData!
metricsAtLastTimestamp: CumulativeMetricsTotals!
}
type CumulativeMetricsOverTimeData {
data: LineChartData!
metricsAtLastTimestamp: [LineDatapoint!]!
}
type CumulativeMetricsTotals {
totalFailedInstalls: Int!
totalInstalls: Int!
}
type CumulativeUpdatesDataset {
cumulative: [Int!]!
difference: [Int!]!
id: String!
label: String!
}
input CustomBuildConfigInput {
path: String!
}
type CustomDomainDNSRecord {
dnsContent: String!
dnsName: String!
dnsType: CustomDomainDNSRecordType!
isConfigured: Boolean!
}
enum CustomDomainDNSRecordType {
A
CNAME
TXT
}
type CustomDomainMutation {
deleteCustomDomain(
customDomainId: ID!
): DeleteCustomDomainResult!
refreshCustomDomain(
customDomainId: ID!
): WorkerCustomDomain!
registerCustomDomain(
aliasName: WorkerDeploymentIdentifier
appId: ID!
hostname: String!
): WorkerCustomDomain!
}
type CustomDomainSetup {
sslErrors: [String!]
sslStatus: CustomDomainStatus
status: CustomDomainStatus!
verificationErrors: [String!]
verificationStatus: CustomDomainStatus
}
enum CustomDomainStatus {
ACTIVE
ERROR
PENDING
TIMED_OUT
}
input DatasetTimespan {
end: DateTime!
start: DateTime!
}
"""Date custom scalar type"""
scalar DateTime
type DeleteAccessTokenResult {
id: ID!
}
type DeleteAccountResult {
id: ID!
}
type DeleteAccountSSOConfigurationResult {
id: ID!
}
type DeleteAliasResult {
aliasName: WorkerDeploymentIdentifier
id: ID!
}
type DeleteAndroidAppCredentialsResult {
id: ID!
}
type DeleteAndroidKeystoreResult {
id: ID!
}
type DeleteAppleDeviceResult {
id: ID!
}
type DeleteAppleDistributionCertificateResult {
id: ID!
}
type DeleteAppleProvisioningProfileResult {
id: ID!
}
type DeleteBuildAnnotationResult {
buildAnnotationId: ID!
}
type DeleteCustomDomainResult {
appId: ID!
hostname: String!
id: ID!
}
type DeleteDiscordUserResult {
id: ID!
}
type DeleteEnvironmentSecretResult {
id: ID!
}
type DeleteEnvironmentVariableResult {
id: ID!
}
type DeleteGitHubUserResult {
id: ID!
}
type DeleteGoogleServiceAccountKeyResult {
id: ID!
}
type DeleteIosAppBuildCredentialsResult {
id: ID!
}
type DeleteIosAppCredentialsResult {
id: ID!
}
type DeleteLogRocketOrganizationResult {
accountId: ID!
}
type DeleteLogRocketProjectResult {
id: ID!
}
type DeleteRobotResult {
id: ID!
}
type DeleteSSOUserResult {
id: ID!
}
type DeleteSentryProjectResult {
id: ID!
}
type DeleteUpdateBranchResult {
id: ID!
}
type DeleteUpdateChannelResult {
id: ID!
}
type DeleteUpdateGroupResult {
group: ID!
}
type DeleteWebhookResult {
id: ID!
}
type DeleteWorkerDeploymentResult {
deploymentIdentifier: WorkerDeploymentIdentifier!
id: ID!
}
"""Represents a Deployment - a set of Builds with the same Runtime Version and Channel"""
type Deployment {
buildCount(
statuses: [BuildStatus!]
): Int!
builds(
after: String
before: String
first: Int
last: Int
): DeploymentBuildsConnection!
channel: UpdateChannel!
id: ID!
"""Deployment query field"""
insights: DeploymentInsights!
"""Ordered the same way as 'updateBranches' in UpdateChannel"""
latestUpdatesPerBranch(
limit: Int!
offset: Int!
): [LatestUpdateOnBranch!]!
runtime: Runtime!
}
type DeploymentBuildEdge {
cursor: String!
node: Build!
}
"""Represents the connection over the builds edge of a Deployment"""
type DeploymentBuildsConnection {
edges: [DeploymentBuildEdge!]!
pageInfo: PageInfo!
}
type DeploymentCumulativeMetricsOverTimeData {
data: LineChartData!
metricsAtLastTimestamp: [LineDatapoint!]!
mostPopularUpdates: [Update!]!
}
type DeploymentEdge {
cursor: String!
node: Deployment!
}
input DeploymentFilterInput {
channel: String
runtimeVersion: String
}
type DeploymentInsights {
cumulativeMetricsOverTime(
timespan: InsightsTimespan!
): DeploymentCumulativeMetricsOverTimeData!
embeddedUpdateTotalUniqueUsers(
timespan: InsightsTimespan!
): Int!
embeddedUpdateUniqueUsersOverTime(
timespan: InsightsTimespan!
): UniqueUsersOverTimeData!
id: ID!
mostPopularUpdates(
timespan: InsightsTimespan!
): [Update!]!
uniqueUsersOverTime(
timespan: InsightsTimespan!
): UniqueUsersOverTimeData!
}
type DeploymentQuery {
"""Query a Deployment by ID"""
byId(
"""Deployment ID to use to look up deployment"""
deploymentId: ID!
): Deployment!
}
type DeploymentResult {
data: UpdateDeploymentsConnection
error: String
success: Boolean!
}
type DeploymentSignedUrlResult {
deploymentIdentifier: ID!
pendingWorkerDeploymentId: ID!
url: String!
}
"""Represents the connection over the deployments edge of an App"""
type DeploymentsConnection {
edges: [DeploymentEdge!]!
pageInfo: PageInfo!
}
type DeploymentsMutation {
assignAlias(
aliasName: WorkerDeploymentIdentifier
appId: ID!
deploymentIdentifier: ID!
): WorkerDeploymentAlias!
"""Create a signed deployment URL"""
createSignedDeploymentUrl(
appId: ID!
deploymentIdentifier: ID
): DeploymentSignedUrlResult!
deleteAlias(
aliasName: WorkerDeploymentIdentifier
appId: ID!
): DeleteAliasResult!
deleteWorkerDeployment(
workerDeploymentId: ID!
): DeleteWorkerDeploymentResult!
}
"""A DevDomainName for a deployed serverless app"""
scalar DevDomainName
type DiscordUser {
discordIdentifier: String!
id: ID!
metadata: DiscordUserMetadata
userActor: UserActor!
}
type DiscordUserMetadata {
discordAvatarUrl: String!
discordDiscriminator: String!
discordUsername: String!
}
type DiscordUserMutation {
"""Delete a Discord User by ID"""
deleteDiscordUser(
id: ID!
): DeleteDiscordUserResult!
}
enum DistributionType {
INTERNAL
SIMULATOR
STORE
}
enum EASBuildBillingResourceClass {
LARGE
MEDIUM
}
type EASBuildDeprecationInfo {
message: String!
type: EASBuildDeprecationInfoType!
}
enum EASBuildDeprecationInfoType {
INTERNAL
USER_FACING
}
enum EASBuildWaiverType {
FAST_FAILED_BUILD
SYSTEM_ERROR
}
enum EASService {
BUILDS
JOBS
UPDATES
}
enum EASServiceMetric {
ASSETS_REQUESTS
BANDWIDTH_USAGE
BUILDS
LOCAL_BUILDS
MANIFEST_REQUESTS
RUN_TIME
UNIQUE_UPDATERS
UNIQUE_USERS
}
type EASTotalPlanEnablement {
total: Int!
unit: EASTotalPlanEnablementUnit!
}
enum EASTotalPlanEnablementUnit {
BUILD
BYTE
CONCURRENCY
REQUEST
UPDATER
USER
}
input EditUpdateBranchInput {
appId: ID
id: ID
name: String
newName: String!
}
type EmailSubscriptionMutation {
addUser(
addUserInput: AddUserInput!
): AddUserPayload!
}
enum EntityTypeName {
AccountEntity
AccountSSOConfigurationEntity
AndroidAppCredentialsEntity
AndroidKeystoreEntity
AppEntity
AppStoreConnectApiKeyEntity
AppleDeviceEntity
AppleDistributionCertificateEntity
AppleProvisioningProfileEntity
AppleTeamEntity
BranchEntity
ChannelEntity
CustomerEntity
GoogleServiceAccountKeyEntity
IosAppCredentialsEntity
LogRocketOrganizationEntity
LogRocketProjectEntity
UserInvitationEntity
UserPermissionEntity
WorkerCustomDomainEntity
WorkerDeploymentAliasEntity
WorkerEntity
WorkflowEntity
WorkflowRevisionEntity
}
type EnvironmentSecret {
createdAt: DateTime!
id: ID!
name: String!
type: EnvironmentSecretType!
updatedAt: DateTime!
}
type EnvironmentSecretMutation {
"""Create an environment secret for an Account"""
createEnvironmentSecretForAccount(
accountId: String!
environmentSecretData: CreateEnvironmentSecretInput!
): EnvironmentSecret!
"""Create an environment secret for an App"""
createEnvironmentSecretForApp(
appId: String!
environmentSecretData: CreateEnvironmentSecretInput!
): EnvironmentSecret!
"""Delete an environment secret"""
deleteEnvironmentSecret(
id: String!
): DeleteEnvironmentSecretResult!
}
enum EnvironmentSecretType {
FILE_BASE64
STRING
}
type EnvironmentVariable {
apps: [App!]!
createdAt: DateTime!
environments: [EnvironmentVariableEnvironment]
fileName: String
id: ID!
isGlobal: Boolean
linkedEnvironments(
appFullName: String
appId: String
): [EnvironmentVariableEnvironment]
name: String!
scope: EnvironmentVariableScope!
type: EnvironmentSecretType!
updatedAt: DateTime!
value(
includeFileContent: Boolean
): String
visibility: EnvironmentVariableVisibility
}
enum EnvironmentVariableEnvironment {
DEVELOPMENT
PREVIEW
PRODUCTION
}
type EnvironmentVariableMutation {
"""Create bulk env variables for an Account"""
createBulkEnvironmentVariablesForAccount(
accountId: ID!
environmentVariablesData: [CreateSharedEnvironmentVariableInput!]!
): [EnvironmentVariable!]!
"""Create bulk env variables for an App"""
createBulkEnvironmentVariablesForApp(
appId: ID!
environmentVariablesData: [CreateEnvironmentVariableInput!]!
): [EnvironmentVariable!]!
"""Create an environment variable for an Account"""
createEnvironmentVariableForAccount(
accountId: ID!
environmentVariableData: CreateSharedEnvironmentVariableInput!
): EnvironmentVariable!
"""Create an environment variable for an App"""
createEnvironmentVariableForApp(
appId: ID!
environmentVariableData: CreateEnvironmentVariableInput!
): EnvironmentVariable!
"""Bulk delete environment variables"""
deleteBulkEnvironmentVariables(
ids: [ID!]!
): [DeleteEnvironmentVariableResult!]!
"""Delete an environment variable"""
deleteEnvironmentVariable(
id: ID!
): DeleteEnvironmentVariableResult!
"""Bulk link shared environment variables"""
linkBulkSharedEnvironmentVariables(
linkData: [LinkSharedEnvironmentVariableInput!]!
): [EnvironmentVariable!]!
"""Link shared environment variable"""
linkSharedEnvironmentVariable(
appId: ID!
environment: EnvironmentVariableEnvironment
environmentVariableId: ID!
): EnvironmentVariable!
"""Unlink shared environment variable"""
unlinkSharedEnvironmentVariable(
appId: ID!
environment: EnvironmentVariableEnvironment
environmentVariableId: ID!
): EnvironmentVariable!
"""Bulk update environment variables"""
updateBulkEnvironmentVariables(
environmentVariablesData: [UpdateEnvironmentVariableInput!]!
): [EnvironmentVariable!]!
"""Update an environment variable"""
updateEnvironmentVariable(
environmentVariableData: UpdateEnvironmentVariableInput!
): EnvironmentVariable!
}
enum EnvironmentVariableScope {
PROJECT
SHARED
}
enum EnvironmentVariableVisibility {
PUBLIC
SECRET
SENSITIVE
}
type EnvironmentVariableWithSecret {
apps: [App!]!
createdAt: DateTime!
environments: [EnvironmentVariableEnvironment]
fileName: String
id: ID!
isGlobal: Boolean!
linkedEnvironments(
appFullName: String
appId: String
): [EnvironmentVariableEnvironment]
name: String!
scope: EnvironmentVariableScope!
sensitive: Boolean!
type: EnvironmentSecretType!
updatedAt: DateTime!
value(
includeFileContent: Boolean
): String
visibility: EnvironmentVariableVisibility!
}
type EstimatedOverageAndCost {
id: ID!
"""The limit, in units, allowed by this plan"""
limit: Float!
metadata: AccountUsageMetadata
metricType: UsageMetricType!
service: EASService!
serviceMetric: EASServiceMetric!
"""Total cost of this particular metric, in cents"""
totalCost: Int!
value: Float!
}
type EstimatedUsage {
id: ID!
limit: Float!
metricType: UsageMetricType!
service: EASService!
serviceMetric: EASServiceMetric!
value: Float!
}
enum Experiment {
ORBIT
}
type ExperimentationQuery {
"""Get device experimentation config"""
deviceConfig: JSONObject!
"""Get experimentation unit to use for device experiments. In this case, it is the IP address."""
deviceExperimentationUnit: ID!
"""Get user experimentation config"""
userConfig: JSONObject!
}
union FcmSnippet = FcmSnippetLegacy | FcmSnippetV1
type FcmSnippetLegacy {
firstFourCharacters: String!
lastFourCharacters: String!
}
type FcmSnippetV1 {
clientId: String
keyId: String!
projectId: String!
serviceAccountEmail: String!
}
enum Feature {
"""Priority Builds"""
BUILDS
"""Funds support for open source development"""
OPEN_SOURCE
"""Top Tier Support"""
SUPPORT
"""Share access to projects"""
TEAMS
}
type Fingerprint {
app: App!
buildCount: Int!
builds(
after: String
before: String
filter: FingerprintBuildsFilterInput
first: Int
last: Int
): AppBuildsConnection!
createdAt: DateTime!
debugInfoUrl: String
hash: String!
id: ID!
source: FingerprintSource
updateCount: Int!
updatedAt: DateTime!
updates(
after: String
before: String
first: Int
last: Int
): AppUpdatesConnection!
}
input FingerprintBuildsFilterInput {
channel: String
developmentClient: Boolean
distributions: [DistributionType!]
platforms: [AppPlatform!]
releaseChannel: String
simulator: Boolean
}
input FingerprintFilterInput {
hashes: [String!]
}
input FingerprintInfo {
fingerprintHash: String!
fingerprintSource: FingerprintSourceInput!
}
input FingerprintInfoGroup {
android: FingerprintInfo
ios: FingerprintInfo
web: FingerprintInfo
}
type FingerprintMutation {
"""Create or get an existing fingerprint for an App"""
createOrGetExistingFingerprint(
appId: ID!
fingerprintData: CreateFingerprintInput!
): Fingerprint!
}
type FingerprintSource {
bucketKey: String!
isDebugFingerprint: Boolean
type: FingerprintSourceType!
}
input FingerprintSourceInput {
bucketKey: String
isDebugFingerprint: Boolean
type: FingerprintSourceType
}
enum FingerprintSourceType {
GCS
}
"""The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point)."""
scalar Float
type FutureSubscription {
createdAt: DateTime!
id: ID!
meteredBillingStatus: MeteredBillingStatus!
planId: String!
recurringCents: Int
startDate: DateTime!
}
type GenerateLogRocketOrganizationLinkResult {
url: String!
}
input GenerateLogRocketOrganizationLinkingURLInput {
accountId: ID!
callbackUrl: String!
client_id: String!
client_secret: String!
orgName: String!
orgSlug: String!
state: String!
}
type GenerateLogRocketReplayTokenResult {
orgSlug: String!
replayToken: String!
}
type GenerateSentryTokenResult {
installationId: ID!
orgSlug: String!
token: String!
}
type GetSignedAssetUploadSpecificationsResult {
specifications: [String!]!
}
enum GitHubAppEnvironment {
DEVELOPMENT
PRODUCTION
STAGING
}
type GitHubAppInstallation {
"""The Expo account that owns the installation entity."""
account: Account!
actor: Actor
id: ID!
installationIdentifier: Int!
metadata: GitHubAppInstallationMetadata!
}
type GitHubAppInstallationAccessibleRepository {
defaultBranch: String
description: String
id: Int!
name: String!
nodeId: String!
owner: GitHubRepositoryOwner!
private: Boolean!
url: String!
}
enum GitHubAppInstallationAccountType {
ORGANIZATION
USER
}
type GitHubAppInstallationMetadata {
githubAccountAvatarUrl: String
"""The login of the GitHub account that owns the installation. Not the display name."""
githubAccountName: String
githubAccountType: GitHubAppInstallationAccountType
installationStatus: GitHubAppInstallationStatus!
}
type GitHubAppInstallationMutation {
"""Create a GitHub App installation for an Account"""
createGitHubAppInstallationForAccount(
githubAppInstallationData: CreateGitHubAppInstallationInput!
): GitHubAppInstallation!
"""Delete a GitHub App installation by ID"""
deleteGitHubAppInstallation(
githubAppInstallationId: ID!
): GitHubAppInstallation!
}
enum GitHubAppInstallationStatus {
ACTIVE
NOT_INSTALLED
SUSPENDED
}
type GitHubAppMutation {
"""Create a GitHub build for an app. Returns the ID of the background job receipt. Use BackgroundJobReceiptQuery to get the status of the job."""
createGitHubBuild(
buildInput: GitHubBuildInput!
): BackgroundJobReceipt!
}
type GitHubAppQuery {
appIdentifier: String!
clientIdentifier: String!
environment: GitHubAppEnvironment!
installation(
id: ID!
): GitHubAppInstallation!
name: String!
}
input GitHubBuildInput {
appId: ID!
autoSubmit: Boolean
baseDirectory: String
buildProfile: String!
environment: EnvironmentVariableEnvironment
gitRef: String!
platform: AppPlatform!
submitProfile: String
}
type GitHubBuildTrigger {
app: App!
autoSubmit: Boolean!
buildProfile: String!
createdAt: DateTime!
environment: EnvironmentVariableEnvironment
executionBehavior: GitHubBuildTriggerExecutionBehavior!
id: ID!
isActive: Boolean!
lastRunAt: DateTime
lastRunBuild: Build
lastRunErrorCode: String
lastRunErrorMessage: String
lastRunStatus: GitHubBuildTriggerRunStatus
platform: AppPlatform!
sourcePattern: String!
submitProfile: String
targetPattern: String
type: GitHubBuildTriggerType!
updatedAt: DateTime!
}
enum GitHubBuildTriggerExecutionBehavior {
ALWAYS
BASE_DIRECTORY_CHANGED
}
type GitHubBuildTriggerMutation {
"""Create GitHub build trigger for an App"""
createGitHubBuildTrigger(
githubBuildTriggerData: CreateGitHubBuildTriggerInput!
): GitHubBuildTrigger!
"""Delete GitHub build trigger by ID"""
deleteGitHubBuildTrigger(
githubBuildTriggerId: ID!
): GitHubBuildTrigger!
"""Update a GitHub build trigger by ID"""
updateGitHubBuildTrigger(
githubBuildTriggerData: UpdateGitHubBuildTriggerInput!
githubBuildTriggerId: ID!
): GitHubBuildTrigger!
}
enum GitHubBuildTriggerRunStatus {
ERRORED
SUCCESS
}
enum GitHubBuildTriggerType {
PULL_REQUEST_UPDATED
PUSH_TO_BRANCH
TAG_UPDATED
}
enum GitHubJobRunJobType {
PUBLISH_UPDATE
}
type GitHubJobRunTrigger {
app: App!
createdAt: DateTime!
id: ID!
isActive: Boolean!
jobType: GitHubJobRunJobType!
lastRunAt: DateTime
lastRunErrorCode: String
lastRunErrorMessage: String
lastRunStatus: GitHubJobRunTriggerRunStatus
sourcePattern: String!
targetPattern: String
triggerType: GitHubJobRunTriggerType!
}
type GitHubJobRunTriggerMutation {
createGitHubJobRunTrigger(
gitHubJobRunTriggerData: CreateGitHubJobRunTriggerInput!
): GitHubJobRunTrigger!
deleteGitHubJobRunTrigger(
gitHubJobRunTriggerId: ID!
): GitHubJobRunTrigger!
updateGitHubJobRunTrigger(
gitHubJobRunTriggerData: UpdateGitHubJobRunTriggerInput!
gitHubJobRunTriggerId: ID!
): GitHubJobRunTrigger!
}
enum GitHubJobRunTriggerRunStatus {
ERRORED
SUCCESS
}
enum GitHubJobRunTriggerType {
PULL_REQUEST_UPDATED
PUSH_TO_BRANCH
}
type GitHubRepository {
app: App!
createdAt: DateTime!
githubAppInstallation: GitHubAppInstallation!
githubRepositoryIdentifier: Int!
githubRepositoryUrl: String
id: ID!
metadata: GitHubRepositoryMetadata!
nodeIdentifier: String!
}
type GitHubRepositoryMetadata {
defaultBranch: String
githubRepoDescription: String
githubRepoName: String!
githubRepoOwnerName: String!
githubRepoUrl: String!
lastPushed: DateTime!
lastUpdated: DateTime!
private: Boolean!
}
type GitHubRepositoryMutation {
"""Configure EAS by pushing a commit to the default branch which updates or creates app.json, eas.json, and installs necessary dependencies."""
configureEAS(
githubRepositoryId: ID!
): BackgroundJobReceipt!
createAndConfigureRepository(
input: CreateAndConfigureRepositoryInput!
): BackgroundJobReceipt!
"""Create a GitHub repository for an App"""
createGitHubRepository(
githubRepositoryData: CreateGitHubRepositoryInput!
): GitHubRepository!
"""Delete a GitHub repository by ID"""
deleteGitHubRepository(
githubRepositoryId: ID!
): GitHubRepository!
}
type GitHubRepositoryOwner {
avatarUrl: String!
id: Int!
login: String!
url: String!
}
type GitHubRepositoryPaginationResult {
repositories: [GitHubAppInstallationAccessibleRepository!]!
totalCount: Int!
}
type GitHubRepositorySettings {
app: App!
baseDirectory: String!
id: ID!
}
type GitHubRepositorySettingsMutation {
"""Create GitHub repository settings for an App"""
createGitHubRepositorySettings(
githubRepositorySettingsData: CreateGitHubRepositorySettingsInput!
): GitHubRepositorySettings!
"""Delete GitHub repository settings by ID"""
deleteGitHubRepositorySettings(
githubRepositorySettingsId: ID!
): GitHubRepositorySettings!
"""Update GitHub repository settings"""
updateGitHubRepositorySettings(
githubRepositorySettingsData: UpdateGitHubRepositorySettingsInput!
githubRepositorySettingsId: ID!
): GitHubRepositorySettings!
}
type GitHubUser {
githubUserIdentifier: String!
id: ID!
metadata: GitHubUserMetadata
userActor: UserActor!
}
type GitHubUserMetadata {
avatarUrl: String!
login: String!
name: String
url: String!
}
type GitHubUserMutation {
"""Delete a GitHub User by ID"""
deleteGitHubUser(
id: ID!
): DeleteGitHubUserResult!
"""Generate a GitHub User Access Token"""
generateGitHubUserAccessToken: String
}
type GoogleServiceAccountKey {
account: Account!
clientEmail: String!
clientIdentifier: String!
createdAt: DateTime!
id: ID!
keyJson: String!
privateKeyIdentifier: String!
projectIdentifier: String!
updatedAt: DateTime!
}
input GoogleServiceAccountKeyInput {
jsonKey: JSONObject!
}
type GoogleServiceAccountKeyMutation {
"""Create a Google Service Account Key"""
createGoogleServiceAccountKey(
accountId: ID!
googleServiceAccountKeyInput: GoogleServiceAccountKeyInput!
): GoogleServiceAccountKey!
"""Delete a Google Service Account Key"""
deleteGoogleServiceAccountKey(
id: ID!
): DeleteGoogleServiceAccountKeyResult!
}
type GoogleServiceAccountKeyQuery {
byId(
id: ID!
): GoogleServiceAccountKey!
}
"""The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID."""
scalar ID
input InsightsFilter {
"""The value field is always sent from the client as a string,
and then it's parsed server-side according to the filterType"""
filterType: InsightsFilterType!
value: String!
}
enum InsightsFilterType {
PLATFORM
}
input InsightsTimespan {
end: DateTime!
start: DateTime!
}
"""The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1."""
scalar Int
type Invoice {
"""The total amount due for the invoice, in cents"""
amountDue: Int!
"""The total amount that has been paid, considering any discounts or account credit. Value is in cents."""
amountPaid: Int!
"""The total amount that needs to be paid, considering any discounts or account credit. Value is in cents."""
amountRemaining: Int!
discount: InvoiceDiscount
id: ID!
lineItems: [InvoiceLineItem!]!
period: InvoicePeriod!
startingBalance: Int!
subtotal: Int!
total: Int!
totalDiscountedAmount: Int!
}
type InvoiceDiscount {
"""The coupon's discount value, in percentage or in dollar amount"""
amount: Int!
duration: String!
durationInMonths: Int
id: ID!
name: String!
type: InvoiceDiscountType!
}
enum InvoiceDiscountType {
AMOUNT
PERCENTAGE
}
type InvoiceLineItem {
"""Line-item amount in cents"""
amount: Int!
description: String!
id: ID!
metadata: JSONObject!
period: InvoicePeriod!
plan: InvoiceLineItemPlan! @deprecated(reason: "Use 'price' instead")
price: StripePrice
proration: Boolean!
quantity: Int!
"""The unit amount excluding tax, in cents"""
unitAmountExcludingTax: Float
}
type InvoiceLineItemPlan {
id: ID!
name: String
}
type InvoicePeriod {
end: DateTime!
start: DateTime!
}
type InvoiceQuery {
"""Previews the invoice for the specified number of additional concurrencies.
This is the total number of concurrencies the customer wishes to purchase
on top of their base plan, not the relative change in concurrencies
the customer wishes to make. For example, specify "3" if the customer has
two add-on concurrencies and wishes to purchase one more."""
previewInvoiceForAdditionalConcurrenciesCountUpdate(
accountID: ID!
additionalConcurrenciesCount: Int!
): Invoice
"""Preview an upgrade subscription invoice, with proration"""
previewInvoiceForSubscriptionUpdate(
accountId: String!
couponCode: String
newPlanIdentifier: String!
): Invoice!
}
type IosAppBuildCredentials {
appleDevices: [AppleDevice] @deprecated(reason: "Get Apple Devices from AppleProvisioningProfile instead")
distributionCertificate: AppleDistributionCertificate
id: ID!
iosAppCredentials: IosAppCredentials!
iosDistributionType: IosDistributionType!
provisioningProfile: AppleProvisioningProfile
}
input IosAppBuildCredentialsFilter {
iosDistributionType: IosDistributionType
}
input IosAppBuildCredentialsInput {
distributionCertificateId: ID!
iosDistributionType: IosDistributionType!
provisioningProfileId: ID!
}
type IosAppBuildCredentialsMutation {
"""Create a set of build credentials for an iOS app"""
createIosAppBuildCredentials(
iosAppBuildCredentialsInput: IosAppBuildCredentialsInput!
iosAppCredentialsId: ID!
): IosAppBuildCredentials!
"""Disassociate the build credentials from an iOS app"""
deleteIosAppBuildCredentials(
id: ID!
): DeleteIosAppBuildCredentialsResult!
"""Set the distribution certificate to be used for an iOS app"""
setDistributionCertificate(
distributionCertificateId: ID!
id: ID!
): IosAppBuildCredentials!
"""Set the provisioning profile to be used for an iOS app"""
setProvisioningProfile(
id: ID!
provisioningProfileId: ID!
): IosAppBuildCredentials!
}
type IosAppCredentials {
app: App!
appStoreConnectApiKeyForBuilds: AppStoreConnectApiKey
appStoreConnectApiKeyForSubmissions: AppStoreConnectApiKey
appleAppIdentifier: AppleAppIdentifier!
appleTeam: AppleTeam
id: ID!
iosAppBuildCredentialsArray(
filter: IosAppBuildCredentialsFilter
): [IosAppBuildCredentials!]! @deprecated(reason: "use iosAppBuildCredentialsList instead")
iosAppBuildCredentialsList(
filter: IosAppBuildCredentialsFilter
): [IosAppBuildCredentials!]!
pushKey: ApplePushKey
}
input IosAppCredentialsFilter {
appleAppIdentifierId: String
}
input IosAppCredentialsInput {
appStoreConnectApiKeyForBuildsId: ID
appStoreConnectApiKeyForSubmissionsId: ID
appleTeamId: ID
pushKeyId: ID
}
type IosAppCredentialsMutation {
"""Create a set of credentials for an iOS app"""
createIosAppCredentials(
appId: ID!
appleAppIdentifierId: ID!
iosAppCredentialsInput: IosAppCredentialsInput!
): IosAppCredentials!
"""Delete a set of credentials for an iOS app"""
deleteIosAppCredentials(
id: ID!
): DeleteIosAppCredentialsResult!
"""Set the App Store Connect Api Key to be used for submitting an iOS app"""
setAppStoreConnectApiKeyForSubmissions(
ascApiKeyId: ID!
id: ID!
): IosAppCredentials!
"""Set the push key to be used in an iOS app"""
setPushKey(
id: ID!
pushKeyId: ID!
): IosAppCredentials!
"""Update a set of credentials for an iOS app"""
updateIosAppCredentials(
id: ID!
iosAppCredentialsInput: IosAppCredentialsInput!
): IosAppCredentials!
}
enum IosBuildType {
"""@deprecated Use developmentClient option instead."""
DEVELOPMENT_CLIENT
RELEASE
}
input IosBuilderEnvironmentInput {
bun: String
bundler: String
cocoapods: String
corepack: Boolean
env: JSONObject
expoCli: String
fastlane: String
image: String
node: String
pnpm: String
yarn: String
}
enum IosDistributionType {
AD_HOC
APP_STORE
DEVELOPMENT
ENTERPRISE
}
input IosJobDistributionCertificateInput {
dataBase64: String!
password: String!
}
input IosJobInput {
applicationArchivePath: String
artifactPath: String @deprecated
buildArtifactPaths: [String!]
buildConfiguration: String
buildProfile: String
buildType: IosBuildType @deprecated
builderEnvironment: IosBuilderEnvironmentInput
cache: BuildCacheInput
customBuildConfig: CustomBuildConfigInput
developmentClient: Boolean
distribution: DistributionType @deprecated
environment: EnvironmentVariableEnvironment
experimental: JSONObject
loggerLevel: WorkerLoggerLevel
mode: BuildMode
projectArchive: ProjectArchiveSourceInput!
projectRootDirectory: String!
releaseChannel: String
scheme: String
secrets: IosJobSecretsInput
simulator: Boolean
triggeredBy: BuildTrigger
type: BuildWorkflow!
updates: BuildUpdatesInput
username: String
version: IosJobVersionInput
}
input IosJobOverridesInput {
applicationArchivePath: String
artifactPath: String @deprecated
buildArtifactPaths: [String!]
buildConfiguration: String
buildProfile: String
buildType: IosBuildType @deprecated
builderEnvironment: IosBuilderEnvironmentInput
cache: BuildCacheInput
customBuildConfig: CustomBuildConfigInput
developmentClient: Boolean
distribution: DistributionType @deprecated
experimental: JSONObject
loggerLevel: WorkerLoggerLevel
mode: BuildMode
releaseChannel: String
resign: BuildResignInput
scheme: String
secrets: IosJobSecretsInput
simulator: Boolean
type: BuildWorkflow
updates: BuildUpdatesInput
username: String
version: IosJobVersionInput
}
input IosJobSecretsInput {
buildCredentials: [IosJobTargetCredentialsInput]
robotAccessToken: String
}
input IosJobTargetCredentialsInput {
distributionCertificate: IosJobDistributionCertificateInput!
provisioningProfileBase64: String!
targetName: String!
}
input IosJobVersionInput {
buildNumber: String!
}
enum IosManagedBuildType {
"""@deprecated Use developmentClient option instead."""
DEVELOPMENT_CLIENT
RELEASE
}
enum IosSchemeBuildConfiguration {
DEBUG
RELEASE
}
type IosSubmissionConfig {
appleIdUsername: String
ascApiKeyId: String
ascAppIdentifier: String!
}
input IosSubmissionConfigInput {
appleAppSpecificPassword: String
appleIdUsername: String
archiveUrl: String
ascApiKey: AscApiKeyInput
ascApiKeyId: String
ascAppIdentifier: String!
changelog: String
groups: [String!]
isVerboseFastlaneEnabled: Boolean
}
"""The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf)."""
scalar JSON
"""The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf)."""
scalar JSONObject
"""Represents a Turtle Job Run"""
type JobRun {
app: App!
artifacts: [WorkflowArtifact!]!
childJobRun: JobRun @deprecated(reason: "No longer supported")
createdAt: DateTime!
displayName: String
endedAt: DateTime
errors: [JobRunError!]!
expiresAt: DateTime!
gitCommitHash: String
gitCommitMessage: String
gitRef: String
id: ID!
initiatingActor: Actor
isWaived: Boolean!
logFileUrls: [String!]!
name: String!
priority: JobRunPriority!
startedAt: DateTime
status: JobRunStatus!
updateGroups: [[Update!]!]!
}
type JobRunError {
buildPhase: String
docsUrl: String
errorCode: String!
message: String!
}
type JobRunMutation {
"""Cancel an EAS Job Run"""
cancelJobRun(
jobRunId: ID!
): JobRun!
}
enum JobRunPriority {
HIGH
NORMAL
}
type JobRunQuery {
"""Look up EAS Job Run by ID"""
byId(
jobRunId: ID!
): JobRun!
}
enum JobRunStatus {
CANCELED
ERRORED
FINISHED
IN_PROGRESS
IN_QUEUE
NEW
PENDING_CANCEL
}
type KeystoreGenerationUrl {
id: ID!
url: String!
}
type KeystoreGenerationUrlMutation {
"""Create a Keystore Generation URL"""
createKeystoreGenerationUrl: KeystoreGenerationUrl!
}
type LatestUpdateOnBranch {
branchId: String!
update: Update
}
type LeaveAccountResult {
success: Boolean!
}
type LineChartData {
datasets: [LineDataset!]!
labels: [String!]!
}
type LineDatapoint {
data: Int!
id: ID!
label: String!
}
type LineDataset {
data: [Int!]!
id: ID!
label: String!
}
input LinkLogRocketOrganizationToExpoAccountInput {
accountId: ID!
client_id: String!
client_secret: String!
orgName: String!
orgSlug: String!
state: String!
}
input LinkSentryInstallationToExpoAccountInput {
accountId: ID!
code: String!
installationId: ID!
sentryOrgSlug: String!
}
input LinkSharedEnvironmentVariableInput {
appId: ID!
environment: EnvironmentVariableEnvironment
environmentVariableId: ID!
}
input LocalBuildArchiveSourceInput {
bucketKey: String
type: LocalBuildArchiveSourceType!
}
enum LocalBuildArchiveSourceType {
GCS
}
input LocalBuildJobInput {
developmentClient: Boolean
platform: AppPlatform!
simulator: Boolean
}
type LogNameTypeMapping {
publicName: String!
typeName: EntityTypeName!
}
type LogRocketOrganization {
account: Account!
createdAt: DateTime!
id: ID!
orgName: String!
orgSlug: String!
}
type LogRocketOrganizationMutation {
"""Delete a LogRocket organization by ID"""
deleteLogRocketOrganization(
accountId: ID!
): DeleteLogRocketOrganizationResult!
"""Generate a LogRocket linking URL"""
generateLogRocketOrganizationLinkingURL(
input: GenerateLogRocketOrganizationLinkingURLInput!
): GenerateLogRocketOrganizationLinkResult!
"""Generate a LogRocket replay token for an organization"""
generateLogRocketReplayToken(
accountId: ID!
): GenerateLogRocketReplayTokenResult!
"""Link a LogRocket organization to an Expo account"""
linkLogRocketOrganizationToExpoAccount(
input: LinkLogRocketOrganizationToExpoAccountInput!
): LogRocketOrganization!
}
type LogRocketProject {
app: App!
createdAt: DateTime!
id: ID!
logRocketOrgId: ID!
logRocketProjectSlug: String!
updatedAt: DateTime!
}
type LogRocketProjectMutation {
"""Create a LogRocket project"""
createLogRocketProject(
appId: ID!
logRocketProjectSlug: String!
): LogRocketProject!
"""Delete a LogRocket project by ID"""
deleteLogRocketProject(
logRocketProjectId: ID!
): DeleteLogRocketProjectResult!
}
input LogsTimespan {
end: DateTime!
start: DateTime
}
enum MailchimpAudience {
EXPO_DEVELOPERS
EXPO_DEVELOPER_ONBOARDING
LAUNCH_PARTY_2024
NONPROD_EXPO_DEVELOPERS
}
enum MailchimpTag {
DEV_CLIENT_USERS
DID_SUBSCRIBE_TO_EAS_AT_LEAST_ONCE
EAS_MASTER_LIST
NEWSLETTER_SIGNUP_LIST
}
type MailchimpTagPayload {
id: Int
name: String
}
type MeMutation {
"""Add an additional second factor device"""
addSecondFactorDevice(
deviceConfiguration: SecondFactorDeviceConfiguration!
otp: String
): SecondFactorDeviceConfigurationResult!
"""Certify an initiated second factor authentication method for the current user"""
certifySecondFactorDevice(
otp: String!
): SecondFactorBooleanResult!
"""Create a new Account and grant this User the owner Role"""
createAccount(
accountData: AccountDataInput!
): Account!
"""Delete a second factor device"""
deleteSecondFactorDevice(
otp: String
userSecondFactorDeviceId: ID!
): SecondFactorBooleanResult!
"""Delete a Snack that the current user owns"""
deleteSnack(
snackId: ID!
): Snack!
"""Disable all second factor authentication for the current user"""
disableSecondFactorAuthentication(
otp: String
): SecondFactorBooleanResult!
"""Initiate setup of two-factor authentication for the current user"""
initiateSecondFactorAuthentication(
deviceConfigurations: [SecondFactorDeviceConfiguration!]!
recaptchaResponseToken: String
): SecondFactorInitiationResult!
"""Leave an Account (revoke own permissions on Account)"""
leaveAccount(
accountId: ID!
): LeaveAccountResult!
"""Purge unfinished two-factor authentication setup for the current user if not fully-set-up"""
purgeUnfinishedSecondFactorAuthentication: SecondFactorBooleanResult!
"""Regenerate backup codes for the current user"""
regenerateSecondFactorBackupCodes(
otp: String
): SecondFactorRegenerateBackupCodesResult!
"""Schedule deletion for Account created via createAccount"""
scheduleAccountDeletion(
accountId: ID!
): BackgroundJobReceipt!
"""Schedule deletion of the current regular user"""
scheduleCurrentUserDeletion: BackgroundJobReceipt!
"""Schedule deletion of a SSO user. Actor must be an owner on the SSO user's SSO account."""
scheduleSSOUserDeletionAsSSOAccountOwner(
ssoUserId: ID!
): BackgroundJobReceipt!
"""Send SMS OTP to a second factor device for use during device setup or during change confirmation"""
sendSMSOTPToSecondFactorDevice(
userSecondFactorDeviceId: ID!
): SecondFactorBooleanResult!
"""Sets user preferences. This is a key-value store for user-specific settings. Provided values are
key-level merged with existing values."""
setPreferences(
preferences: UserPreferencesInput!
): UserPreferences!
"""Set the user's primary second factor device"""
setPrimarySecondFactorDevice(
userSecondFactorDeviceId: ID!
): SecondFactorBooleanResult!
"""Transfer project to a different Account"""
transferApp(
appId: ID!
destinationAccountId: ID!
): App!
"""Update an App that the current user owns"""
updateApp(
appData: AppDataInput!
): App!
"""Update the current regular user's data"""
updateProfile(
userData: UserDataInput!
): User!
"""Update the current SSO user's data"""
updateSSOProfile(
userData: SSOUserDataInput!
): SSOUser!
}
type MeteredBillingStatus {
EAS_BUILD: Boolean!
EAS_UPDATE: Boolean!
}
type Notification {
accountName: String!
createdAt: DateTime!
event: NotificationEvent!
id: ID!
isRead: Boolean!
metadata: NotificationMetadata
type: NotificationType!
updatedAt: DateTime!
websiteMessage: String!
}
enum NotificationEvent {
BUILD_COMPLETE
BUILD_ERRORED
BUILD_LIMIT_THRESHOLD_EXCEEDED
BUILD_PLAN_CREDIT_THRESHOLD_EXCEEDED
SUBMISSION_COMPLETE
SUBMISSION_ERRORED
TEST
}
union NotificationMetadata = BuildLimitThresholdExceededMetadata | BuildPlanCreditThresholdExceededMetadata | TestNotificationMetadata
type NotificationSubscription {
account: Account
actor: Actor
app: App
createdAt: DateTime!
event: NotificationEvent!
id: ID!
type: NotificationType!
}
input NotificationSubscriptionFilter {
accountId: ID
appId: ID
event: NotificationEvent
type: NotificationType
}
type NotificationSubscriptionMutation {
subscribeToEventForAccount(
input: AccountNotificationSubscriptionInput!
): SubscribeToNotificationResult!
subscribeToEventForApp(
input: AppNotificationSubscriptionInput!
): SubscribeToNotificationResult!
unsubscribe(
id: ID!
): UnsubscribeFromNotificationResult!
}
type NotificationThresholdExceeded {
count: Int!
limit: Int!
threshold: Int!
type: BuildLimitThresholdExceededMetadataType!
}
enum NotificationType {
EMAIL
WEB
}
type NotificationsSentOverTimeData {
data: LineChartData!
}
type Offer {
features: [Feature]
id: ID!
prerequisite: OfferPrerequisite
price: Int!
quantity: Int
stripeId: ID!
trialLength: Int
type: OfferType!
}
type OfferPrerequisite {
stripeIds: [String!]!
type: String!
}
enum OfferType {
"""Addon, or supplementary subscription"""
ADDON
"""Advanced Purchase of Paid Resource"""
PREPAID
"""Term subscription"""
SUBSCRIPTION
}
enum OnboardingDeviceType {
DEVICE
SIMULATOR
}
enum OnboardingEnvironment {
DEV_BUILD
EXPO_GO
}
enum Order {
ASC
DESC
}
type PageInfo {
endCursor: String
hasNextPage: Boolean!
hasPreviousPage: Boolean!
startCursor: String
}
input PartialManifest {
assets: [PartialManifestAsset!]!
extra: JSONObject
launchAsset: PartialManifestAsset!
}
input PartialManifestAsset {
bundleKey: String!
contentType: String!
fileExtension: String
fileSHA256: String!
storageKey: String!
}
type PaymentDetails {
address: Address
card: Card
id: ID!
}
type PendingSentryInstallation {
account: Account!
createdAt: DateTime!
id: ID!
installationId: String!
orgSlug: String!
}
enum Permission {
ADMIN
OWN
PUBLISH
VIEW
}
union PlanEnablement = Concurrencies | EASTotalPlanEnablement
interface Project {
description: String!
fullName: String!
iconUrl: String @deprecated(reason: "No longer supported")
id: ID!
name: String!
published: Boolean!
slug: String!
updated: DateTime!
username: String!
}
input ProjectArchiveSourceInput {
bucketKey: String
gitRef: String
metadataLocation: String
repositoryUrl: String
type: ProjectArchiveSourceType!
url: String
}
enum ProjectArchiveSourceType {
GCS
GIT
NONE
URL
}
type ProjectPublicData {
fullName: String!
id: ID!
}
type ProjectQuery {
byUsernameAndSlug(
platform: String
sdkVersions: [String]
slug: String!
username: String!
): Project! @deprecated(reason: "See byAccountNameAndSlug")
}
type PublicArtifacts {
applicationArchiveUrl: String
buildUrl: String
}
input PublishUpdateGroupInput {
assetHostOverride: String
assetMapGroup: AssetMapGroup
awaitingCodeSigningInfo: Boolean
branchId: String!
environment: EnvironmentVariableEnvironment
excludedAssets: [PartialManifestAsset!]
fingerprintInfoGroup: FingerprintInfoGroup
gitCommitHash: String
isGitWorkingTreeDirty: Boolean
manifestHostOverride: String
message: String
rollBackToEmbeddedInfoGroup: UpdateRollBackToEmbeddedGroup
rolloutInfoGroup: UpdateRolloutInfoGroup
runtimeVersion: String!
turtleJobRunId: String
updateInfoGroup: UpdateInfoGroup
}
enum RequestMethod {
DELETE
GET
HEAD
OPTIONS
PATCH
POST
PUT
}
input RequestsFilters {
cacheStatus: [ResponseCacheStatus!]
continent: [ContinentCode!]
country: [String!]
hasCustomDomainOrigin: Boolean
isAsset: Boolean
isCrash: Boolean
isLimitExceeded: Boolean
isVerifiedBot: Boolean
method: [RequestMethod!]
os: [UserAgentOS!]
pathname: String
platform: [UserAgentPlatform!]
requestId: [WorkerDeploymentRequestID!]
responseType: [ResponseType!]
status: [Int!]
statusType: [ResponseStatusType!]
}
input RequestsOrderBy {
direction: RequestsOrderByDirection
field: RequestsOrderByField!
}
enum RequestsOrderByDirection {
ASC
DESC
}
enum RequestsOrderByField {
ASSETS_SUM
CACHE_HIT_RATIO
CACHE_PASS_RATIO
CRASHES_SUM
DURATION
REQUESTS_SUM
}
type RescindUserInvitationResult {
id: ID!
}
enum ResourceClassExperiment {
C3D
N2
}
enum ResponseCacheStatus {
HIT
MISS
PASS
}
enum ResponseStatusType {
CLIENT_ERROR
NONE
REDIRECT
SERVER_ERROR
SUCCESSFUL
}
enum ResponseType {
ASSET
CRASH
REJECTED
ROUTE
}
"""Represents a robot (not human) actor."""
type Robot implements Actor {
"""Access Tokens belonging to this actor"""
accessTokens: [AccessToken!]!
"""Associated accounts"""
accounts: [Account!]!
created: DateTime!
displayName: String!
"""Experiments associated with this actor"""
experiments: [ActorExperiment!]!
"""Server feature gate values for this actor, optionally filtering by desired gates.
Only resolves for the viewer."""
featureGates(
filter: [String!]
): JSONObject!
firstName: String
githubAppInstallations: [GitHubAppInstallation!]!
id: ID!
isExpoAdmin: Boolean!
isManagedByGitHubApp: Boolean!
lastDeletionAttemptTime: DateTime
}
input RobotDataInput {
name: String
}
type RobotMutation {
"""Create a Robot and grant it Permissions on an Account"""
createRobotForAccount(
accountID: String!
permissions: [Permission!]!
robotData: RobotDataInput!
): Robot!
"""Schedule deletion of a Robot"""
scheduleRobotDeletion(
id: ID!
): BackgroundJobReceipt!
"""Update a Robot"""
updateRobot(
id: String!
robotData: RobotDataInput!
): Robot!
}
enum Role {
ADMIN
CUSTOM
DEVELOPER
HAS_ADMIN
NOT_ADMIN
OWNER
VIEW_ONLY
}
type RootMutation {
"""This is a placeholder field"""
_doNotUse: String @deprecated(reason: "Not used.")
"""Mutations that create, read, update, and delete AccessTokens for Actors"""
accessToken: AccessTokenMutation!
"""Mutations that modify an Account"""
account(
accountName: ID
): AccountMutation!
"""Mutations that create, update, and delete an AccountSSOConfiguration"""
accountSSOConfiguration: AccountSSOConfigurationMutation!
"""Mutations for Actor experiments"""
actorExperiment: ActorExperimentMutation!
"""Mutations that modify the build credentials for an Android app"""
androidAppBuildCredentials: AndroidAppBuildCredentialsMutation!
"""Mutations that modify the credentials for an Android app"""
androidAppCredentials: AndroidAppCredentialsMutation!
"""Mutations that modify an FCM V0/Legacy credential"""
androidFcm: AndroidFcmMutation!
"""Mutations that modify a Keystore"""
androidKeystore: AndroidKeystoreMutation!
"""Mutations that modify an App"""
app(
appId: ID
): AppMutation
"""Mutations that modify an App Store Connect Api Key"""
appStoreConnectApiKey: AppStoreConnectApiKeyMutation!
"""Mutations that modify an AppVersion"""
appVersion: AppVersionMutation!
"""Mutations that modify an Identifier for an iOS App"""
appleAppIdentifier: AppleAppIdentifierMutation!
"""Mutations that modify an Apple Device"""
appleDevice: AppleDeviceMutation!
"""Mutations that modify an Apple Device registration request"""
appleDeviceRegistrationRequest: AppleDeviceRegistrationRequestMutation!
"""Mutations that modify a Distribution Certificate"""
appleDistributionCertificate: AppleDistributionCertificateMutation!
"""Mutations that modify a Provisioning Profile"""
appleProvisioningProfile: AppleProvisioningProfileMutation!
"""Mutations that modify an Apple Push Notification key"""
applePushKey: ApplePushKeyMutation!
"""Mutations that modify an Apple Team"""
appleTeam: AppleTeamMutation!
asset: AssetMutation!
auditLog: AuditLogMutation!
"""Mutations that modify an EAS Build"""
build(
buildId: ID
): BuildMutation!
"""Mutations that create, update, and delete Build Annotations"""
buildAnnotation: BuildAnnotationMutation!
customDomain: CustomDomainMutation!
deployments: DeploymentsMutation!
"""Mutations that assign or modify DevDomainNames for apps"""
devDomainName: AppDevDomainNameMutation!
"""Mutations for Discord users"""
discordUser: DiscordUserMutation!
"""Mutations that modify an EmailSubscription"""
emailSubscription: EmailSubscriptionMutation!
"""Mutations that create and delete EnvironmentSecrets"""
environmentSecret: EnvironmentSecretMutation!
"""Mutations that create and delete EnvironmentVariables"""
environmentVariable: EnvironmentVariableMutation!
"""Mutations that modify App fingerprints"""
fingerprint: FingerprintMutation!
"""Mutations that utilize services facilitated by the GitHub App"""
githubApp: GitHubAppMutation!
"""Mutations for GitHub App installations"""
githubAppInstallation: GitHubAppInstallationMutation!
"""Mutations for GitHub build triggers"""
githubBuildTrigger: GitHubBuildTriggerMutation!
gitHubJobRunTrigger: GitHubJobRunTriggerMutation!
"""Mutations for GitHub repositories"""
githubRepository: GitHubRepositoryMutation!
"""Mutations for GitHub repository settings"""
githubRepositorySettings: GitHubRepositorySettingsMutation!
"""Mutations for GitHub users"""
githubUser: GitHubUserMutation!
"""Mutations that modify a Google Service Account Key"""
googleServiceAccountKey: GoogleServiceAccountKeyMutation!
"""Mutations that modify the build credentials for an iOS app"""
iosAppBuildCredentials: IosAppBuildCredentialsMutation!
"""Mutations that modify the credentials for an iOS app"""
iosAppCredentials: IosAppCredentialsMutation!
"""Mutations that modify an EAS Build"""
jobRun: JobRunMutation!
keystoreGenerationUrl: KeystoreGenerationUrlMutation!
"""Mutations for LogRocket organizations"""
logRocketOrganization: LogRocketOrganizationMutation!
"""Mutations for LogRocket projects"""
logRocketProject: LogRocketProjectMutation!
"""Mutations that modify the currently authenticated User"""
me: MeMutation!
"""Mutations that modify a NotificationSubscription"""
notificationSubscription: NotificationSubscriptionMutation!
"""Mutations that create, update, and delete Robots"""
robot: RobotMutation!
"""Mutations for Sentry installations"""
sentryInstallation: SentryInstallationMutation!
"""Mutations for Sentry projects"""
sentryProject: SentryProjectMutation!
"""Mutations that modify an EAS Submit submission"""
submission: SubmissionMutation!
update: UpdateMutation!
updateBranch: UpdateBranchMutation!
updateChannel: UpdateChannelMutation!
uploadSession: UploadSession!
"""Mutations that create, update, and delete pinned apps"""
userAppPins: UserAppPinMutation!
userAuditLog: UserAuditLogMutation!
"""Mutations that create, delete, and accept UserInvitations"""
userInvitation: UserInvitationMutation!
"""Mutations that create, delete, update Webhooks"""
webhook: WebhookMutation!
"""Mutations that modify a websiteNotification"""
websiteNotifications: WebsiteNotificationMutation!
workflowJobApproval: WorkflowJobApprovalMutation!
workflowRevision: WorkflowRevisionMutation!
workflowRun: WorkflowRunMutation!
}
type RootQuery {
"""This is a placeholder field"""
_doNotUse: String @deprecated(reason: "Not used.")
"""Top-level query object for querying Accounts."""
account: AccountQuery!
"""Top-level query object for querying AccountSSOConfigurationPublicData"""
accountSSOConfigurationPublicData: AccountSSOConfigurationPublicDataQuery!
"""Top-level query object for querying Actors."""
actor: ActorQuery! @deprecated(reason: "Public actor queries are no longer supported")
"""Public apps in the app directory"""
allPublicApps(
"""Filter to use to filter public app list"""
filter: AppsFilter!
limit: Int
offset: Int
"""Method to sort by"""
sort: AppSort!
): [App] @deprecated(reason: "Use 'all' field under 'app'.")
app: AppQuery!
"""Look up app by app id"""
appByAppId(
appId: String!
): App @deprecated(reason: "Use 'byId' field under 'app'.")
"""Top-level query object for querying App Store Connect API Keys."""
appStoreConnectApiKey: AppStoreConnectApiKeyQuery!
"""Top-level query object for querying Apple Device registration requests."""
appleDeviceRegistrationRequest: AppleDeviceRegistrationRequestQuery!
"""Top-level query object for querying Apple Teams."""
appleTeam: AppleTeamQuery!
asset: AssetQuery!
"""Top-level query object for querying Account Audit Logs."""
auditLogs: AuditLogQuery!
backgroundJobReceipt: BackgroundJobReceiptQuery!
"""Top-level query object for querying Branchs."""
branches: BranchQuery!
"""Top-level query object for querying annotations."""
buildAnnotations: BuildAnnotationsQuery!
"""Top-level query object for querying BuildPublicData publicly."""
buildPublicData: BuildPublicDataQuery!
builds: BuildQuery!
"""Top-level query object for querying Channels."""
channels: ChannelQuery!
"""Top-level query object for querying Deployments."""
deployments: DeploymentQuery!
"""Top-level query object for querying Experimentation configuration."""
experimentation: ExperimentationQuery!
"""Top-level query object for querying GitHub App information and resources it has access to."""
githubApp: GitHubAppQuery!
"""Top-level query object for querying Google Service Account Keys."""
googleServiceAccountKey: GoogleServiceAccountKeyQuery!
"""Top-level query object for querying Stripe Invoices."""
invoice: InvoiceQuery!
jobRun: JobRunQuery!
"""If authenticated as a typical end user, this is the appropriate top-level
query object"""
me: User
"""If authenticated as any type of Actor, this is the appropriate top-level
query object"""
meActor: Actor
"""If authenticated as any type of human end user (Actor types User or SSOUser),
this is the appropriate top-level query object"""
meUserActor: UserActor
project: ProjectQuery! @deprecated(reason: "Snacks and apps should be queried separately")
"""Top-level query object for querying Runtimes."""
runtimes: RuntimeQuery!
snack: SnackQuery!
"""Top-level query object for querying Expo status page services."""
statuspageService: StatuspageServiceQuery!
submissions: SubmissionQuery!
"""Top-level query object for querying Updates."""
updates: UpdateQuery!
"""fetch all updates in a group"""
updatesByGroup(
group: ID!
platform: String
): [Update!]!
"""Top-level query object for querying Users."""
user: UserQuery! @deprecated(reason: "Public user queries are no longer supported")
"""Top-level query object for querying UserActors."""
userActor: UserActorQuery! @deprecated(reason: "Public user queries are no longer supported")
"""Top-level query object for querying UserActorPublicData publicly."""
userActorPublicData: UserActorPublicDataQuery!
"""Top-level query object for querying User Audit Logs."""
userAuditLogs: UserAuditLogQuery!
userByUserId(
userId: String!
): User @deprecated(reason: "Use 'byId' field under 'user'.")
userByUsername(
username: String!
): User @deprecated(reason: "Use 'byUsername' field under 'user'.")
"""Top-level query object for querying UserInvitationPublicData publicly."""
userInvitationPublicData: UserInvitationPublicDataQuery!
"""If authenticated as a typical end user, this is the appropriate top-level
query object"""
viewer: User
"""Top-level query object for querying Webhooks."""
webhook: WebhookQuery!
workerDeployment: WorkerDeploymentQuery!
workflowJobs: WorkflowJobQuery!
workflowRevisions: WorkflowRevisionQuery!
workflowRuns: WorkflowRunQuery!
workflows: WorkflowQuery!
}
type Runtime {
app: App!
builds(
after: String
before: String
filter: RuntimeBuildsFilterInput
first: Int
last: Int
): AppBuildsConnection!
createdAt: DateTime!
deployments(
after: String
before: String
filter: RuntimeDeploymentsFilterInput
first: Int
last: Int
): DeploymentsConnection!
fingerprint: Fingerprint
firstBuildCreatedAt: DateTime
id: ID!
isFingerprint: Boolean!
updatedAt: DateTime!
updates(
after: String
before: String
first: Int
last: Int
): AppUpdatesConnection!
version: String!
}
input RuntimeBuildsFilterInput {
channel: String
developmentClient: Boolean
distributions: [DistributionType!]
platforms: [AppPlatform!]
releaseChannel: String
simulator: Boolean
}
input RuntimeDeploymentsFilterInput {
channel: String
}
type RuntimeEdge {
cursor: String!
node: Runtime!
}
input RuntimeFilterInput {
"""Only return runtimes shared with this branch"""
branchId: String
runtimeVersions: [String]
}
type RuntimeQuery {
"""Query a Runtime by ID"""
byId(
"""Runtime ID to use to look up runtime"""
runtimeId: ID!
): Runtime!
}
"""Represents the connection over the runtime edge of an App"""
type RuntimesConnection {
edges: [RuntimeEdge!]!
pageInfo: PageInfo!
}
"""Represents a human SSO (not robot) actor."""
type SSOUser implements Actor & UserActor {
"""Access Tokens belonging to this actor, none at present"""
accessTokens: [AccessToken!]!
accounts: [Account!]!
"""Coalesced project activity for all apps belonging to all accounts this user belongs to. Only resolves for the viewer."""
activityTimelineProjectActivities(
""" Offset the query """
createdBefore: DateTime
""" Types of objects to filter """
filterTypes: [ActivityTimelineProjectActivityType!]
limit: Int!
): [ActivityTimelineProjectActivity!]!
appCount: Int!
appetizeCode: String @deprecated(reason: "No longer supported")
"""Apps this user has published. If this user is the viewer, this field returns the apps the user has access to."""
apps(
includeUnpublished: Boolean
limit: Int!
offset: Int!
): [App!]!
bestContactEmail: String
created: DateTime!
"""Discord account linked to a user"""
discordUser: DiscordUser
displayName: String!
experiments: [ActorExperiment!]!
"""Server feature gate values for this actor, optionally filtering by desired gates.
Only resolves for the viewer."""
featureGates(
filter: [String!]
): JSONObject!
firstName: String
fullName: String
"""GitHub account linked to a user"""
githubUser: GitHubUser
githubUsername: String @deprecated(reason: "No longer supported")
id: ID!
industry: String @deprecated(reason: "No longer supported")
isExpoAdmin: Boolean!
isLegacy: Boolean! @deprecated(reason: "No longer supported")
isSecondFactorAuthenticationEnabled: Boolean!
lastDeletionAttemptTime: DateTime
lastName: String
location: String @deprecated(reason: "No longer supported")
notificationSubscriptions(
filter: NotificationSubscriptionFilter
): [NotificationSubscription!]!
"""Pending UserInvitations for this user. Only resolves for the viewer."""
pendingUserInvitations: [UserInvitation!]!
pinnedApps: [App!]!
preferences: UserPreferences!
"""Associated accounts"""
primaryAccount: Account!
primaryAccountProfileImageUrl: String
profilePhoto: String!
"""Snacks associated with this account"""
snacks(
limit: Int!
offset: Int!
): [Snack!]!
twitterUsername: String @deprecated(reason: "No longer supported")
username: String!
websiteNotificationsPaginated(
after: String
before: String
first: Int
last: Int
): WebsiteNotificationsConnection!
}
input SSOUserDataInput {
firstName: String
lastName: String
}
type SecondFactorBooleanResult {
success: Boolean!
}
input SecondFactorDeviceConfiguration {
isPrimary: Boolean!
method: SecondFactorMethod!
name: String!
smsPhoneNumber: String
}
type SecondFactorDeviceConfigurationResult {
keyURI: String!
secondFactorDevice: UserSecondFactorDevice!
secret: String!
}
type SecondFactorInitiationResult {
configurationResults: [SecondFactorDeviceConfigurationResult!]!
plaintextBackupCodes: [String!]!
}
enum SecondFactorMethod {
"""Google Authenticator (TOTP)"""
AUTHENTICATOR
"""SMS"""
SMS
}
type SecondFactorRegenerateBackupCodesResult {
plaintextBackupCodes: [String!]!
}
type SentryInstallation {
account: Account!
createdAt: DateTime!
id: ID!
installationId: String!
orgSlug: String!
}
type SentryInstallationMutation {
"""Confirm a pending Sentry installation"""
confirmPendingSentryInstallation(
installationId: ID!
): SentryInstallation!
"""Generate a Sentry token for an installation"""
generateSentryToken(
accountId: ID!
): GenerateSentryTokenResult!
"""Link a Sentry installation to an Expo account"""
linkSentryInstallationToExpoAccount(
input: LinkSentryInstallationToExpoAccountInput!
): PendingSentryInstallation!
}
type SentryProject {
app: App!
createdAt: DateTime!
id: ID!
sentryInstallationId: ID!
sentryProjectId: String!
sentryProjectSlug: String!
updatedAt: DateTime!
}
type SentryProjectMutation {
"""Create a Sentry project"""
createSentryProject(
input: CreateSentryProjectInput!
): SentryProject!
"""Delete a Sentry project by ID"""
deleteSentryProject(
sentryProjectId: ID!
): DeleteSentryProjectResult!
}
type Snack implements Project {
"""Description of the Snack"""
description: String!
"""Full name of the Snack, e.g. "@john/mysnack", "@snack/245631" """
fullName: String!
"""Has the Snack been run without errors"""
hasBeenRunSuccessfully: Boolean
hashId: String!
iconUrl: String @deprecated(reason: "No longer supported")
id: ID!
"""Draft status, which is true when the Snack was not saved explicitly, but auto-saved"""
isDraft: Boolean!
"""Name of the Snack, e.g. "My Snack" """
name: String!
"""Preview image of the running snack"""
previewImage: String
published: Boolean!
"""SDK version of the snack"""
sdkVersion: String!
"""Slug name, e.g. "mysnack", "245631" """
slug: String!
"""Date and time the Snack was last updated"""
updated: DateTime!
"""Name of the user that created the Snack, or "snack" when the Snack was saved anonymously"""
username: String!
}
type SnackQuery {
"""Get snack by hashId"""
byHashId(
hashId: ID!
): Snack!
"""Get snack by hashId"""
byId(
id: ID!
): Snack! @deprecated(reason: "Use byHashId")
}
enum StandardOffer {
"""$29 USD per month, 30 day trial"""
DEFAULT
"""$800 USD per month"""
SUPPORT
"""$29 USD per month, 1 year trial"""
YC_DEALS
"""$348 USD per year, 30 day trial"""
YEARLY_SUB
}
"""Incident for a given component from Expo status page API."""
type StatuspageIncident {
createdAt: DateTime!
id: ID!
"""Impact of an incident from Expo status page."""
impact: StatuspageIncidentImpact!
name: String!
resolvedAt: DateTime
"""Shortlink to the incident from Expo status page."""
shortlink: String!
"""Current status of an incident from Expo status page."""
status: StatuspageIncidentStatus!
updatedAt: DateTime!
"""List of all updates for an incident from Expo status page."""
updates: [StatuspageIncidentUpdate!]!
}
"""Possible Incident impact values from Expo status page API."""
enum StatuspageIncidentImpact {
CRITICAL
MAINTENANCE
MAJOR
MINOR
NONE
}
"""Possible Incident statuses from Expo status page API."""
enum StatuspageIncidentStatus {
COMPLETED
IDENTIFIED
INVESTIGATING
IN_PROGRESS
MONITORING
RESOLVED
SCHEDULED
VERIFYING
}
"""Update for an Incident from Expo status page API."""
type StatuspageIncidentUpdate {
"""Text of an update from Expo status page."""
body: String!
createdAt: DateTime!
id: ID!
"""Status set at the moment of update."""
status: StatuspageIncidentStatus!
}
"""Service monitored by Expo status page."""
type StatuspageService {
"""Description of a service from Expo status page."""
description: String
id: ID!
"""List of last inicdents for a service from Expo status page (we always query for 50 latest incidents for all services)
sorted by createdAt field in descending order."""
incidents: [StatuspageIncident!]!
"""Name of a service monitored by Expo status page."""
name: StatuspageServiceName!
"""Current status of a service from Expo status page."""
status: StatuspageServiceStatus!
}
"""Name of a service monitored by Expo status page."""
enum StatuspageServiceName {
EAS_BUILD
EAS_SUBMIT
EAS_UPDATE
GITHUB_API_REQUESTS
GITHUB_WEBHOOKS
}
type StatuspageServiceQuery {
"""Query services from Expo status page by names."""
byServiceNames(
"""Service names to use to look up components."""
serviceNames: [StatuspageServiceName!]!
): [StatuspageService!]!
}
"""Possible statuses for a service."""
enum StatuspageServiceStatus {
DEGRADED_PERFORMANCE
MAJOR_OUTAGE
OPERATIONAL
PARTIAL_OUTAGE
UNDER_MAINTENANCE
}
"""The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text."""
scalar String
type StripeCoupon {
amountOff: String
appliesTo: String
id: ID!
name: String!
percentOff: Float
valid: Boolean!
}
type StripePrice {
id: ID!
}
"""Represents an EAS Submission"""
type Submission implements ActivityTimelineProjectActivity {
activityTimestamp: DateTime!
actor: Actor
androidConfig: AndroidSubmissionConfig
app: App!
archiveUrl: String
canRetry: Boolean!
cancelingActor: Actor
childSubmission: Submission
completedAt: DateTime
createdAt: DateTime!
error: SubmissionError
id: ID!
initiatingActor: Actor
iosConfig: IosSubmissionConfig
logFiles: [String!]!
logsUrl: String @deprecated(reason: "Use logFiles instead")
"""Retry time starts after completedAt"""
maxRetryTimeMinutes: Int!
parentSubmission: Submission
platform: AppPlatform!
priority: SubmissionPriority
status: SubmissionStatus!
submittedBuild: Build
updatedAt: DateTime!
}
enum SubmissionAndroidArchiveType {
AAB
APK
}
enum SubmissionAndroidReleaseStatus {
COMPLETED
DRAFT
HALTED
IN_PROGRESS
}
enum SubmissionAndroidTrack {
ALPHA
BETA
INTERNAL
PRODUCTION
}
input SubmissionArchiveSourceInput {
"""Required if the archive source type is GCS_BUILD_APPLICATION_ARCHIVE, GCS_BUILD_APPLICATION_ARCHIVE_ORCHESTRATOR or GCS_SUBMIT_ARCHIVE"""
bucketKey: String
type: SubmissionArchiveSourceType!
"""Required if the archive source type is URL"""
url: String
}
enum SubmissionArchiveSourceType {
GCS_BUILD_APPLICATION_ARCHIVE
GCS_BUILD_APPLICATION_ARCHIVE_ORCHESTRATOR
GCS_SUBMIT_ARCHIVE
URL
}
type SubmissionError {
errorCode: String
message: String
}
input SubmissionFilter {
platform: AppPlatform
status: SubmissionStatus
}
type SubmissionMutation {
"""Cancel an EAS Submit submission"""
cancelSubmission(
submissionId: ID!
): Submission!
"""Create an Android EAS Submit submission"""
createAndroidSubmission(
input: CreateAndroidSubmissionInput!
): CreateSubmissionResult!
"""Create an iOS EAS Submit submission"""
createIosSubmission(
input: CreateIosSubmissionInput!
): CreateSubmissionResult!
"""Retry an EAS Submit submission"""
retrySubmission(
parentSubmissionId: ID!
): CreateSubmissionResult!
}
enum SubmissionPriority {
HIGH
NORMAL
}
type SubmissionQuery {
"""Look up EAS Submission by submission ID"""
byId(
submissionId: ID!
): Submission!
}
enum SubmissionStatus {
AWAITING_BUILD
CANCELED
ERRORED
FINISHED
IN_PROGRESS
IN_QUEUE
}
type SubscribeToNotificationResult {
notificationSubscription: NotificationSubscription!
}
type SubscriptionDetails {
addons: [AddonDetails!]!
cancelAt: DateTime
concurrencies: Concurrencies
coupon: StripeCoupon
endedAt: DateTime
futureSubscription: FutureSubscription
id: ID!
isDowngrading: Boolean
meteredBillingStatus: MeteredBillingStatus!
name: String
nextInvoice: DateTime
nextInvoiceAmountDueCents: Int
planEnablement(
serviceMetric: EASServiceMetric!
): PlanEnablement
planId: String
price: Int!
recurringCents: Int
status: String
trialEnd: DateTime
upcomingInvoice: Invoice
willCancel: Boolean
}
enum TargetEntityMutationType {
CREATE
DELETE
UPDATE
}
type TestNotificationMetadata {
message: String!
}
type TimelineActivityConnection {
edges: [TimelineActivityEdge!]!
pageInfo: PageInfo!
}
type TimelineActivityEdge {
cursor: String!
node: ActivityTimelineProjectActivity!
}
input TimelineActivityFilterInput {
channels: [String!]
platforms: [AppPlatform!]
releaseChannels: [String!]
types: [ActivityTimelineProjectActivityType!]
}
type UniqueUsersOverTimeData {
data: LineChartData!
}
type UnsubscribeFromNotificationResult {
notificationSubscription: NotificationSubscription!
}
type Update implements ActivityTimelineProjectActivity {
activityTimestamp: DateTime!
actor: Actor
app: App!
assetHostOverride: String
assetMapUrl: String
awaitingCodeSigningInfo: Boolean!
branch: UpdateBranch!
branchId: ID!
codeSigningInfo: CodeSigningInfo
createdAt: DateTime!
deployments(
after: String
before: String
first: Int
last: Int
): DeploymentResult!
environment: EnvironmentVariableEnvironment
expoGoSDKVersion: String
fingerprint: Fingerprint
gitCommitHash: String
group: String!
id: ID!
insights: UpdateInsights!
isGitWorkingTreeDirty: Boolean!
isRollBackToEmbedded: Boolean!
jobRun: JobRun
manifestFragment: String!
manifestHostOverride: String
manifestPermalink: String!
message: String
platform: String!
rolloutControlUpdate: Update
rolloutPercentage: Int
runtime: Runtime!
runtimeVersion: String! @deprecated(reason: "Use 'runtime' field .")
updatedAt: DateTime!
}
type UpdateBranch {
app: App!
appId: ID!
createdAt: DateTime!
id: ID!
latestActivity: DateTime!
name: String!
runtimes(
after: String
before: String
filter: RuntimeFilterInput
first: Int
last: Int
): RuntimesConnection!
updateGroups(
filter: UpdatesFilter
limit: Int!
offset: Int!
): [[Update!]!]!
updatedAt: DateTime!
updates(
filter: UpdatesFilter
limit: Int!
offset: Int!
): [Update!]!
}
type UpdateBranchMutation {
"""Create an EAS branch for an app"""
createUpdateBranchForApp(
appId: ID!
name: String!
): UpdateBranch!
"""Delete an EAS branch and all of its updates as long as the branch is not being used by any channels"""
deleteUpdateBranch(
branchId: ID!
): DeleteUpdateBranchResult!
"""Edit an EAS branch. The branch can be specified either by its ID or
with the combination of (appId, name)."""
editUpdateBranch(
input: EditUpdateBranchInput!
): UpdateBranch!
"""Publish an update group to a branch"""
publishUpdateGroups(
publishUpdateGroupsInput: [PublishUpdateGroupInput!]!
): [Update!]!
}
type UpdateChannel {
app: App!
appId: ID!
branchMapping: String!
createdAt: DateTime!
id: ID!
isPaused: Boolean!
name: String!
updateBranches(
limit: Int!
offset: Int!
): [UpdateBranch!]!
updatedAt: DateTime!
}
type UpdateChannelMutation {
"""Create an EAS channel for an app.
In order to work with GraphQL formatting, the branchMapping should be a
stringified JSON supplied to the mutation as a variable."""
createUpdateChannelForApp(
appId: ID!
branchMapping: String
name: String!
): UpdateChannel!
"""delete an EAS channel that doesn't point to any branches"""
deleteUpdateChannel(
channelId: ID!
): DeleteUpdateChannelResult!
"""Edit an EAS channel.
In order to work with GraphQL formatting, the branchMapping should be a
stringified JSON supplied to the mutation as a variable."""
editUpdateChannel(
branchMapping: String!
channelId: ID!
): UpdateChannel!
"""Pause updates for an EAS channel."""
pauseUpdateChannel(
channelId: ID!
): UpdateChannel!
"""Resume updates for an EAS channel."""
resumeUpdateChannel(
channelId: ID!
): UpdateChannel!
}
type UpdateDeploymentEdge {
cursor: String!
node: Deployment!
}
type UpdateDeploymentsConnection {
edges: [UpdateDeploymentEdge!]!
pageInfo: PageInfo!
}
input UpdateEnvironmentVariableInput {
environments: [EnvironmentVariableEnvironment!]
fileName: String
id: ID!
isGlobal: Boolean
name: String
type: EnvironmentSecretType
value: String
visibility: EnvironmentVariableVisibility
}
input UpdateFilterInput {
fingerprintHash: String
hasFingerprint: Boolean
runtimeVersion: String
}
input UpdateGitHubBuildTriggerInput {
autoSubmit: Boolean!
buildProfile: String!
environment: EnvironmentVariableEnvironment
executionBehavior: GitHubBuildTriggerExecutionBehavior!
isActive: Boolean!
platform: AppPlatform!
sourcePattern: String!
submitProfile: String
targetPattern: String
type: GitHubBuildTriggerType!
}
input UpdateGitHubJobRunTriggerInput {
isActive: Boolean!
sourcePattern: String!
targetPattern: String
}
input UpdateGitHubRepositorySettingsInput {
baseDirectory: String!
}
input UpdateInfoGroup {
android: PartialManifest
ios: PartialManifest
web: PartialManifest
}
type UpdateInsights {
averageAssetMetrics: [AverageAssetMetrics!]!
cumulativeAverageMetrics: CumulativeAverageMetrics!
cumulativeMetrics(
timespan: InsightsTimespan!
): CumulativeMetrics!
id: ID!
totalUniqueUsers(
timespan: InsightsTimespan!
): Int!
}
type UpdateMutation {
"""Delete an EAS update group"""
deleteUpdateGroup(
group: ID!
): DeleteUpdateGroupResult! @deprecated(reason: "Use scheduleUpdateGroupDeletion instead")
"""Delete an EAS update group in the background"""
scheduleUpdateGroupDeletion(
group: ID!
): BackgroundJobReceipt!
"""Set code signing info for an update"""
setCodeSigningInfo(
codeSigningInfo: CodeSigningInfoInput!
updateId: ID!
): Update!
"""Set rollout percentage for an update"""
setRolloutPercentage(
percentage: Int!
updateId: ID!
): Update!
}
type UpdateQuery {
"""Query an Update by ID"""
byId(
"""Update ID to use to look up update"""
updateId: ID!
): Update!
}
input UpdateRollBackToEmbeddedGroup {
android: Boolean
ios: Boolean
web: Boolean
}
input UpdateRolloutInfo {
rolloutControlUpdateId: ID
rolloutPercentage: Int!
}
input UpdateRolloutInfoGroup {
android: UpdateRolloutInfo
ios: UpdateRolloutInfo
web: UpdateRolloutInfo
}
input UpdatesFilter {
platform: AppPlatform
runtimeVersions: [String]
sdkVersions: [String!]
}
type UpdatesMetricsData {
failedInstallsDataset: CumulativeUpdatesDataset!
installsDataset: CumulativeUpdatesDataset!
labels: [String!]!
}
type UploadSession {
"""Create an Upload Session for a specific account"""
createAccountScopedUploadSession(
accountID: ID!
type: AccountUploadSessionType!
): JSONObject!
"""Create an Upload Session for a specific app"""
createAppScopedUploadSession(
appID: ID!
type: AppUploadSessionType!
): JSONObject!
"""Create an Upload Session"""
createUploadSession(
filename: String
type: UploadSessionType!
): JSONObject!
}
enum UploadSessionType {
EAS_BUILD_GCS_PROJECT_METADATA
EAS_BUILD_GCS_PROJECT_SOURCES
EAS_BUILD_PROJECT_SOURCES @deprecated(reason: "Use EAS_BUILD_GCS_PROJECT_SOURCES instead.")
EAS_SHARE_GCS_APP_ARCHIVE
EAS_SUBMIT_APP_ARCHIVE @deprecated(reason: "Use EAS_SUBMIT_GCS_APP_ARCHIVE instead.")
EAS_SUBMIT_GCS_APP_ARCHIVE
EAS_UPDATE_ASSETS_METCALF
EAS_UPDATE_FINGERPRINT
}
type UsageMetricTotal {
billingPeriod: BillingPeriod!
id: ID!
overageMetrics: [EstimatedOverageAndCost!]!
planMetrics: [EstimatedUsage!]!
"""Total cost of overages, in cents"""
totalCost: Float!
}
enum UsageMetricType {
BANDWIDTH
BUILD
MINUTE
REQUEST
UPDATE
USER
}
enum UsageMetricsGranularity {
DAY
HOUR
MINUTE
TOTAL
}
input UsageMetricsTimespan {
end: DateTime!
start: DateTime!
}
"""Represents a human (not robot) actor."""
type User implements Actor & UserActor {
"""Access Tokens belonging to this actor"""
accessTokens: [AccessToken!]!
accounts: [Account!]!
"""Coalesced project activity for all apps belonging to all accounts this user belongs to. Only resolves for the viewer."""
activityTimelineProjectActivities(
""" Offset the query """
createdBefore: DateTime
""" Types of objects to filter """
filterTypes: [ActivityTimelineProjectActivityType!]
limit: Int!
): [ActivityTimelineProjectActivity!]!
appCount: Int!
appetizeCode: String @deprecated(reason: "No longer supported")
"""Apps this user has published. If this user is the viewer, this field returns the apps the user has access to."""
apps(
includeUnpublished: Boolean
limit: Int!
offset: Int!
): [App!]!
bestContactEmail: String
created: DateTime!
"""Discord account linked to a user"""
discordUser: DiscordUser
displayName: String!
email: String!
emailVerified: Boolean!
experiments: [ActorExperiment!]!
"""Server feature gate values for this actor, optionally filtering by desired gates.
Only resolves for the viewer."""
featureGates(
filter: [String!]
): JSONObject!
firstName: String
fullName: String
"""GitHub account linked to a user"""
githubUser: GitHubUser
githubUsername: String @deprecated(reason: "No longer supported")
"""Whether this user has any pending user invitations. Only resolves for the viewer."""
hasPendingUserInvitations: Boolean!
id: ID!
industry: String @deprecated(reason: "No longer supported")
isExpoAdmin: Boolean!
isLegacy: Boolean! @deprecated(reason: "No longer supported")
isSecondFactorAuthenticationEnabled: Boolean!
lastDeletionAttemptTime: DateTime
lastName: String
location: String @deprecated(reason: "No longer supported")
notificationSubscriptions(
filter: NotificationSubscriptionFilter
): [NotificationSubscription!]!
"""Pending UserInvitations for this user. Only resolves for the viewer."""
pendingUserInvitations: [UserInvitation!]!
pinnedApps: [App!]!
preferences: UserPreferences!
"""Associated accounts"""
primaryAccount: Account!
primaryAccountProfileImageUrl: String
profilePhoto: String!
"""Get all certified second factor authentication methods"""
secondFactorDevices: [UserSecondFactorDevice!]!
"""Snacks associated with this account"""
snacks(
limit: Int!
offset: Int!
): [Snack!]!
twitterUsername: String @deprecated(reason: "No longer supported")
username: String!
websiteNotificationsPaginated(
after: String
before: String
first: Int
last: Int
): WebsiteNotificationsConnection!
}
"""A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts."""
interface UserActor {
"""Access Tokens belonging to this user actor"""
accessTokens: [AccessToken!]!
accounts: [Account!]!
"""Coalesced project activity for all apps belonging to all accounts this user actor belongs to.
Only resolves for the viewer."""
activityTimelineProjectActivities(
""" Offset the query """
createdBefore: DateTime
""" Types of objects to filter """
filterTypes: [ActivityTimelineProjectActivityType!]
limit: Int!
): [ActivityTimelineProjectActivity!]!
appCount: Int!
appetizeCode: String @deprecated(reason: "No longer supported")
"""Apps this user has published"""
apps(
includeUnpublished: Boolean
limit: Int!
offset: Int!
): [App!]!
bestContactEmail: String
created: DateTime!
"""Discord account linked to a user"""
discordUser: DiscordUser
"""Best-effort human readable name for this human actor for use in user interfaces during action attribution.
For example, when displaying a sentence indicating that actor X created a build or published an update."""
displayName: String!
experiments: [ActorExperiment!]!
"""Server feature gate values for this user actor, optionally filtering by desired gates.
Only resolves for the viewer."""
featureGates(
filter: [String!]
): JSONObject!
firstName: String
fullName: String
"""GitHub account linked to a user"""
githubUser: GitHubUser
githubUsername: String @deprecated(reason: "No longer supported")
id: ID!
industry: String @deprecated(reason: "No longer supported")
isExpoAdmin: Boolean!
lastDeletionAttemptTime: DateTime
lastName: String
location: String @deprecated(reason: "No longer supported")
notificationSubscriptions(
filter: NotificationSubscriptionFilter
): [NotificationSubscription!]!
pinnedApps: [App!]!
preferences: UserPreferences!
"""Associated accounts"""
primaryAccount: Account!
primaryAccountProfileImageUrl: String
profilePhoto: String!
"""Snacks associated with this user's personal account"""
snacks(
limit: Int!
offset: Int!
): [Snack!]!
twitterUsername: String @deprecated(reason: "No longer supported")
username: String!
websiteNotificationsPaginated(
after: String
before: String
first: Int
last: Int
): WebsiteNotificationsConnection!
}
"""A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts."""
type UserActorPublicData {
firstName: String
id: ID!
lastName: String
profilePhoto: String!
"""Snacks associated with this user's personal account"""
snacks(
limit: Int!
offset: Int!
): [Snack!]!
username: String!
}
type UserActorPublicDataQuery {
"""Get UserActorPublicData by username"""
byUsername(
username: String!
): UserActorPublicData!
}
type UserActorQuery {
"""Query a UserActor by ID"""
byId(
id: ID!
): UserActor! @deprecated(reason: "Public user actor queries are no longer supported")
"""Query a UserActor by username"""
byUsername(
username: String!
): UserActor! @deprecated(reason: "Public user actor queries are no longer supported")
}
enum UserAgentBrowser {
ANDROID_MOBILE
CHROME
CHROME_IOS
EDGE
FACEBOOK_MOBILE
FIREFOX
FIREFOX_IOS
INTERNET_EXPLORER
KONQUEROR
MOZILLA
OPERA
SAFARI
SAFARI_MOBILE
SAMSUNG_INTERNET
UC_BROWSER
}
enum UserAgentOS {
ANDROID
CHROME_OS
IOS
IPAD_OS
LINUX
MAC_OS
WINDOWS
}
enum UserAgentPlatform {
ANDROID
APPLE
UNKNOWN
WEB
}
type UserAppPinMutation {
pinApp(
appId: ID!
): ID!
unpinApp(
appId: ID!
): ID
}
type UserAuditLog {
actor: Actor!
createdAt: DateTime!
id: ID!
ip: String
metadata: JSONObject
targetEntityId: ID!
targetEntityMutationType: TargetEntityMutationType!
targetEntityTypeName: UserEntityTypeName!
targetEntityTypePublicName: String!
user: User! @deprecated(reason: "Use userActor instead")
userActor: UserActor!
websiteMessage: String!
}
type UserAuditLogConnection {
edges: [UserAuditLogEdge!]!
pageInfo: PageInfo!
}
type UserAuditLogEdge {
cursor: String!
node: UserAuditLog!
}
input UserAuditLogExportInput {
createdAfter: String!
createdBefore: String!
format: AuditLogsExportFormat!
targetEntityMutationType: [TargetEntityMutationType!]
targetEntityTypeName: [UserEntityTypeName!]
userId: ID!
}
input UserAuditLogFilterInput {
entityTypes: [UserEntityTypeName!]
mutationTypes: [TargetEntityMutationType!]
}
type UserAuditLogMutation {
"""Exports User Audit Logs for an user. Returns the ID of the background job receipt. Use BackgroundJobReceiptQuery to get the status of the job."""
exportUserAuditLogs(
exportInput: UserAuditLogExportInput!
): BackgroundJobReceipt!
}
type UserAuditLogQuery {
"""Audit logs for user"""
byId(
auditLogId: ID!
): UserAuditLog!
byUserIdPaginated(
after: String
before: String
filter: UserAuditLogFilterInput
first: Int
last: Int
userId: ID!
): UserAuditLogConnection!
typeNamesMap: [UserLogNameTypeMapping!]!
}
input UserDataInput {
email: String
firstName: String
fullName: String
id: ID
lastName: String
profilePhoto: String
username: String
}
enum UserEntityTypeName {
AccessTokenEntity
DiscordUserEntity
GitHubUserEntity
PasswordEntity
SSOUserEntity
UserEntity
UserPermissionEntity
UserSecondFactorBackupCodesEntity
UserSecondFactorDeviceEntity
}
"""An pending invitation sent to an email granting membership on an Account."""
type UserInvitation {
accountName: String!
accountProfileImageUrl: String!
"""If the invite is for a personal team, the profile photo of account owner"""
accountProfilePhoto: String @deprecated(reason: "Use accountProfileImageUrl")
created: DateTime!
"""Email to which this invitation was sent"""
email: String!
expires: DateTime!
id: ID!
"""If the invite is for an organization or a personal team"""
isForOrganization: Boolean!
"""Account permissions to be granted upon acceptance of this invitation"""
permissions: [Permission!]!
"""Role to be granted upon acceptance of this invitation"""
role: Role!
}
type UserInvitationMutation {
"""Accept UserInvitation by ID. Viewer must have matching email and email must be verified."""
acceptUserInvitationAsViewer(
id: ID!
): AcceptUserInvitationResult!
"""Accept UserInvitation by token. Note that the viewer's email is not required to match
the email on the invitation. If viewer's email does match that of the invitation,
their email will also be verified."""
acceptUserInvitationByTokenAsViewer(
token: ID!
): AcceptUserInvitationResult!
"""Create a UserInvitation for an email that when accepted grants
the specified permissions on an Account"""
createUserInvitationForAccount(
accountID: ID!
email: String!
permissions: [Permission!]!
): UserInvitation!
"""Rescind UserInvitation by ID"""
deleteUserInvitation(
id: ID!
): RescindUserInvitationResult!
"""Delete UserInvitation by token. Note that the viewer's email is not required to match
the email on the invitation."""
deleteUserInvitationByToken(
token: ID!
): RescindUserInvitationResult!
"""Re-send UserInivitation by ID"""
resendUserInvitation(
id: ID!
): UserInvitation!
}
"""Publicly visible data for a UserInvitation."""
type UserInvitationPublicData {
accountName: String!
accountProfileImageUrl: String!
accountProfilePhoto: String!
created: DateTime!
email: String!
expires: DateTime!
"""Email to which this invitation was sent"""
id: ID!
isForOrganization: Boolean!
}
type UserInvitationPublicDataQuery {
"""Get UserInvitationPublicData by token"""
byToken(
token: ID!
): UserInvitationPublicData!
}
type UserLogNameTypeMapping {
publicName: String!
typeName: UserEntityTypeName!
}
type UserPermission {
actor: Actor!
permissions: [Permission!]!
role: Role!
user: User @deprecated(reason: "User type is deprecated")
userActor: UserActor!
}
type UserPreferences {
onboarding: UserPreferencesOnboarding
selectedAccountName: String
}
input UserPreferencesInput {
onboarding: UserPreferencesOnboardingInput
selectedAccountName: String
}
"""Set by website. Used by CLI to continue onboarding process on user's machine - clone repository,
install dependencies etc."""
type UserPreferencesOnboarding {
appId: ID!
"""Can be null if the user has not selected one yet."""
deviceType: OnboardingDeviceType
"""Can be null if the user has not selected one yet."""
environment: OnboardingEnvironment
"""Set by CLI when the user has completed that phase. Used by the website to determine when
the next step can be shown."""
isCLIDone: Boolean
"""The last time when this object was updated."""
lastUsed: String!
"""User selects a platform for which they want to build the app. CLI uses this information to start the build."""
platform: AppPlatform
}
input UserPreferencesOnboardingInput {
appId: ID!
deviceType: OnboardingDeviceType
environment: OnboardingEnvironment
isCLIDone: Boolean
lastUsed: String!
platform: AppPlatform
}
type UserQuery {
"""Query a User by ID"""
byId(
userId: ID!
): User! @deprecated(reason: "Public user queries are no longer supported")
"""Query a User by username"""
byUsername(
username: String!
): User! @deprecated(reason: "Public user queries are no longer supported")
}
"""A second factor device belonging to a User"""
type UserSecondFactorDevice {
createdAt: DateTime!
id: ID!
isCertified: Boolean!
isPrimary: Boolean!
method: SecondFactorMethod!
name: String!
smsPhoneNumber: String
updatedAt: DateTime!
user: User!
}
input WebNotificationUpdateReadStateInput {
id: ID!
isRead: Boolean!
}
type Webhook {
appId: ID!
createdAt: DateTime!
event: WebhookType!
id: ID!
updatedAt: DateTime!
url: String!
}
input WebhookFilter {
event: WebhookType
}
input WebhookInput {
event: WebhookType!
secret: String!
url: String!
}
type WebhookMutation {
"""Create a Webhook"""
createWebhook(
appId: String!
webhookInput: WebhookInput!
): Webhook!
"""Delete a Webhook"""
deleteWebhook(
webhookId: ID!
): DeleteWebhookResult!
"""Update a Webhook"""
updateWebhook(
webhookId: ID!
webhookInput: WebhookInput!
): Webhook!
}
type WebhookQuery {
byId(
id: ID!
): Webhook!
}
enum WebhookType {
BUILD
SUBMIT
}
type WebsiteNotificationEdge {
cursor: String!
node: Notification!
}
type WebsiteNotificationMutation {
updateAllWebsiteNotificationReadStateAsRead: Boolean!
updateNotificationReadState(
input: WebNotificationUpdateReadStateInput!
): Notification!
}
type WebsiteNotificationsConnection {
edges: [WebsiteNotificationEdge!]!
pageInfo: PageInfo!
}
type WorkerCustomDomain {
alias: WorkerDeploymentAlias!
createdAt: DateTime!
dcvDelegationRecord: CustomDomainDNSRecord
devDomainName: DevDomainName!
dnsRecord: CustomDomainDNSRecord!
hostname: String!
id: ID!
setup: CustomDomainSetup
updatedAt: DateTime!
verificationRecord: CustomDomainDNSRecord
}
type WorkerDeployment implements ActivityTimelineProjectActivity {
activityTimestamp: DateTime!
actor: Actor
aliases: [WorkerDeploymentAlias!]!
app: App!
crashes(
filters: CrashesFilters
timespan: DatasetTimespan!
): WorkerDeploymentCrashes
createdAt: DateTime!
deploymentDomain: String!
deploymentIdentifier: WorkerDeploymentIdentifier!
devDomainName: DevDomainName!
id: ID!
initiatingActor: Actor
logs(
limit: Int = 500
timespan: LogsTimespan!
): WorkerDeploymentLogs
requests(
filters: RequestsFilters
timespan: DatasetTimespan!
): WorkerDeploymentRequests
signedAssetsURL: String!
signedDeploymentURL: String!
subdomain: String!
url: String!
}
type WorkerDeploymentAlias {
aliasName: WorkerDeploymentIdentifier
createdAt: DateTime!
deploymentDomain: String!
devDomainName: DevDomainName!
id: ID!
subdomain: String!
updatedAt: DateTime!
url: String!
workerDeployment: WorkerDeployment!
}
type WorkerDeploymentAliasEdge {
cursor: String!
node: WorkerDeploymentAlias!
}
type WorkerDeploymentAliasesConnection {
edges: [WorkerDeploymentAliasEdge!]!
pageInfo: PageInfo!
}
type WorkerDeploymentCrashEdge {
logs: [WorkerDeploymentLogNode!]!
node: WorkerDeploymentCrashNode!
request: WorkerDeploymentRequestNode
}
enum WorkerDeploymentCrashKind {
EXCEEDED_CPU
EXCEEDED_MEMORY
EXCEEDED_SUBREQUESTS
GENERIC
INTERNAL
RESPONSE_STREAM_DISCONNECTED
}
type WorkerDeploymentCrashNode {
crashHash: ID!
crashKind: WorkerDeploymentCrashKind!
crashTimestamp: DateTime!
deploymentIdentifier: String!
firstStackLine: String
key: ID!
message: String!
name: String!
requestTimestamp: DateTime!
scriptName: String!
stack: [String]
}
type WorkerDeploymentCrashes {
byCrashHash: [WorkerDeploymentCrashesHashEdge!]!
byName: [WorkerDeploymentCrashesNameEdge!]!
interval: Int!
minRowsWithoutLimit: Int
nodes: [WorkerDeploymentCrashNode!]!
summary: WorkerDeploymentCrashesAggregationNode!
timeseries: [WorkerDeploymentCrashesTimeseriesEdge!]!
}
type WorkerDeploymentCrashesAggregationNode {
crashesPerMs: Float
crashesSum: Int!
distinctCrashes: Int!
firstOccurredAt: DateTime!
mostRecentlyOccurredAt: DateTime!
sampleRate: Float
}
type WorkerDeploymentCrashesHashEdge {
crashHash: ID!
node: WorkerDeploymentCrashesAggregationNode!
sample: WorkerDeploymentCrashNode!
timeseries: [WorkerDeploymentCrashesTimeseriesEdge!]!
}
type WorkerDeploymentCrashesNameEdge {
name: String!
node: WorkerDeploymentCrashesAggregationNode!
sample: WorkerDeploymentCrashNode!
timeseries: [WorkerDeploymentCrashesTimeseriesEdge!]!
}
type WorkerDeploymentCrashesTimeseriesEdge {
node: WorkerDeploymentCrashesAggregationNode
timestamp: DateTime!
}
type WorkerDeploymentEdge {
cursor: String!
node: WorkerDeployment!
}
"""A Worker Deployment ID (also known as the CF Ray ID)"""
scalar WorkerDeploymentIdentifier
enum WorkerDeploymentLogLevel {
DEBUG
ERROR
FATAL
INFO
LOG
WARN
}
type WorkerDeploymentLogNode {
level: WorkerDeploymentLogLevel!
message: String!
timestamp: DateTime!
}
type WorkerDeploymentLogs {
minRowsWithoutLimit: Int
nodes: [WorkerDeploymentLogNode!]!
}
type WorkerDeploymentQuery {
byId(
id: ID!
): WorkerDeployment!
}
type WorkerDeploymentRequestEdge {
crash: WorkerDeploymentCrashNode
logs: [WorkerDeploymentLogNode!]!
node: WorkerDeploymentRequestNode!
}
"""A Worker Deployment Request ID (also known as the CF Ray ID)"""
scalar WorkerDeploymentRequestID
type WorkerDeploymentRequestNode {
browserKind: UserAgentBrowser
browserVersion: String
cacheStatus: ResponseCacheStatus
continent: ContinentCode
country: String
deploymentIdentifier: String!
duration: Int!
hasCustomDomainOrigin: Boolean!
isAsset: Boolean!
isCrash: Boolean!
isLimitExceeded: Boolean!
isRejected: Boolean!
isStaleIfError: Boolean!
isStaleWhileRevalidate: Boolean!
isVerifiedBot: Boolean!
key: ID!
method: String!
os: UserAgentOS
pathname: String!
platform: UserAgentPlatform!
region: String
requestId: WorkerDeploymentRequestID!
requestTimestamp: DateTime!
responseType: ResponseType!
routerPath: String
scriptName: String!
search: String
status: Int!
statusType: ResponseStatusType
}
type WorkerDeploymentRequests {
byBrowser(
limit: Int
orderBy: RequestsOrderBy
): [WorkerDeploymentRequestsBrowserEdge!]!
byCacheStatus(
limit: Int
orderBy: RequestsOrderBy
): [WorkerDeploymentRequestsCacheStatusEdge!]!
byContinent(
limit: Int
orderBy: RequestsOrderBy
): [WorkerDeploymentRequestsContinentEdge!]!
byCountry(
limit: Int
orderBy: RequestsOrderBy
): [WorkerDeploymentRequestsCountryEdge!]!
byMethod(
limit: Int
orderBy: RequestsOrderBy
): [WorkerDeploymentRequestsMethodEdge!]!
byOS(
limit: Int
orderBy: RequestsOrderBy
): [WorkerDeploymentRequestsOperatingSystemEdge!]!
byPathname(
limit: Int
orderBy: RequestsOrderBy
): [WorkerDeploymentRequestsPathnameEdge!]!
byPlatform(
limit: Int
orderBy: RequestsOrderBy
): [WorkerDeploymentRequestsPlatformEdge!]!
byResponseType(
limit: Int
orderBy: RequestsOrderBy
): [WorkerDeploymentRequestsResponseTypeEdge!]!
byStatusType(
limit: Int
orderBy: RequestsOrderBy
): [WorkerDeploymentRequestsStatusTypeEdge!]!
interval: Int!
minRowsWithoutLimit: Int
nodes: [WorkerDeploymentRequestNode!]!
summary: WorkerDeploymentRequestsAggregationNode!
timeseries: [WorkerDeploymentRequestsTimeseriesEdge!]!
}
type WorkerDeploymentRequestsAggregationNode {
assetsPerMs: Float
assetsSum: Int!
cacheHitRatio: Float!
cacheHitRatioP50: Float!
cacheHitRatioP90: Float!
cacheHitRatioP99: Float!
cacheHitsPerMs: Float
cacheHitsSum: Int!
cachePassRatio: Float!
cachePassRatioP50: Float!
cachePassRatioP90: Float!
cachePassRatioP99: Float!
clientErrorRatio: Float!
clientErrorRatioP50: Float!
clientErrorRatioP90: Float!
clientErrorRatioP99: Float!
crashRatio: Float!
crashRatioP50: Float!
crashRatioP90: Float!
crashRatioP99: Float!
crashesPerMs: Float
crashesSum: Int!
duration: Float!
durationP50: Float!
durationP90: Float!
durationP99: Float!
limitExceededPerMs: Float
limitExceededSum: Int!
requestsPerMs: Float
requestsSum: Int!
sampleRate: Float
serverErrorRatio: Float!
serverErrorRatioP50: Float!
serverErrorRatioP90: Float!
serverErrorRatioP99: Float!
staleIfErrorPerMs: Float
staleIfErrorSum: Int!
staleWhileRevalidatePerMs: Float
staleWhileRevalidateSum: Int!
}
type WorkerDeploymentRequestsBrowserEdge {
browser: UserAgentBrowser
node: WorkerDeploymentRequestsAggregationNode!
}
type WorkerDeploymentRequestsCacheStatusEdge {
cacheStatus: ResponseCacheStatus
node: WorkerDeploymentRequestsAggregationNode!
}
type WorkerDeploymentRequestsContinentEdge {
continent: ContinentCode
node: WorkerDeploymentRequestsAggregationNode!
}
type WorkerDeploymentRequestsCountryEdge {
country: String
node: WorkerDeploymentRequestsAggregationNode!
}
type WorkerDeploymentRequestsMethodEdge {
method: String!
node: WorkerDeploymentRequestsAggregationNode!
}
type WorkerDeploymentRequestsOperatingSystemEdge {
node: WorkerDeploymentRequestsAggregationNode!
os: UserAgentOS
}
type WorkerDeploymentRequestsPathnameEdge {
node: WorkerDeploymentRequestsAggregationNode!
pathname: String!
}
type WorkerDeploymentRequestsPlatformEdge {
node: WorkerDeploymentRequestsAggregationNode!
platform: UserAgentPlatform!
}
type WorkerDeploymentRequestsResponseTypeEdge {
node: WorkerDeploymentRequestsAggregationNode!
responseType: ResponseType!
}
type WorkerDeploymentRequestsStatusTypeEdge {
node: WorkerDeploymentRequestsAggregationNode!
statusType: ResponseStatusType
}
type WorkerDeploymentRequestsTimeseriesEdge {
byBrowser: [WorkerDeploymentRequestsBrowserEdge!]!
byCacheStatus: [WorkerDeploymentRequestsCacheStatusEdge!]!
byContinent: [WorkerDeploymentRequestsContinentEdge!]!
byCountry: [WorkerDeploymentRequestsCountryEdge!]!
byMethod: [WorkerDeploymentRequestsMethodEdge!]!
byOS: [WorkerDeploymentRequestsOperatingSystemEdge!]!
byPathname: [WorkerDeploymentRequestsPathnameEdge!]!
byPlatform: [WorkerDeploymentRequestsPlatformEdge!]!
byResponseType: [WorkerDeploymentRequestsResponseTypeEdge!]!
byStatusType: [WorkerDeploymentRequestsStatusTypeEdge!]!
node: WorkerDeploymentRequestsAggregationNode
timestamp: DateTime!
}
type WorkerDeploymentsConnection {
edges: [WorkerDeploymentEdge!]!
pageInfo: PageInfo!
}
enum WorkerLoggerLevel {
DEBUG
ERROR
FATAL
INFO
TRACE
WARN
}
type Workflow {
app: App!
createdAt: DateTime!
fileName: String!
id: ID!
name: String
revisionsPaginated(
after: String
before: String
first: Int
last: Int
): WorkflowRevisionsConnection!
runsPaginated(
after: String
before: String
filter: WorkflowRunFilterInput
first: Int
last: Int
): WorkflowRunsConnection!
updatedAt: DateTime!
}
type WorkflowArtifact {
contentType: String
createdAt: DateTime!
downloadUrl: String
fileSizeBytes: Int
filename: String!
id: ID!
jobRun: JobRun!
name: String!
updatedAt: DateTime!
}
type WorkflowJob {
approvals: [WorkflowJobApproval!]!
createdAt: DateTime!
credentialsAppleDeviceRegistrationRequest: AppleDeviceRegistrationRequest
errors: [WorkflowJobError!]!
id: ID!
key: String!
name: String!
outputs: JSONObject!
requiredJobKeys: [String!]!
status: WorkflowJobStatus!
turtleBuild: Build
turtleJobRun: JobRun
turtleSubmission: Submission
type: WorkflowJobType!
updatedAt: DateTime!
workflowRun: WorkflowRun!
}
type WorkflowJobApproval {
createdAt: DateTime!
decision: WorkflowJobReviewDecision!
id: ID!
updatedAt: DateTime!
userActor: UserActor!
workflowJob: WorkflowJob!
}
type WorkflowJobApprovalMutation {
setWorkflowJobApprovalDecision(
decision: WorkflowJobReviewDecision!
workflowJobId: ID!
): WorkflowJobApproval!
}
type WorkflowJobError {
message: String!
title: String!
}
type WorkflowJobQuery {
byId(
workflowJobId: ID!
): WorkflowJob!
}
enum WorkflowJobReviewDecision {
APPROVED
REJECTED
}
enum WorkflowJobStatus {
ACTION_REQUIRED
CANCELED
FAILURE
IN_PROGRESS
NEW
PENDING_CANCEL
SKIPPED
SUCCESS
}
enum WorkflowJobType {
APPLE_DEVICE_REGISTRATION_REQUEST
BUILD
CUSTOM
DEPLOY
DOC
FINGERPRINT
GET_BUILD
MAESTRO_CLOUD
MAESTRO_TEST
REPACK
REQUIRE_APPROVAL
SLACK
SUBMISSION
UPDATE
}
input WorkflowProjectSourceInput {
easJsonBucketKey: String
packageJsonBucketKey: String
projectArchiveBucketKey: String!
projectRootDirectory: String
type: WorkflowProjectSourceType!
}
enum WorkflowProjectSourceType {
GCS
}
type WorkflowQuery {
"""Look up Workflow by app ID and file name"""
byAppIdAndFileName(
appId: ID!
fileName: String!
): Workflow!
"""Look up Workflow by ID"""
byId(
workflowId: ID!
): Workflow!
}
type WorkflowRevision {
blobSha: String!
commitSha: String
createdAt: DateTime!
id: ID!
workflow: Workflow!
yamlConfig: String!
}
type WorkflowRevisionEdge {
cursor: String!
node: WorkflowRevision!
}
input WorkflowRevisionInput {
fileName: String!
yamlConfig: String!
}
type WorkflowRevisionMutation {
validateWorkflowYamlConfig(
appId: ID!
yamlConfig: String!
): Boolean!
}
type WorkflowRevisionQuery {
byId(
workflowRevisionId: ID!
): WorkflowRevision!
}
type WorkflowRevisionsConnection {
edges: [WorkflowRevisionEdge!]!
pageInfo: PageInfo!
}
type WorkflowRun implements ActivityTimelineProjectActivity {
activityTimestamp: DateTime!
actor: Actor
createdAt: DateTime!
durationSeconds: Int
errors: [WorkflowRunError!]!
gitCommitHash: String
gitCommitMessage: String
githubRepository: GitHubRepository
id: ID!
jobs: [WorkflowJob!]!
name: String!
pullRequestNumber: Int
requestedGitRef: String
retriedWorkflowRun: WorkflowRun
retries: [WorkflowRun!]!
sourceExpiresAt: DateTime
status: WorkflowRunStatus!
triggerEventType: WorkflowRunTriggerEventType!
triggeringLabelName: String
triggeringSchedule: String
updatedAt: DateTime!
workflow: Workflow!
workflowRevision: WorkflowRevision
}
type WorkflowRunEdge {
cursor: String!
node: WorkflowRun!
}
type WorkflowRunError {
message: String!
title: String
}
input WorkflowRunFilterInput {
requestedGitRef: String
status: WorkflowRunStatus
}
input WorkflowRunGitBranchFilterInput {
searchTerm: String
}
input WorkflowRunInput {
projectSource: WorkflowProjectSourceInput!
}
type WorkflowRunMutation {
cancelWorkflowRun(
workflowRunId: ID!
): WorkflowRun!
createWorkflowRun(
appId: ID!
workflowRevisionInput: WorkflowRevisionInput!
workflowRunInput: WorkflowRunInput!
): WorkflowRun!
retryWorkflowRun(
fromFailedJobs: Boolean
workflowRunId: ID!
): WorkflowRun!
}
type WorkflowRunQuery {
byId(
workflowRunId: ID!
): WorkflowRun!
}
enum WorkflowRunStatus {
ACTION_REQUIRED
CANCELED
FAILURE
IN_PROGRESS
NEW
SUCCESS
}
enum WorkflowRunTriggerEventType {
GITHUB_PULL_REQUEST_LABELED
GITHUB_PULL_REQUEST_OPENED
GITHUB_PULL_REQUEST_REOPENED
GITHUB_PULL_REQUEST_SYNCHRONIZE
GITHUB_PUSH
MANUAL
SCHEDULE
}
type WorkflowRunsConnection {
edges: [WorkflowRunEdge!]!
pageInfo: PageInfo!
}
type __Directive {
name: String!
description: String
isRepeatable: Boolean!
locations: [__DirectiveLocation!]!
args(
includeDeprecated: Boolean = false
): [__InputValue!]!
}
enum __DirectiveLocation {
QUERY
MUTATION
SUBSCRIPTION
FIELD
FRAGMENT_DEFINITION
FRAGMENT_SPREAD
INLINE_FRAGMENT
VARIABLE_DEFINITION
SCHEMA
SCALAR
OBJECT
FIELD_DEFINITION
ARGUMENT_DEFINITION
INTERFACE
UNION
ENUM
ENUM_VALUE
INPUT_OBJECT
INPUT_FIELD_DEFINITION
}
type __EnumValue {
name: String!
description: String
isDeprecated: Boolean!
deprecationReason: String
}
type __Field {
name: String!
description: String
args(
includeDeprecated: Boolean = false
): [__InputValue!]!
type: __Type!
isDeprecated: Boolean!
deprecationReason: String
}
type __InputValue {
name: String!
description: String
type: __Type!
"""A GraphQL-formatted string representing the default value for this input value."""
defaultValue: String
isDeprecated: Boolean!
deprecationReason: String
}
type __Schema {
description: String
types: [__Type!]!
queryType: __Type!
mutationType: __Type
subscriptionType: __Type
directives: [__Directive!]!
}
type __Type {
kind: __TypeKind!
name: String
description: String
specifiedByURL: String
fields(
includeDeprecated: Boolean = false
): [__Field!]
interfaces: [__Type!]
possibleTypes: [__Type!]
enumValues(
includeDeprecated: Boolean = false
): [__EnumValue!]
inputFields(
includeDeprecated: Boolean = false
): [__InputValue!]
ofType: __Type
}
enum __TypeKind {
SCALAR
OBJECT
INTERFACE
UNION
ENUM
INPUT_OBJECT
LIST
NON_NULL
}
type deleteAndroidAppBuildCredentialsResult {
id: ID!
}
type deleteAndroidFcmResult {
id: ID!
}
type deleteAppStoreConnectApiKeyResult {
id: ID!
}
type deleteApplePushKeyResult {
id: ID!
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment