"""
Marks an element of a GraphQL schema as no longer supported.
"""
directive @deprecated(
    """
    Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).
    """
    reason: String = "No longer supported"
) on ARGUMENT_DEFINITION | ENUM_VALUE | FIELD_DEFINITION | INPUT_FIELD_DEFINITION

"""
Directs the executor to include this field or fragment only when the `if` argument is true.
"""
directive @include(
    """
    Included when true.
    """
    if: Boolean!
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

"""
Indicates exactly one field must be supplied and this field must not be `null`.
"""
directive @oneOf on INPUT_OBJECT

"""
Directs the executor to skip this field or fragment when the `if` argument is true.
"""
directive @skip(
    """
    Skipped when true.
    """
    if: Boolean!
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

"""
Exposes a URL that specifies the behavior of this scalar.
"""
directive @specifiedBy(
    """
    The URL that specifies the behavior of this scalar.
    """
    url: String!
) on SCALAR

"""
A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.

In some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.
"""
type __Directive {
    name: String!
    description: String
    isRepeatable: Boolean!
    locations: [__DirectiveLocation!]!
    args(includeDeprecated: Boolean = false): [__InputValue!]!
}

"""
A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.
"""
enum __DirectiveLocation {
    """
    Location adjacent to a query operation.
    """
    QUERY

    """
    Location adjacent to a mutation operation.
    """
    MUTATION

    """
    Location adjacent to a subscription operation.
    """
    SUBSCRIPTION

    """
    Location adjacent to a field.
    """
    FIELD

    """
    Location adjacent to a fragment definition.
    """
    FRAGMENT_DEFINITION

    """
    Location adjacent to a fragment spread.
    """
    FRAGMENT_SPREAD

    """
    Location adjacent to an inline fragment.
    """
    INLINE_FRAGMENT

    """
    Location adjacent to a variable definition.
    """
    VARIABLE_DEFINITION

    """
    Location adjacent to a schema definition.
    """
    SCHEMA

    """
    Location adjacent to a scalar definition.
    """
    SCALAR

    """
    Location adjacent to an object type definition.
    """
    OBJECT

    """
    Location adjacent to a field definition.
    """
    FIELD_DEFINITION

    """
    Location adjacent to an argument definition.
    """
    ARGUMENT_DEFINITION

    """
    Location adjacent to an interface definition.
    """
    INTERFACE

    """
    Location adjacent to a union definition.
    """
    UNION

    """
    Location adjacent to an enum definition.
    """
    ENUM

    """
    Location adjacent to an enum value definition.
    """
    ENUM_VALUE

    """
    Location adjacent to an input object type definition.
    """
    INPUT_OBJECT

    """
    Location adjacent to an input object field definition.
    """
    INPUT_FIELD_DEFINITION
}

"""
One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.
"""
type __EnumValue {
    name: String!
    description: String
    isDeprecated: Boolean!
    deprecationReason: String
}

"""
Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.
"""
type __Field {
    name: String!
    description: String
    args(includeDeprecated: Boolean = false): [__InputValue!]!
    type: __Type!
    isDeprecated: Boolean!
    deprecationReason: String
}

"""
Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.
"""
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
}

"""
A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.
"""
type __Schema {
    description: String

    """
    A list of all types supported by this server.
    """
    types: [__Type!]!

    """
    The type that query operations will be rooted at.
    """
    queryType: __Type!

    """
    If this server supports mutation, the type that mutation operations will be rooted at.
    """
    mutationType: __Type

    """
    If this server support subscription, the type that subscription operations will be rooted at.
    """
    subscriptionType: __Type

    """
    A list of all directives supported by this server.
    """
    directives: [__Directive!]!
}

"""
The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.

Depending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.
"""
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
    isOneOf: Boolean
}

"""
An enum describing what kind of type a given `__Type` is.
"""
enum __TypeKind {
    """
    Indicates this type is a scalar.
    """
    SCALAR

    """
    Indicates this type is an object. `fields` and `interfaces` are valid fields.
    """
    OBJECT

    """
    Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.
    """
    INTERFACE

    """
    Indicates this type is a union. `possibleTypes` is a valid field.
    """
    UNION

    """
    Indicates this type is an enum. `enumValues` is a valid field.
    """
    ENUM

    """
    Indicates this type is an input object. `inputFields` is a valid field.
    """
    INPUT_OBJECT

    """
    Indicates this type is a list. `ofType` is a valid field.
    """
    LIST

    """
    Indicates this type is a non-null. `ofType` is a valid field.
    """
    NON_NULL
}
schema {
    query: Query
    mutation: Mutation
    subscription: Subscription
}

directive @authThirdParty on FIELD_DEFINITION | INPUT_OBJECT | OBJECT

directive @cacheControl(maxAge: Int, scope: CacheControlScope) on FIELD_DEFINITION | INTERFACE | OBJECT

directive @deactivateVia(env: String!) on FIELD_DEFINITION | OBJECT

directive @deprecatedInput(reason: String!) on INPUT_FIELD_DEFINITION

type App implements IApp {
    apiId: String!
    author: ID!
    avatarUrl: String!
    configurationUrl: String
    createdAt: DateTime!
    description: String!
    elements: [IAppElement!]
    id: ID!
    name: String!
    permissions: AppPermissions!
    publicationStatus: AppPublicationStatus!
    setupUrl: String!
    updatedAt: DateTime!
    webhookUrl: String
}

enum AppContentPermission {
    NONE
    READ
    READ_WRITE
}

enum AppElementFieldType {
    BOOLEAN
    COLOR
    DATE
    DATETIME
    FLOAT
    ID
    INT
    JSON
    LOCATION
    RELATION
    RICHTEXT
    STRING
}

enum AppElementType {
    field
    formSidebar
    page
}

type AppInstallation {
    app: App!
    authToken: String!
    config: JSON!
    createdAt: DateTime!
    environment: Environment!
    fields: [IField!]!
    id: ID!
    sidebarElements: [AppSidebarElement!]!
    status: AppInstallationStatus!
    updatedAt: DateTime!
}

enum AppInstallationStatus {
    COMPLETED
    DISABLED
    PENDING
}

type AppPermissions {
    CONTENT: AppContentPermission!
    SCHEMA: AppSchemaPermission!
    USER: AppUserPermission!
    WEBHOOKS: AppWebhooksPermission!
}

input AppPermissionsInput {
    CONTENT: AppContentPermission
    SCHEMA: AppSchemaPermission
    USER: AppUserPermission
    WEBHOOKS: AppWebhooksPermission
}

enum AppPublicationStatus {
    PENDING
    PRIVATE
    PUBLIC
}

enum AppSchemaPermission {
    NONE
    READ
    READ_WRITE
}

type AppSidebarElement implements ISidebarElement {
    appElement: FormSidebarAppElement!
    appInstallation: AppInstallation!
    config: JSON
    createdAt: DateTime!
    description: String
    displayName: String!
    id: ID!
    isEnabled: Boolean!
    model: IModel!
    position: Int!
    updatedAt: DateTime!
}

type AppToken {
    app: App!
    id: ID!
}

type AppTokenViewer implements IViewer {
    availableExtensionPermissions: [AvailableExtensionPermission!]!
    availableExtensionSrcTypes: [ExtensionSrcType!]!
    availableIntegrations: [INTEGRATION_PROVIDER!]!
    id: ID!
    plans: [Plan!]!
    project(id: ID): Project
    regions: [Region!]!
    templates: [ITemplate!]!
    user(id: ID!): UserForApp!
}

enum AppUserPermission {
    NONE
    READ
}

enum AppWebhooksPermission {
    NONE
    READ_WRITE
}

type AppWithSecrets implements IApp {
    apiId: String!
    author: ID!
    avatarUrl: String!
    clientId: String
    clientSecret: String
    configurationUrl: String
    createdAt: DateTime!
    description: String!
    elements: [IAppElement!]
    id: ID!
    name: String!
    permissions: AppPermissions!
    publicationStatus: AppPublicationStatus!
    setupUrl: String!
    updatedAt: DateTime!
    webhookUrl: String
}

type AssetMigration {
    createdAt: DateTime!
    id: ID!
    isRevert: Boolean!
    isViewed: Boolean!
    lastCompletedStep: Int!
    sourceEnvironment: String
    status: String!
    updatedAt: DateTime!
}

type AssetMigrationProgressPayload {
    environmentId: ID!
    isRevert: Boolean!
    isViewed: Boolean!
    lastCompletedStep: Int!
    status: String!
}

type AssetModel implements IFieldParent & IModel {
    apiId: String!
    apiIdPlural: String!
    contentViews(filter: ContentViewFilterInput, includeSystemContentViews: Boolean = false): [ContentView!]!
    createdAt: DateTime!
    createdBy: CreatedBy
    defaultContentView: ContentView!
    description: String
    displayName: String!
    environment: Environment!
    field(id: ID!): IField!
    fields(includeApiOnlyFields: Boolean = false, includeHiddenFields: Boolean = false): [IField!]!
    fieldsConnection(
        first: Int! = 25
        includeApiOnlyFields: Boolean = false
        includeHiddenFields: Boolean = false
        includeSystemFields: Boolean = true
        skip: Int! = 0
    ): FieldsConnection!
    """
    Model has at least one document
    """
    hasContent: Boolean!
    hasLocalizedComponents: Boolean!
    id: ID!
    isLocalized: Boolean!
    isSystem: Boolean!
    isVersioned: Boolean!
    sidebarElements: [ISidebarElement!]!
    titleFields: [IField!]!
    updatedAt: DateTime!
    viewerPermission: ModelViewerPermission!
    workflow: Workflow
}

type AssetSystem implements IAssetConfig {
    apiKey: String!
}

type AsyncOperationPayload {
    migration: Migration!
}

type AuditLog {
    action: AuditLogAction!
    entityId: String
    environmentName: String
    id: String!
    payload: JSON
    resource: AuditLogResource!
    timestamp: DateTime!
    triggerType: AuditLogTriggerType!
    triggeredBy: AuditLogTriggeredBy
}

enum AuditLogAction {
    ACCEPT
    CREATE
    DELETE
    PUBLISH
    UNPUBLISH
    UPDATE
}

enum AuditLogOrderByInput {
    timestamp_ASC
    timestamp_DESC
}

enum AuditLogResource {
    COMPONENT
    CONTENT
    CONTENTVIEW
    ENUMERATION
    ENUMERATION_VALUE
    ENVIRONMENT
    EXTENSION
    FIELD
    INVITE
    LOCALE
    MEMBER
    MODEL
    PAT
    PROJECT
    ROLE
    STAGE
    VIEWGROUP
    WEBHOOK
}

enum AuditLogTriggerType {
    APP_TOKEN
    OPEN
    PAT
    THIRD_PARTY
    USER
}

union AuditLogTriggeredBy = Member | PermanentAuthToken

input AuditLogWhereInput {
    action: AuditLogAction
    entityId: String
    environmentName: String
    resource: AuditLogResource
    timestamp: DateTime
    timestamp_gt: DateTime
    timestamp_gte: DateTime
    timestamp_lt: DateTime
    timestamp_lte: DateTime
    triggerType: AuditLogTriggerType
    triggeredBy: String
}

type AuditLogsPayload {
    logs: [AuditLog!]!
    total: Float!
}

type AvailableExtensionPermission {
    createdAt: DateTime!
    description: String
    id: ID!
    name: AvailableExtensionPermissionAction!
    updatedAt: DateTime!
}

enum AvailableExtensionPermissionAction {
    API
    FORM
    INPUT
}

enum AvailableExtensionSrcType {
    INLINE
    SDK
}

input BatchFieldConditionInput {
    """
    API ID of the field used to set the condition, dependent field
    """
    baseField: String!
    booleanValue: Boolean
    enumerationValues: [String!]
    operator: FieldConditionOperator!
}

"""
Creating an app installation.
"""
input BatchMigrationAppInstallationInput {
    appApiId: String!
    config: JSON!
}

"""
Deleting an app installation.
"""
input BatchMigrationAppUninstallationInput {
    appApiId: String!
}

input BatchMigrationChangeInput {
    createAppInstallation: BatchMigrationAppInstallationInput
    createComponent: BatchMigrationCreateComponentInput
    createComponentField: BatchMigrationCreateComponentFieldInput
    createComponentUnionField: BatchMigrationCreateComponentUnionFieldInput
    createCustomSidebarElement: BatchMigrationCreateCustomSidebarElementInput
    createEnumerableField: BatchMigrationCreateEnumerableFieldInput
    createEnumeration: BatchMigrationCreateEnumerationInput
    createGraphQLRemoteSource: BatchMigrationCreateGraphQLRemoteSourceInput
    createLocale: BatchMigrationCreateLocaleInput
    """
    creates a new model
    """
    createModel: BatchMigrationCreateModelInput
    createRESTRemoteSource: BatchMigrationCreateRESTRemoteSourceInput
    createRelationalField: BatchMigrationCreateRelationalFieldInput
    createRemoteField: BatchMigrationCreateRemoteFieldInput
    createSimpleField: BatchMigrationCreateSimpleFieldInput
    createStage: BatchMigrationCreateStageInput
    createUnionField: BatchMigrationCreateUnionFieldInput
    """
    creates a webhook
    """
    createWebhook: BatchMigrationCreateWebhookInput
    deleteAppInstallation: BatchMigrationAppUninstallationInput
    deleteComponent: BatchMigrationDeleteComponentInput
    deleteCustomSidebarElement: BatchMigrationDeleteCustomSidebarElementInput
    deleteEnumeration: BatchMigrationDeleteEnumerationInput
    deleteField: BatchMigrationDeleteFieldInput
    deleteLocale: BatchMigrationDeleteLocaleInput
    deleteModel: BatchMigrationDeleteModelInput
    deleteRemoteSource: BatchMigrationDeleteRemoteSourceInput
    deleteStage: BatchMigrationDeleteStageInput
    """
    deletes a webhook
    """
    deleteWebhook: BatchMigrationDeleteWebhookInput
    refreshGraphQLRemoteSourceSchema: BatchMigrationRefreshGraphQLRemoteSourceSchemaInput
    """
    updates config and status for an AppInstallation, only valid for App Token bearer
    """
    updateAppInstallation: BatchMigrationUpdateAppInstallationInput
    updateComponent: BatchMigrationUpdateComponentInput
    updateComponentField: BatchMigrationUpdateComponentFieldInput
    updateComponentUnionField: BatchMigrationUpdateComponentUnionFieldInput
    updateEnumerableField: BatchMigrationUpdateEnumerableFieldInput
    updateEnumeration: BatchMigrationUpdateEnumerationInput
    updateGraphQLRemoteSource: BatchMigrationUpdateGraphQLRemoteSourceInput
    updateLocale: BatchMigrationUpdateLocaleInput
    updateModel: BatchMigrationUpdateModelInput
    updateRESTRemoteSource: BatchMigrationUpdateRESTRemoteSourceInput
    updateRelationalField: BatchMigrationUpdateRelationalFieldInput
    updateRemoteField: BatchMigrationUpdateRemoteFieldInput
    updateSimpleField: BatchMigrationUpdateSimpleFieldInput
    updateStage: BatchMigrationUpdateStageInput
    updateUnionField: BatchMigrationUpdateUnionFieldInput
    """
    updates a webhook
    """
    updateWebhook: BatchMigrationUpdateWebhookInput
}

"""
Creating a component field
"""
input BatchMigrationCreateComponentFieldInput {
    apiId: String!
    componentApiId: String!
    description: String
    displayName: String!
    formExtension: String
    formRenderer: String
    isList: Boolean
    isRequired: Boolean
    parentApiId: String!
    position: Int
    tableExtension: String
    tableRenderer: String
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

"""
Creating a component.
"""
input BatchMigrationCreateComponentInput {
    apiId: String!
    apiIdPlural: String!
    description: String
    displayName: String!
}

"""
Creating a component-union field
"""
input BatchMigrationCreateComponentUnionFieldInput {
    apiId: String!
    componentApiIds: [String!]!
    description: String
    displayName: String!
    formExtension: String
    formRenderer: String
    isList: Boolean
    isRequired: Boolean
    parentApiId: String!
    tableExtension: String
    tableRenderer: String
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

"""
Creating a custom input type definition
"""
input BatchMigrationCreateCustomInputTypeDefinitionInput {
    """
    GraphQL type input definition in SDL format
    """
    sdl: String!
}

"""
Creating a custom sidebar element with app element
"""
input BatchMigrationCreateCustomSidebarElementInput {
    """
    Api Id of the App
    """
    appApiId: String!
    """
    Api Id of the App element to create custom sidebar element with
    """
    appElementApiId: String!
    """
    Json metadata associated with the sidebar element
    """
    config: JSON
    """
    Description name for the sidebar element
    """
    description: String
    """
    Display name for the sidebar element
    """
    displayName: String!
    """
    Api Id of the model associated with the custom sidebar element
    """
    modelApiId: String!
}

"""
Creating a custom type definition
"""
input BatchMigrationCreateCustomTypeDefinitionInput {
    """
    GraphQL type definition in SDL format
    Can be enum or object type
    """
    sdl: String!
}

"""
Creating an enumerable field.
"""
input BatchMigrationCreateEnumerableFieldInput {
    apiId: String!
    description: String
    displayName: String!
    enumerationApiId: String!
    formExtension: String
    formRenderer: String
    initialValue: String
    isHidden: Boolean
    isList: Boolean
    isLocalized: Boolean
    isRequired: Boolean
    isSystem: Boolean
    isTitle: Boolean
    isUnique: Boolean
    migrationValue: String
    modelApiId: String
    parentApiId: String
    position: Int
    tableExtension: String
    tableRenderer: String
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

"""
Creating enumeration
"""
input BatchMigrationCreateEnumerationInput {
    apiId: String!
    description: String
    displayName: String!
    isSystem: Boolean
    values: [BatchMigrationCreateEnumerationValueInput!]!
}

"""
enumeration value
"""
input BatchMigrationCreateEnumerationValueInput {
    apiId: String!
    displayName: String!
}

input BatchMigrationCreateGraphQLRemoteSourceInput {
    debugEnabled: Boolean
    description: String
    displayName: String!
    headers: JSON
    """
    HTTP headers that will be used for introspection
    """
    introspectionHeaders: JSON
    """
    HTTP method that will be used for introspection
    """
    introspectionMethod: GraphQLRemoteSourceIntrospectionMethod!
    """
    Specific URL that will be used for introspection if the introspection is available on another url than the regular url.
    Can be ignored if the introspection url is the same as the url of the remote source.
    """
    introspectionUrl: String
    kind: RemoteSourceKind!
    """
    Oauth input that can be used to get access token for the remote source
    """
    oAuth: RemoteSourceOAuthInput
    """
    Unique prefix that will be prepended to all of the remote types. This value cannot be changed!
    """
    prefix: String!
    """
    Custom GraphQL input types that can be used as arguments in remote fields that belong to this remoteSource
    """
    remoteTypeDefinitions: BatchMigrationCreateRemoteTypeDefinitionInput
    url: String!
}

"""
Creating locale
"""
input BatchMigrationCreateLocaleInput {
    apiId: String!
    description: String
    displayName: String!
}

"""
Creating a model.
"""
input BatchMigrationCreateModelInput {
    """
    The model apiId
    """
    apiId: String!
    """
    The models plural apiId. This is used for lists
    """
    apiIdPlural: String!
    """
    Optional description of the model
    """
    description: String
    """
    Display name that is used to render the model in the webapp
    """
    displayName: String!
    """
    Only AppTokens should provide this flag
    """
    isSystem: Boolean
    """
    Sidebar elements to create
    """
    sidebarElements: [BatchMigrationModelCustomSidebarElementInput!]
}

input BatchMigrationCreateRESTRemoteSourceInput {
    debugEnabled: Boolean
    description: String
    displayName: String!
    headers: JSON
    kind: RemoteSourceKind!
    """
    Oauth input that can be used to get access token for the remote source
    """
    oAuth: RemoteSourceOAuthInput
    """
    Unique prefix that will be prepended to all of the remote types. This value cannot be changed!
    """
    prefix: String!
    """
    Remote type definitions that the remote source supports or input types that can be used by any remote field of this remote source
    """
    remoteTypeDefinitions: BatchMigrationCreateRemoteTypeDefinitionInput
    url: String!
}

"""
Creating a relational field
"""
input BatchMigrationCreateRelationalFieldInput {
    apiId: String!
    description: String
    displayName: String!
    formConfig: JSON
    formExtension: String
    formRenderer: String
    isHidden: Boolean
    isList: Boolean
    """
    Marks the field as required.
    Note: This is only supported for RelationFieldType ASSET!
    """
    isRequired: Boolean
    modelApiId: String
    parentApiId: String
    reverseField: BatchMigrationCreateReverseRelationalFieldInput!
    tableConfig: JSON
    tableExtension: String
    tableRenderer: String
    type: RelationalFieldType!
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

input BatchMigrationCreateRemoteFieldInput {
    apiId: String!
    description: String
    displayName: String!
    formConfig: JSON
    formExtension: String
    formRenderer: String
    inputArgs: [BatchMigrationRemoteFieldInputArgInput!]
    isList: Boolean
    isRequired: Boolean
    parentApiId: String!
    position: Int
    remoteConfig: BatchMigrationRemoteFieldConfigInput!
    tableConfig: JSON
    tableExtension: String
    tableRenderer: String
    type: RemoteFieldType!
    visibility: VisibilityTypes
}

input BatchMigrationCreateRemoteTypeDefinitionInput {
    sdl: String!
}

"""
reverse field args
"""
input BatchMigrationCreateReverseRelationalFieldInput {
    apiId: String!
    description: String
    displayName: String!
    isHidden: Boolean
    isList: Boolean
    isUnidirectional: Boolean
    modelApiId: String!
    visibility: VisibilityTypes
}

"""
reverse field args
"""
input BatchMigrationCreateReverseUnionFieldInput {
    apiId: String
    description: String
    displayName: String
    isHidden: Boolean
    isList: Boolean
    modelApiIds: [String!]!
    visibility: VisibilityTypes
}

"""
Creating a simple field.
"""
input BatchMigrationCreateSimpleFieldInput {
    apiId: String!
    description: String
    displayName: String!
    embeddableModels: [String!]
    embedsEnabled: Boolean
    formConfig: JSON
    formExtension: String
    formRenderer: String
    initialValue: String
    isHidden: Boolean
    isList: Boolean
    isLocalized: Boolean
    isRequired: Boolean
    isSystem: Boolean
    isTitle: Boolean
    isUnique: Boolean
    migrationValue: String
    modelApiId: String
    parentApiId: String
    position: Int
    tableConfig: JSON
    tableExtension: String
    tableRenderer: String
    type: SimpleFieldType!
    validations: SimpleFieldValidationsInput
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

"""
Creating a stage.
"""
input BatchMigrationCreateStageInput {
    apiId: String!
    color: ColorPalette!
    description: String
    displayName: String!
    position: Int
}

"""
Creating a union field
"""
input BatchMigrationCreateUnionFieldInput {
    apiId: String!
    description: String
    displayName: String!
    formExtension: String
    formRenderer: String
    isHidden: Boolean
    isList: Boolean
    modelApiId: String
    parentApiId: String
    reverseField: BatchMigrationCreateReverseUnionFieldInput!
    tableExtension: String
    tableRenderer: String
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

input BatchMigrationCreateWebhookInput {
    description: String
    headers: JSON
    includePayload: Boolean!
    isActive: Boolean!
    isSystem: Boolean
    method: WebhookMethod = POST
    """
    Pass an empty array for all existing models.
    This will also setup the webhook for models
    created in the future
    """
    models: [ID!]!
    name: String!
    secretKey: String
    """
    Pass an empty array for all existing stages.
    This will also setup the webhook for stages
    created in the future
    """
    stages: [ID!]!
    triggerActions: [WebhookTriggerAction!]!
    triggerSources: [WebhookTriggerSource!]
    triggerType: WebhookTriggerType!
    url: String!
}

"""
Deleting a component.
"""
input BatchMigrationDeleteComponentInput {
    apiId: String!
}

"""
Delete an existing custom input type definition
"""
input BatchMigrationDeleteCustomInputTypeDefinitionInput {
    apiId: String!
}

"""
Deleting a custom sidebar element created by app element
"""
input BatchMigrationDeleteCustomSidebarElementInput {
    """
    Api Id of the App
    """
    appApiId: String!
    """
    Api Id of the App element associated with the custom sidebar element
    """
    appElementApiId: String!
    """
    Api Id of the model associated with the custom sidebar element
    """
    modelApiId: String!
}

"""
Deleting enumerable field
"""
input BatchMigrationDeleteEnumerationInput {
    apiId: String!
}

"""
Deleting a field.
"""
input BatchMigrationDeleteFieldInput {
    apiId: String!
    modelApiId: String
    parentApiId: String
}

"""
Deleting locale
"""
input BatchMigrationDeleteLocaleInput {
    apiId: String!
    force: Boolean
}

"""
Deleting a model.
"""
input BatchMigrationDeleteModelInput {
    apiId: String!
}

input BatchMigrationDeleteRemoteSourceInput {
    prefix: String!
}

"""
Delete an existing custom type definition
"""
input BatchMigrationDeleteRemoteTypeDefinitionInput {
    apiId: String!
}

"""
Deleting a stage.
"""
input BatchMigrationDeleteStageInput {
    apiId: String!
}

input BatchMigrationDeleteWebhookInput {
    webhookId: ID!
}

"""
Creating a simple field.
"""
input BatchMigrationEmbeddableModelsInput {
    modelsToAdd: [String!]
    modelsToRemove: [String!]
}

input BatchMigrationInput {
    changes: [BatchMigrationChangeInput!]!
    environmentId: ID!
    name: String
}

input BatchMigrationModelCustomSidebarElementInput {
    """
    Api Id of the App
    """
    appApiId: String!
    """
    Api Id of the App element to create custom sidebar element with
    """
    appElementApiId: String!
    """
    Json metadata associated with the sidebar element
    """
    config: JSON
    """
    Description name for the sidebar element
    """
    description: String
    """
    Display name for the sidebar element
    """
    displayName: String!
}

input BatchMigrationModelSystemSidebarElementInput {
    config: JSON
    type: SystemSidebarElementType!
}

input BatchMigrationRefreshGraphQLRemoteSourceSchemaInput {
    prefix: String!
}

input BatchMigrationRemoteFieldConfigInput {
    cacheTTLSeconds: Int
    """
    If true, headers that are sent by the client will be forwarded to the remote source
    """
    forwardClientHeaders: Boolean
    """
    In case of apiType GraphQL graphqlQuery contains the GraphQL query that will be sent to the remote source
    """
    graphQLQuery: String
    headers: JSON
    method: RemoteFieldApiMethod!
    remoteSourcePrefix: String!
    """
    In case of apiType REST restPath contains the path that will be appended to the API base url
    """
    restPath: String
    returnTypeApiId: String!
}

input BatchMigrationRemoteFieldInputArgInput {
    apiId: String!
    isList: Boolean!
    isRequired: Boolean!
    remoteTypeApiId: String!
}

input BatchMigrationUpdateAppInstallationInput {
    """
    App Installation config, the object passed will be merged with the existing config
    """
    config: JSON
    """
    App Installation status
    """
    status: AppInstallationStatus
}

"""
Updating component field
"""
input BatchMigrationUpdateComponentFieldInput {
    apiId: String!
    description: String
    displayName: String
    isList: Boolean
    isRequired: Boolean
    newApiId: String
    parentApiId: String!
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

"""
Updating a component.
"""
input BatchMigrationUpdateComponentInput {
    apiId: String!
    apiIdPlural: String
    description: String
    displayName: String
    newApiId: String
}

"""
updating a component-union field
"""
input BatchMigrationUpdateComponentUnionFieldInput {
    apiId: String!
    componentApiIds: [String!]
    description: String
    displayName: String
    newApiId: String
    parentApiId: String!
    visibilityCondition: BatchFieldConditionInput
}

"""
Updating enumerable field
"""
input BatchMigrationUpdateEnumerableFieldInput {
    apiId: String!
    description: String
    displayName: String
    initialValue: String
    isHidden: Boolean
    isList: Boolean
    isLocalized: Boolean
    isRequired: Boolean
    isSystem: Boolean
    isTitle: Boolean
    isUnique: Boolean
    migrationValue: String
    modelApiId: String
    newApiId: String
    parentApiId: String
    position: Int
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

"""
Updating enumeration
"""
input BatchMigrationUpdateEnumerationInput {
    apiId: String!
    description: String
    displayName: String
    isSystem: Boolean
    newApiId: String
    valuesToCreate: [BatchMigrationCreateEnumerationValueInput!]
    valuesToDelete: [String!]
    valuesToUpdate: [BatchMigrationUpdateEnumerationValueInput!]
}

"""
update enumeration value
"""
input BatchMigrationUpdateEnumerationValueInput {
    apiId: String!
    displayName: String
    newApiId: String
}

input BatchMigrationUpdateGraphQLRemoteSourceInput {
    debugEnabled: Boolean
    description: String
    displayName: String
    headers: JSON
    introspectionHeaders: JSON
    introspectionMethod: GraphQLRemoteSourceIntrospectionMethod
    introspectionUrl: String
    kind: RemoteSourceKind
    """
    Oauth input that can be used to get access token for the remote source
    """
    oAuth: RemoteSourceOAuthInput
    prefix: String!
    remoteTypeDefinitionsToUpsert: BatchMigrationUpsertRemoteTypeDefinitionsInput
    url: String
}

"""
Updating locale
"""
input BatchMigrationUpdateLocaleInput {
    apiId: String!
    description: String
    displayName: String
    isDefault: Boolean
    newApiId: String
}

"""
Updating a model.
"""
input BatchMigrationUpdateModelInput {
    apiId: String!
    apiIdPlural: String
    description: String
    displayName: String
    isSystem: Boolean
    newApiId: String
    sidebarElementsToUpsert: BatchMigrationUpsertSidebarElementInput
}

input BatchMigrationUpdateRESTRemoteSourceInput {
    debugEnabled: Boolean
    description: String
    displayName: String!
    headers: JSON
    kind: RemoteSourceKind
    """
    Oauth input that can be used to get access token for the remote source
    """
    oAuth: RemoteSourceOAuthInput
    prefix: String!
    remoteTypeDefinitionsToUpsert: BatchMigrationUpsertRemoteTypeDefinitionsInput
    url: String
}

"""
Updating relational field
"""
input BatchMigrationUpdateRelationalFieldInput {
    apiId: String!
    description: String
    displayName: String
    formConfig: JSON
    isHidden: Boolean
    isList: Boolean
    """
    Marks the field as required.
    Note: This is only supported for RelationFieldType ASSET!
    """
    isRequired: Boolean
    isUnidirectional: Boolean
    modelApiId: String
    newApiId: String
    parentApiId: String
    tableConfig: JSON
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

input BatchMigrationUpdateRemoteFieldConfigInput {
    cacheTTLSeconds: Int
    """
    If true, headers that are sent by the client will be forwarded to the remote source
    """
    forwardClientHeaders: Boolean
    """
    In case of apiType GraphQL graphqlQuery contains the GraphQL query that will be sent to the remote source
    """
    graphQLQuery: String
    headers: JSON
    method: RemoteFieldApiMethod
    remoteSourcePrefix: String
    """
    In case of apiType REST restPath contains the path that will be appended to the API base url
    """
    restPath: String
    returnTypeApiId: String
}

input BatchMigrationUpdateRemoteFieldInput {
    apiId: String!
    description: String
    displayName: String
    extensions: JSON
    formConfig: FieldConfigInput
    inputArgs: BatchMigrationUpsertFieldInputArgInput
    isList: Boolean
    isRequired: Boolean
    meta: JSON
    newApiId: String
    parentApiId: String!
    remoteConfig: BatchMigrationUpdateRemoteFieldConfigInput
    tableConfig: FieldConfigInput
    visibility: VisibilityTypes
}

"""
reverse field args
"""
input BatchMigrationUpdateReverseUnionFieldInput {
    modelApiIds: [String!]!
}

"""
Updating simple field
"""
input BatchMigrationUpdateSimpleFieldInput {
    apiId: String!
    description: String
    displayName: String
    embeddableModels: BatchMigrationEmbeddableModelsInput
    embedsEnabled: Boolean
    formConfig: JSON
    formExtension: String
    formRenderer: String
    initialValue: String
    isHidden: Boolean
    isList: Boolean
    isLocalized: Boolean
    isRequired: Boolean
    isSystem: Boolean
    isTitle: Boolean
    isUnique: Boolean
    migrationValue: String
    modelApiId: String
    newApiId: String
    parentApiId: String
    position: Int
    tableConfig: JSON
    tableExtension: String
    tableRenderer: String
    validations: SimpleFieldValidationsInput
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

"""
Updating a stage
"""
input BatchMigrationUpdateStageInput {
    apiId: String!
    color: ColorPalette
    description: String
    display: String
    newApiId: String
    position: Int
}

"""
updating a union field
"""
input BatchMigrationUpdateUnionFieldInput {
    apiId: String!
    description: String
    displayName: String
    modelApiId: String
    newApiId: String
    parentApiId: String
    reverseField: BatchMigrationUpdateReverseUnionFieldInput
    visibility: VisibilityTypes
    visibilityCondition: BatchFieldConditionInput
}

input BatchMigrationUpdateWebhookInput {
    description: String
    headers: JSON
    includePayload: Boolean
    isActive: Boolean
    isSystem: Boolean
    method: WebhookMethod
    models: [ID!]
    name: String
    secretKey: String
    stages: [ID!]
    triggerActions: [WebhookTriggerAction!]
    triggerSources: [WebhookTriggerSource!]
    triggerType: WebhookTriggerType
    url: String
    webhookId: ID!
}

input BatchMigrationUpsertCustomSidebarElementInputToDeleteInput {
    """
    Api Id of the App
    """
    appApiId: String!
    """
    Api Id of the App element associated with the custom sidebar element
    """
    appElementApiId: String!
}

input BatchMigrationUpsertFieldInputArgInput {
    fieldInputArgsToCreate: [BatchMigrationUpsertFieldInputArgInputToCreateInput!]
    fieldInputArgsToDelete: [BatchMigrationUpsertFieldInputArgInputToDeleteInput!]
    fieldInputArgsToUpdate: [BatchMigrationUpsertFieldInputArgInputToUpdateInput!]
}

input BatchMigrationUpsertFieldInputArgInputToCreateInput {
    apiId: String!
    isList: Boolean!
    isRequired: Boolean!
    remoteTypeApiId: String!
}

input BatchMigrationUpsertFieldInputArgInputToDeleteInput {
    argApiId: String!
}

input BatchMigrationUpsertFieldInputArgInputToUpdateInput {
    apiId: String
    argApiId: String!
    isList: Boolean
    isRequired: Boolean
    remoteTypeApiId: String
}

input BatchMigrationUpsertRemoteTypeDefinitionToCreateInput {
    sdl: String!
}

input BatchMigrationUpsertRemoteTypeDefinitionToDeleteInput {
    apiId: String!
}

input BatchMigrationUpsertRemoteTypeDefinitionToUpdateInput {
    apiId: String!
    sdl: String
}

input BatchMigrationUpsertRemoteTypeDefinitionsInput {
    remoteTypeDefinitionsToCreate: [BatchMigrationUpsertRemoteTypeDefinitionToCreateInput!]
    remoteTypeDefinitionsToDelete: [BatchMigrationUpsertRemoteTypeDefinitionToDeleteInput!]
    remoteTypeDefinitionsToUpdate: [BatchMigrationUpsertRemoteTypeDefinitionToUpdateInput!]
}

input BatchMigrationUpsertSidebarElementInput {
    customSidebarElementsToCreate: [BatchMigrationModelCustomSidebarElementInput!]
    customSidebarElementsToDelete: [BatchMigrationUpsertCustomSidebarElementInputToDeleteInput!]
    sidebarElementsToUpdate: [BatchMigrationUpsertSidebarElementInputToUpdateInput!]
    systemSidebarElementsToCreate: [BatchMigrationModelSystemSidebarElementInput!]
    systemSidebarElementsToDelete: [BatchMigrationUpsertSystemSidebarElementInputToDeleteInput!]
}

input BatchMigrationUpsertSidebarElementInputToUpdateInput {
    config: JSON
    description: String
    displayName: String!
    newDisplayName: String
    position: Int
}

input BatchMigrationUpsertSystemSidebarElementInputToDeleteInput {
    type: SystemSidebarElementType!
}

type BillingPeriod {
    from: DateTime!
    to: DateTime!
}

type BooleanFieldCondition implements IFieldCondition {
    """
    Field used to set the condition
    """
    baseField: SimpleField!
    createdAt: DateTime!
    id: ID!
    operator: FieldConditionOperator!
    updatedAt: DateTime!
    value: Boolean!
}

enum CacheControlScope {
    PRIVATE
    PUBLIC
}

input CloneProjectInput {
    description: String
    name: String!
    region: String!
    """
    required to clone from a template or a project you are an owner of
    """
    template: CloneProjectTemplateInput!
}

"""
clone project from a template
"""
input CloneProjectTemplateInput {
    """
    Allows to clone project with App Installations from source Project
    """
    appInstallations: Boolean! = false
    """
    Set to false to not include content
    """
    content: Boolean! = true
    """
    id of template (if it's marked as template) or id of a project you are an owner of
    """
    templateId: ID!
    """
    Set to true to include webhooks. If webhooks are included, they will be disabled initially in the cloned project.
    """
    webhooks: Boolean! = false
}

union CloningFrom = Project | StarterTemplate | Template

type CloningProject implements IPendingProject {
    cloningFrom: CloningFrom!
    description: String
    id: ID!
    name: String!
    picture: String
}

enum ColorPalette {
    BLUE
    BROWN
    GREEN
    INDIGO
    NEUTRAL
    OLIVE
    ORANGE
    PINK
    PURPLE
    RED
    ROSE
    TEAL
    YELLOW
}

enum ColumnOrderByDir {
    ASC
    DESC
}

type CommentingConfig {
    token: String!
    url: String!
    userKey: String!
}

input CommentingInfoInput {
    gcms: String
}

type CommentingInfoPayload {
    gcms: String
}

type CommonFilestack {
    apiKey: String!
    path: String!
    security: CommonFilestackSecurityOptions!
}

type CommonFilestackSecurityOptions {
    auth: FilestackSecurityAuthOptions
    enabled: Boolean!
}

type Component implements IFieldParent & IRecentSchemaChange {
    apiId: String!
    apiIdPlural: String!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    environment: Environment!
    field(id: ID!): IField!
    fields(includeApiOnlyFields: Boolean = false, includeHiddenFields: Boolean = false): [IField!]!
    fieldsConnection(
        first: Int! = 25
        includeApiOnlyFields: Boolean = false
        includeHiddenFields: Boolean = false
        includeSystemFields: Boolean = true
        skip: Int! = 0
    ): FieldsConnection!
    """
    Component has at least one instance in any of its usages
    """
    hasContent: Boolean!
    id: ID!
    """
    Is true when at least one field is marked as localized
    """
    isLocalized: Boolean!
    isSystem: Boolean!
    titleFields: [IField!]!
    updatedAt: DateTime!
}

type ComponentField implements IField & IRequireableField & IVisibilityConditionalField {
    apiId: String!
    component: Component!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfig!
    hasEmptyValues: Boolean!
    id: ID!
    isHidden: Boolean! @deprecated(reason: "Use visibility instead")
    isList: Boolean!
    isRequired: Boolean!
    isSystem: Boolean!
    meta: JSON
    """
    This will throw a runtime error for fields that are on a component instead of model!
    """
    model: IModel! @deprecated(reason: "Use parent instead")
    parent: IFieldParent!
    position: Int!
    tableConfig: FieldConfig!
    type: ComponentFieldType!
    updatedAt: DateTime!
    visibility: VisibilityTypes!
    visibilityCondition: IFieldCondition
}

enum ComponentFieldType {
    COMPONENT
}

type ComponentUnionField implements IField & IRequireableField & IVisibilityConditionalField {
    apiId: String!
    components: [Component!]!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfig!
    id: ID!
    isHidden: Boolean! @deprecated(reason: "Use visibility instead")
    isList: Boolean!
    isRequired: Boolean!
    isSystem: Boolean!
    meta: JSON
    """
    This will throw a runtime error for fields that are on a component instead of model!
    """
    model: IModel! @deprecated(reason: "Use parent instead")
    parent: IFieldParent!
    position: Int!
    tableConfig: FieldConfig!
    type: ComponentUnionFieldType!
    updatedAt: DateTime!
    visibility: VisibilityTypes!
    visibilityCondition: IFieldCondition
}

enum ComponentUnionFieldType {
    COMPONENT_UNION
}

type ContentModel {
    assetModel: IModel!
    component(apiId: String, id: ID): Component!
    components(includeSystemComponents: Boolean): [Component!]!
    enumeration(apiId: String, id: ID): Enumeration!
    enumerations(includeSystemEnumerations: Boolean = false): [Enumeration!]!
    field(id: ID!): IField!
    locales: [Locale!]!
    model(apiId: String, id: ID): IModel!
    models(includeSystemModels: Boolean): [IModel!]!
    stages: [Stage!]!
    unions: [Union]!
}

type ContentPermissionAppTokenTarget {
    appInstallation: AppInstallation
}

type ContentPermissionPermanentAuthTokenTarget {
    permanentAuthToken: PermanentAuthToken!
}

type ContentPermissionPublicTarget {
    environment: Environment!
}

type ContentPermissionRoleTarget {
    environment: Environment!
    role: Role!
}

union ContentPermissionTarget =
      ContentPermissionAppTokenTarget
    | ContentPermissionPermanentAuthTokenTarget
    | ContentPermissionPublicTarget
    | ContentPermissionRoleTarget

enum ContentPermissionTargetKind {
    PAT
    PUBLIC
    ROLE
}

type ContentView {
    allColumns: [IContentViewColumn!]!
    columns: [ContentViewColumn!]! @deprecated(reason: "Use allColumns instead")
    createdAt: DateTime!
    description: String
    filters: JSON!
    id: ID!
    isSystem: Boolean!
    model: IModel!
    name: String!
    orderBy: OrderBy
    position: Int
    type: ContentViewType!
    updatedAt: DateTime!
    viewGroup: ViewGroup!
}

type ContentViewColumn {
    field: IField!
    id: ID!
    isVisible: Boolean!
    position: Int!
    width: Int
}

input ContentViewColumnInput {
    fieldId: ID
    isVisible: Boolean!
    type: ContentViewColumnType = FIELD
    width: Int
}

enum ContentViewColumnType {
    FIELD
    STAGES
}

type ContentViewFieldColumn implements IContentViewColumn {
    field: IField!
    id: ID!
    isVisible: Boolean!
    position: Int!
    type: ContentViewColumnType!
    width: Int
}

input ContentViewFilterInput {
    limit: Int
    search: String
    skip: Int
    """
    Only include content views when the current viewer has access to the content of the connected model
    Conditional access is treated as having access. This does only work on UseViewer (PATs are not supported).
    This filter checks for READ access on the DRAFT stage only.
    """
    viewerHasContentPermissions: Boolean! = false
}

type ContentViewSystemColumn implements IContentViewColumn {
    description: String
    id: ID!
    isVisible: Boolean!
    name: String!
    position: Int!
    type: ContentViewColumnType!
    width: Int
}

enum ContentViewType {
    BUILT_IN
    PUBLIC
}

input CreateAppExchangeTokenInput {
    appApiId: String!
    environment: ID!
}

type CreateAppExchangeTokenPayload {
    createdAppExchangeToken: String!
}

input CreateAppInstallationInput {
    appApiId: String!
    config: JSON!
    environment: ID!
    status: AppInstallationStatus
}

type CreateAppInstallationPayload {
    createdAppInstallation: AppInstallation!
}

input CreateComponentFieldInput {
    apiId: String!
    component: ID!
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfigInput
    isList: Boolean!
    isRequired: Boolean!
    isSystem: Boolean
    meta: JSON
    """
    This can be a model or component id
    """
    parentId: ID!
    position: Int
    tableConfig: FieldConfigInput
    visibility: VisibilityTypes! = READ_WRITE
    visibilityCondition: FieldConditionInput
}

input CreateComponentInput {
    apiId: String!
    apiIdPlural: String!
    description: String
    displayName: String!
    environmentId: ID!
    isSystem: Boolean
}

input CreateComponentUnionFieldInput {
    apiId: String!
    components: [ID!]!
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfigInput
    isList: Boolean!
    isSystem: Boolean
    meta: JSON
    """
    This can be a model or component id
    """
    parentId: ID!
    position: Int
    tableConfig: FieldConfigInput
    visibility: VisibilityTypes! = READ_WRITE
    visibilityCondition: FieldConditionInput
}

type CreateContentPermission implements IContentPermission {
    condition: String
    createdAt: DateTime!
    enabled: Boolean!
    id: ID!
    locales: [Locale!]
    model: IModel
    target: ContentPermissionTarget!
    updatedAt: DateTime!
}

"""
CreateContentPermissionTargetInput describes the target of a Create<Action>ContentPermissionInput
Depending on the kind you need to pass different ids:
- ROLE: roleId & environmentId
- PAT: patId
- PUBLIC: environmentId
"""
input CreateContentPermissionTargetInput {
    environmentId: ID
    kind: ContentPermissionTargetKind!
    patId: ID
    roleId: ID
}

input CreateContentViewInput {
    columns: [ContentViewColumnInput!]!
    description: String
    filters: JSON
    modelId: ID!
    name: String!
    orderBy: OrderByInput
    viewGroupId: ID
}

type CreateContentViewPayload {
    createdContentView: ContentView!
}

input CreateCreateContentPermissionInput {
    enabled: Boolean = true
    locales: [ID!]
    model: CreateCreateContentPermissionModelInput
    target: CreateContentPermissionTargetInput!
}

input CreateCreateContentPermissionModelInput {
    condition: String
    id: ID!
}

type CreateCreateContentPermissionPayload {
    permission: CreateContentPermission!
}

input CreateCustomSidebarElementInput {
    appElementId: ID
    appInstallationId: ID
    config: JSON
    description: String
    displayName: String!
    extensionId: ID
    modelId: ID!
}

input CreateDeleteContentPermissionInput {
    enabled: Boolean = true
    locales: [ID!]
    model: CreateDeleteContentPermissionModelInput
    target: CreateContentPermissionTargetInput!
}

input CreateDeleteContentPermissionModelInput {
    condition: String
    id: ID!
}

type CreateDeleteContentPermissionPayload {
    permission: DeleteContentPermission!
}

input CreateEnumerableFieldInput {
    apiId: String!
    description: String
    displayName: String!
    enumerationId: ID!
    extensions: JSON
    formConfig: FieldConfigInput
    initialValue: String
    isHidden: Boolean
    isList: Boolean!
    isLocalized: Boolean
    isRequired: Boolean!
    isSystem: Boolean
    isTitle: Boolean
    isUnique: Boolean!
    meta: JSON
    migrationValue: String
    modelId: ID
    """
    This can be a model or component id, modelId must be empty when parentId is used
    either modelId or parentId needs to be set and is required via validation, it will be made required.
    """
    parentId: ID
    position: Int
    tableConfig: FieldConfigInput
    type: EnumerableFieldType!
    visibility: VisibilityTypes
    visibilityCondition: FieldConditionInput
}

input CreateEnumerationInput {
    apiId: String!
    description: String
    displayName: String!
    environmentId: ID!
    isSystem: Boolean
    values: [EnumerationValueCreateInput!]!
}

input CreateEnvironmentInput {
    """
    Assign color to the environment, if not passed a random color will be set
    """
    color: ColorPalette
    description: String
    displayName: String!
    """
    Specify which environment to use
    as origin
    """
    fromEnvironment: ID!
    """
    This will be used in your
    API endpoint and has to be
    an all-lowercase alphanumeric
    string between 1 and 16 characters
    """
    name: String!
    """
    Allows to create environment
    with App Installations of origin environment
    """
    withAppInstallations: Boolean! = false
    """
    Setting this to false allows the environment to be created without the assets
    of the origin environment.
    This option is true by default.
    """
    withAssets: Boolean = true
    """
    Allows to create environment
    with content of origin environment
    """
    withContent: Boolean
    """
    Allows to create environment
    with webhooks of the origin environment.
    By default cloned environments will get the same webhooks that will be initially deactivated.
    """
    withWebhooks: Boolean! = true
}

type CreateEnvironmentPayload {
    createdEnvironment: Environment!
}

input CreateFieldExtensionInput {
    apiId: String!
    config: JSON!
    description: String
    environmentId: ID!
    fieldType: ExtensionFieldType!
    hasFormRenderer: Boolean!
    hasListRenderer: Boolean!
    hasTableRenderer: Boolean!
    isActive: Boolean!
    meta: JSON
    name: String
    neededPermissions: [ID!]
    src: String!
    srcTypeId: ID!
}

type CreateFieldExtensionPayload {
    createdExtension: FieldExtension!
}

input CreateFieldInputArgInput {
    apiId: String!
    isList: Boolean!
    isRequired: Boolean!
    remoteTypeId: ID!
}

input CreateGatsbyCloudIntegrationInput {
    """
    URL to trigger a Deploy Build.
    """
    buildWebhookURL: String!
    description: String
    displayName: String
    environmentId: ID!
    """
    URL to trigger a CMS Preview build.
    """
    previewWebhookURL: String!
    """
    Prefix of your site
    Only lower case alphabetical characters, numbers and underscores are allowed.
    """
    sitePrefix: String!
}

type CreateGatsbyCloudIntegrationPayload {
    createdGatsbyCloudIntegration: GatsbyCloudIntegration!
}

input CreateGraphQLRemoteSourceInput {
    debugEnabled: Boolean
    description: String
    displayName: String!
    environmentId: ID!
    headers: JSON
    """
    HTTP headers that will be used for introspection
    """
    introspectionHeaders: JSON
    """
    HTTP method that will be used for introspection
    """
    introspectionMethod: GraphQLRemoteSourceIntrospectionMethod!
    """
    Specific URL that will be used for introspection if the introspection is available on another url than the regular url.
    Can be ignored if the introspection url is the same as the url of the remote source.
    """
    introspectionUrl: String
    kind: RemoteSourceKind!
    """
    Oauth input that can be used to get access token for the remote source
    """
    oAuth: RemoteSourceOAuthInput
    """
    Unique prefix that will be prepended to all of the remote types. This value cannot be changed!
    """
    prefix: String!
    """
    Custom GraphQL input types that can be used as arguments in remote fields that belong to this remoteSource
    """
    remoteTypeDefinitions: [CreateRemoteTypeDefinitionInput!]
    url: String!
}

input CreateLocaleInput {
    apiId: String!
    description: String
    displayName: String!
    environmentId: ID!
}

input CreateMemberFieldInput {
    apiId: String
    description: String
    displayName: String
    extensions: JSON
    formConfig: FieldConfigInput
    isHidden: Boolean = false
    meta: JSON
    """
    ID of member model to add
    """
    modelId: ID!
    tableConfig: FieldConfigInput
    visibility: VisibilityTypes = READ_WRITE
}

input CreateModelInput {
    apiId: String!
    apiIdPlural: String!
    description: String
    displayName: String!
    environmentId: ID!
    isSystem: Boolean
}

input CreateNetlifyIntegrationInput {
    """
    This token is used to create the needed BuildHook and BuildNotifications in Netlify.
    This token is only used once and won't be stored anywhere
    """
    accessToken: String!
    description: String
    displayName: String
    environmentId: ID!
    """
    A selection of models where the integration should be displayed in the frontend.
    If the integration should be displayed on every model, pass null or an empty array here.
    """
    models: [ID!]
    sites: [NetlifySiteInput!]!
}

type CreateNetlifyIntegrationPayload {
    createdNetlifyIntegration: NetlifyIntegration!
}

input CreatePermanentAuthTokenInput {
    defaults: PermanentAuthTokenDefaultsInput
    description: String
    environmentId: ID!
    managementPermissionIds: [ID!]
    name: String!
}

type CreatePermanentAuthTokenPayload {
    createdPermanentAuthToken: PermanentAuthToken!
}

"""
create project from a template
"""
input CreateProjectTemplateInput {
    """
    Set to false to not include content
    """
    content: Boolean! = true
    """
    id of template (if it's marked as template) or id of a project you are an owner of
    """
    templateId: ID!
    """
    Set to true to include webhooks. If webhooks are included, they will be disabled initially in the created project.
    """
    webhooks: Boolean! = false
}

input CreatePublishContentPermissionInput {
    enabled: Boolean = true
    fromStages: [ID!]
    locales: [ID!]
    model: CreatePublishContentPermissionModelInput
    target: CreateContentPermissionTargetInput!
    toStages: [ID!]
}

input CreatePublishContentPermissionModelInput {
    condition: String
    id: ID!
}

type CreatePublishContentPermissionPayload {
    permission: PublishContentPermission!
}

input CreateRESTRemoteSourceInput {
    debugEnabled: Boolean
    description: String
    displayName: String!
    environmentId: ID!
    headers: JSON
    kind: RemoteSourceKind!
    """
    Oauth input that can be used to get access token for the remote source
    """
    oAuth: RemoteSourceOAuthInput
    """
    Unique prefix that will be prepended to all of the remote types. This value cannot be changed!
    """
    prefix: String!
    """
    Remote type definitions that the remote source supports or input types that can be used by any remote field of this remote source
    """
    remoteTypeDefinitions: [CreateRemoteTypeDefinitionInput!]
    url: String!
}

input CreateReadContentPermissionInput {
    enabled: Boolean = true
    locales: [ID!]
    model: CreateReadContentPermissionModelInput
    stages: [ID!]
    target: CreateContentPermissionTargetInput!
}

input CreateReadContentPermissionModelInput {
    condition: String
    id: ID!
}

type CreateReadContentPermissionPayload {
    permission: ReadContentPermission!
}

input CreateReadVersionContentPermissionInput {
    enabled: Boolean = true
    modelId: ID
    target: CreateContentPermissionTargetInput!
}

type CreateReadVersionContentPermissionPayload {
    permission: ReadVersionContentPermission!
}

input CreateRelationalFieldInput {
    apiId: String!
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfigInput
    isHidden: Boolean = false
    isList: Boolean!
    """
    Marks the field as required.
    Note: This is only supported for RelationFieldType ASSET!
    """
    isRequired: Boolean
    isSystem: Boolean
    meta: JSON
    modelId: ID
    """
    This can be a model or component id, modelId must be empty when parentId is used
    either modelId or parentId needs to be set and is required via validation, it will be made required.
    """
    parentId: ID
    position: Int
    relationApiId: String
    reverseSide: CreateReverseRelationSide!
    tableConfig: FieldConfigInput
    type: RelationalFieldType!
    visibility: VisibilityTypes = READ_WRITE
    visibilityCondition: FieldConditionInput
}

input CreateRemoteFieldInput {
    apiId: String!
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfigInput
    inputArgs: [CreateFieldInputArgInput!]
    isHidden: Boolean
    isList: Boolean!
    isRequired: Boolean!
    isSystem: Boolean
    meta: JSON
    modelId: ID
    """
    This can be a model or component id, modelId must be empty when parentId is used
    either modelId or parentId needs to be set and is required via validation, it will be made required.
    """
    parentId: ID
    position: Int
    remoteConfig: RemoteFieldConfigInput!
    tableConfig: FieldConfigInput
    type: RemoteFieldType!
    visibility: VisibilityTypes
}

input CreateRemoteTypeDefinitionInput {
    sdl: String!
}

input CreateReverseField {
    apiId: String!
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfigInput
    isHidden: Boolean
    isList: Boolean!
    meta: JSON
    tableConfig: FieldConfigInput
    visibility: VisibilityTypes
}

input CreateReverseRelationSide {
    field: CreateReverseField
    modelId: ID!
}

input CreateRoleInput {
    description: String
    managementPermissionIds: [ID!]
    name: String!
    projectId: ID!
}

type CreateSidebarElementPayload {
    createdSidebarElement: ISidebarElement
}

input CreateSidebarExtensionInput {
    apiId: String!
    config: JSON!
    description: String
    environmentId: ID!
    isActive: Boolean!
    meta: JSON
    name: String
    neededPermissions: [ID!]
    src: String!
    srcTypeId: ID!
}

type CreateSidebarExtensionPayload {
    createdExtension: SidebarExtension!
}

input CreateSimpleFieldInput {
    apiId: String!
    description: String
    displayName: String!
    embeddableModels: [ID!]
    embedsEnabled: Boolean
    extensions: JSON
    formConfig: FieldConfigInput
    initialValue: String
    isHidden: Boolean
    isList: Boolean!
    isLocalized: Boolean!
    isRequired: Boolean!
    isSystem: Boolean
    isTitle: Boolean
    isUnique: Boolean!
    meta: JSON
    migrationValue: String
    modelId: ID
    """
    This can be a model or component id, modelId must be empty when parentId is used
    either modelId or parentId needs to be set and is required via validation, it will be made required.
    """
    parentId: ID
    position: Int
    tableConfig: FieldConfigInput
    type: SimpleFieldType!
    validations: SimpleFieldValidationsInput
    visibility: VisibilityTypes
    visibilityCondition: FieldConditionInput
}

input CreateStageInput {
    """
    Identifier to be used in
    Content API Schema
    """
    apiId: String!
    """
    Color that will be used in the webapp
    """
    colorPaletteId: ColorPalette!
    description: String
    displayName: String!
    environmentId: ID!
    position: Int
}

input CreateSystemSidebarElementInput {
    config: JSON
    modelId: ID!
    type: SystemSidebarElementType!
}

input CreateUnionFieldInput {
    apiId: String!
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfigInput
    isHidden: Boolean = false
    isList: Boolean!
    isSystem: Boolean
    meta: JSON
    modelId: ID
    """
    This can be a model or component id, modelId must be empty when parentId is used
    either modelId or parentId needs to be set and is required via validation, it will be made required.
    """
    parentId: ID
    position: Int
    reverseSide: CreateReverseField
    tableConfig: FieldConfigInput
    type: UnionFieldType!
    union: CreateUnionInput!
    visibility: VisibilityTypes = READ_WRITE
    visibilityCondition: FieldConditionInput
}

input CreateUnionInput {
    apiId: String!
    description: String
    displayName: String!
    """
    IDs of models to add to union
    """
    modelIds: [ID!]!
}

input CreateUnpublishContentPermissionInput {
    enabled: Boolean = true
    locales: [ID!]
    model: CreateUnpublishContentPermissionModelInput
    stages: [ID!]
    target: CreateContentPermissionTargetInput!
}

input CreateUnpublishContentPermissionModelInput {
    condition: String
    id: ID!
}

type CreateUnpublishContentPermissionPayload {
    permission: UnpublishContentPermission!
}

input CreateUpdateContentPermissionInput {
    enabled: Boolean = true
    locales: [ID!]
    model: CreateUpdateContentPermissionModelInput
    target: CreateContentPermissionTargetInput!
}

input CreateUpdateContentPermissionModelInput {
    condition: String
    id: ID!
}

type CreateUpdateContentPermissionPayload {
    permission: UpdateContentPermission!
}

input CreateUserInput {
    gcms: String
}

type CreateUserPayload {
    gcms: String
}

input CreateViewGroupInput {
    description: String
    environmentId: ID!
    name: String!
    type: ViewGroupContentType
}

type CreateViewGroupPayload {
    createdViewGroup: ViewGroup!
}

input CreateWebhookInput {
    description: String
    environmentId: ID!
    headers: JSON
    includePayload: Boolean!
    isActive: Boolean!
    isSystem: Boolean
    method: WebhookMethod = POST
    """
    Pass an empty array for all existing models.
    This will also setup the webhook for models
    created in the future
    """
    models: [ID!]!
    name: String!
    secretKey: String
    """
    Pass an empty array for all existing stages.
    This will also setup the webhook for stages
    created in the future
    """
    stages: [ID!]!
    triggerActions: [WebhookTriggerAction!]!
    triggerSources: [WebhookTriggerSource!]
    triggerType: WebhookTriggerType!
    url: String!
}

type CreateWebhookPayload {
    createdWebhook: Webhook!
}

input CreateWorkflowInput {
    description: String
    enabled: Boolean!
    environmentId: ID!
    models: [ID!]
    name: String!
    """
    List of role IDs that can override the workflow
    """
    roleOverrides: [ID!]
}

type CreateWorkflowPayload {
    createdWorkflow: Workflow!
}

input CreateWorkflowStepInput {
    allowEdit: Boolean!
    allowedRoles: [ID!]
    color: ColorPalette!
    description: String
    name: String!
    publishStage: ID
    returnToStep: ID
    workflowId: ID!
}

type CreateWorkflowStepPayload {
    createdWorkflowStep: WorkflowStep!
}

union CreatedBy = AppToken | Member | PermanentAuthToken

type CustomSidebarElement implements ISidebarElement {
    config: JSON
    createdAt: DateTime!
    description: String
    displayName: String!
    extension: SidebarExtension!
    id: ID!
    isEnabled: Boolean!
    model: IModel!
    position: Int!
    updatedAt: DateTime!
}

scalar DateTime

input DeleteAppInstallationInput {
    appInstallationId: ID!
}

type DeleteAppInstallationPayload {
    deletedAppInstallationId: ID!
}

input DeleteComponentInput {
    id: ID!
}

type DeleteContentPermission implements IContentPermission {
    condition: String
    createdAt: DateTime!
    enabled: Boolean!
    id: ID!
    locales: [Locale!]
    model: IModel
    target: ContentPermissionTarget!
    updatedAt: DateTime!
}

input DeleteContentPermissionInput {
    permissionId: ID!
}

type DeleteContentPermissionPayload {
    deletedPermissionId: ID!
}

input DeleteContentViewInput {
    id: ID!
}

type DeleteContentViewPayload {
    deletedContentViewId: ID!
}

input DeleteEnumerationInput {
    id: ID!
}

input DeleteEnvironmentInput {
    id: ID!
}

type DeleteEnvironmentPayload {
    deletedEnvironmentId: ID!
}

input DeleteExtensionInput {
    extensionId: ID!
}

type DeleteExtensionPayload {
    deletedExtensionId: ID!
}

input DeleteFieldInput {
    id: ID!
}

input DeleteGatsbyCloudIntegrationInput {
    id: ID!
}

type DeleteGatsbyCloudIntegrationPayload {
    deletedGatsbyCloudIntegrationId: ID!
}

input DeleteLocaleInput {
    """
    Delete all localizations for this locale.
    This will prevent an exception from
    being raised if documents were previously
    localized in this locale
    """
    force: Boolean
    """
    ID of Locale to delete
    """
    id: ID!
}

input DeleteModelInput {
    id: ID!
}

input DeleteNetlifyIntegrationInput {
    """
    This token is used to cleanup the resources in Netlify that where used by this integration .
    This token is only used once and won't be stored anywhere
    """
    accessToken: String!
    id: ID!
}

type DeleteNetlifyIntegrationPayload {
    deletedNetlifyIntegrationId: ID!
}

input DeletePermanentAuthTokenInput {
    id: ID!
}

type DeletePermanentAuthTokenPayload {
    deletedPermanentAuthTokenId: ID!
}

input DeleteProjectInput {
    id: ID!
}

type DeleteProjectPayload {
    deletedProjectId: ID!
}

input DeleteRemoteSourceInput {
    id: ID!
}

input DeleteRoleInput {
    id: ID!
}

type DeleteRolePayload {
    deletedId: ID!
}

input DeleteSidebarElementInput {
    sidebarElementId: ID!
}

type DeleteSidebarElementPayload {
    deletedSidebarElementId: ID!
}

input DeleteStageInput {
    """
    Delete all documents in stage.
    This will prevent an exception from
    being raised if documents were previously
    published to this stage
    """
    force: Boolean
    """
    ID of Stage to delete
    """
    id: ID!
}

input DeleteViewGroupInput {
    id: ID!
}

type DeleteViewGroupPayload {
    deletedViewGroupId: ID!
}

input DeleteWebhookInput {
    webhookId: ID!
}

type DeleteWebhookPayload {
    deletedWebhookId: ID!
}

input DeleteWorkflowInput {
    id: ID!
}

type DeleteWorkflowPayload {
    deletedWorkflowId: ID!
}

input DeleteWorkflowStepInput {
    id: ID!
}

type DeleteWorkflowStepPayload {
    deletedWorkflowStepId: ID!
}

type DiffEnvironmentPayload {
    changes: [JSON!]!
}

input DuplicateComponentInput {
    apiId: String!
    apiIdPlural: String!
    componentId: ID!
    description: String
    displayName: String!
}

input DuplicateModelInput {
    apiId: String!
    apiIdPlural: String!
    description: String
    displayName: String!
    modelId: ID!
}

input EmbeddableModelsInput {
    modelsToAdd: [ID!]
    modelsToRemove: [ID!]
}

type EnumerableField implements IField & ILocalizableField & IRequireableField & ITitleableField & IUniqueableField & IVisibilityConditionalField {
    apiId: String!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    enumeration: Enumeration!
    extensions: JSON
    formConfig: FieldConfig!
    id: ID!
    initialValue: EnumerationValue
    """
    This is available if isList is true
    """
    initialValueList: [EnumerationValue!]
    isHidden: Boolean! @deprecated(reason: "Use visibility instead")
    isList: Boolean!
    isLocalized: Boolean!
    isRequired: Boolean!
    isSystem: Boolean!
    isTitle: Boolean!
    isUnique: Boolean!
    meta: JSON
    """
    This will throw a runtime error for fields that are on a component instead of model!
    """
    model: IModel! @deprecated(reason: "Use parent instead")
    parent: IFieldParent!
    position: Int!
    tableConfig: FieldConfig!
    type: EnumerableFieldType!
    updatedAt: DateTime!
    visibility: VisibilityTypes!
    visibilityCondition: IFieldCondition
}

type EnumerableFieldCondition implements IFieldCondition {
    """
    Field used to set the condition
    """
    baseField: EnumerableField!
    createdAt: DateTime!
    id: ID!
    operator: FieldConditionOperator!
    updatedAt: DateTime!
    value: [EnumerationValue!]!
}

enum EnumerableFieldType {
    ENUMERATION
}

type Enumeration implements IRecentSchemaChange {
    apiId: String!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    enumerableFields: [EnumerableField!]!
    environment: Environment!
    id: ID!
    isSystem: Boolean!
    updatedAt: DateTime!
    values: [EnumerationValue!]!
}

type EnumerationValue {
    apiId: String!
    displayName: String!
    id: ID!
}

input EnumerationValueCreateInput {
    apiId: String!
    displayName: String!
}

input EnumerationValueUpdateInput {
    """
    Update enumeration value API identifier
    """
    apiId: String
    displayName: String
    id: ID!
}

type Environment {
    appInstallation(appApiId: String!): AppInstallation!
    appInstallations(status: AppInstallationStatus): [AppInstallation!]!
    assetConfig: IAssetConfig!
    assetMigration: AssetMigration
    assetSystemEnabled: Boolean
    authToken: String!
    color: ColorPalette
    commentingConfig: CommentingConfig
    contentModel: ContentModel!
    contentView(id: ID!): ContentView!
    contentViews(filter: ContentViewFilterInput, includeSystemModels: Boolean = false): [ContentView!]!
    createdAt: DateTime!
    deliveryUrl: String
    description: String
    diff(environmentName: String!): DiffEnvironmentPayload!
    displayName: String!
    endpoint: String!
    extension(id: ID!): IExtension!
    extensions: [IExtension!]!
    id: ID!
    integration(id: ID!): IIntegration!
    integrations: [IIntegration!]!
    isCloning: Boolean
    metrics: Metrics!
    migration(id: ID, name: String): Migration!
    migrations: [Migration!]!
    name: String!
    newDeliveryUrl: String!
    permanentAuthTokens: [PermanentAuthToken!]!
    publicContentAPI: PublicContentAPI!
    quotas: EnvironmentLevelQuota!
    recentSchemaChanges(limit: Int! = 5): [IRecentSchemaChange!]!
    remoteSource(prefix: String!): IRemoteSource!
    remoteSources: [IRemoteSource!]!
    revisionCount: Int! @deprecated(reason: "Revisions are no longer maintained")
    runningMigration: Migration
    updatedAt: DateTime!
    viewGroups: [ViewGroup!]!
    webhook(id: ID!): Webhook!
    webhooks: [Webhook!]!
    workflow(id: ID!): Workflow!
    workflows: [Workflow!]!
}

type EnvironmentBackup {
    backupEnvironment: Environment
    createdAt: DateTime!
    expiresAt: DateTime
    id: ID!
    originEnvironment: Environment
    restoredAt: DateTime
    updatedAt: DateTime!
}

type EnvironmentBackupConfig {
    backupTtlInSec: Int
    createdAt: DateTime!
    cronSchedule: String
    environment: Environment!
    id: ID!
    updatedAt: DateTime!
}

type EnvironmentCreatedPayload {
    environment: Environment!
}

type EnvironmentLevelQuota {
    components: Progress!
    contentPermissions: Progress!
    locales: Progress!
    models: Progress!
    remoteSources: Progress!
    stages: Progress!
    webhooks: Progress!
}

type EnvironmentPermissions {
    """
    True if mutations on this stage are allowed
    """
    allowMutations: Boolean!
}

"""
Permissions of an environment
"""
input EnvironmentPermissionsInput {
    """
    True if mutations on this environment are allowed
    """
    allowMutations: Boolean!
}

type EnvironmentPromotedPayload {
    previousMasterEnvironment: Environment!
    promotedEnvironment: Environment!
    promotedEnvironmentPreviousDisplayName: String!
}

enum ExtensionFieldType {
    ASSET
    BOOLEAN
    COLOR
    DATE
    DATETIME
    ENUMERATION
    FLOAT
    GRAPHQL
    ID
    INT
    JSON
    LOCATION
    RELATION
    REST
    RICHTEXT
    STRING
    UNION
}

type ExtensionSidebarElement implements ISidebarElement {
    config: JSON
    createdAt: DateTime!
    description: String
    displayName: String!
    extension: SidebarExtension!
    id: ID!
    isEnabled: Boolean!
    model: IModel!
    position: Int!
    updatedAt: DateTime!
}

type ExtensionSrcType {
    createdAt: DateTime!
    description: String
    id: ID!
    name: String!
    type: AvailableExtensionSrcType!
    updatedAt: DateTime!
}

type Feedback {
    """
    Allow contacting the user
    """
    allowContact: Boolean
    createdAt: DateTime!
    """
    Name of the feature
    """
    featureName: String
    id: ID!
    """
    Feedback Message
    """
    message: String
    """
    Rating of the feature
    """
    rating: Int
    """
    Reason for deleting project
    """
    reasons: [String!]
    """
    Type of feedback
    """
    type: FeedbackType!
}

"""
Type of feedback
"""
enum FeedbackType {
    """
    Used when deleting an account
    """
    DELETE_ACCOUNT
    """
    Used when deleting a project
    """
    DELETE_PROJECT
    """
    Used when downgrading a plan on a project
    """
    DOWNGRADE_PLAN
    """
    Used when sending a feedback from a new feature on the webapp
    """
    FEATURE_FEEDBACK
    """
    Used when sending a feedback from the feedback form on the webapp
    """
    GENERAL_FEEDBACK
    """
    Used when leaving a project
    """
    LEAVE_PROJECT
}

type FieldAppElement implements IAppElement {
    apiId: String!
    app: App!
    config: JSON
    createdAt: DateTime!
    description: String
    features: [FieldAppElementFeature!]!
    fieldType: AppElementFieldType!
    id: ID!
    name: String!
    src: String!
    type: AppElementType!
    updatedAt: DateTime!
}

enum FieldAppElementFeature {
    FieldRenderer
    ListRenderer
    TableRenderer
}

input FieldConditionInput {
    """
    API ID of the field used to set the condition, dependent field
    """
    baseField: ID!
    booleanValue: Boolean
    enumerationValues: [ID!]
    operator: FieldConditionOperator!
}

enum FieldConditionOperator {
    CONTAINS_ALL
    CONTAINS_ANY
    CONTAINS_NONE
    IS
    IS_NOT
}

type FieldConfig {
    appElement: FieldAppElement
    appInstallation: AppInstallation
    config: JSON!
    extension: FieldExtension
    id: String!
    renderer: String!
}

input FieldConfigInput {
    appElementId: ID
    appInstallationId: ID
    config: JSON!
    extensionId: ID
    renderer: String!
}

input FieldConfigUpdateInput {
    config: JSON
    extensionId: ID
    renderer: String
}

type FieldEdge {
    node: IField!
}

type FieldExtension implements IExtension {
    apiId: String!
    config: JSON!
    createdAt: DateTime!
    createdBy: Member
    description: String
    environment: Environment!
    fieldType: ExtensionFieldType!
    fields: [IField!]!
    hasFormRenderer: Boolean!
    hasListRenderer: Boolean!
    hasTableRenderer: Boolean!
    id: ID!
    isActive: Boolean!
    meta: JSON
    name: String
    neededPermissions: [AvailableExtensionPermission!]!
    """
    Location for the source if the source type is an external one
    """
    src: String!
    """
    The type indicating where the source for the extension will be obtained from
    """
    srcType: ExtensionSrcType!
    updatedAt: DateTime!
    updatedBy: Member
}

type FieldInputArg {
    apiId: String!
    id: ID!
    isList: Boolean!
    isRequired: Boolean!
    remoteType: RemoteTypeDefinition!
}

type FieldValidationFloatRange {
    errorMessage: String
    max: Float
    min: Float
}

input FieldValidationFloatRangeInput {
    errorMessage: String
    max: Float
    min: Float
}

type FieldValidationIntRange {
    errorMessage: String
    max: Int
    min: Int
}

input FieldValidationIntRangeInput {
    errorMessage: String
    max: Int
    min: Int
}

type FieldValidationRange {
    errorMessage: String
    max: Int
    min: Int
}

type FieldValidationRegEx {
    errorMessage: String
    flags: [String!]
    regex: String
}

input FieldValidationRegExInput {
    errorMessage: String
    flags: [String!]
    regex: String
}

type FieldsAggregate {
    count: Int!
}

type FieldsConnection {
    aggregate: FieldsAggregate!
    edges: [FieldEdge!]!
    pageInfo: PageInfo!
}

type Filestack implements IAssetConfig {
    apiKey: String!
    bucket: String!
    isManagedBucket: Boolean!
    path: String!
    security: FilestackSecurityOptions!
}

type FilestackSecurityAuthOptions {
    policy: String!
    signature: String!
}

type FilestackSecurityOptions {
    auth: FilestackSecurityAuthOptions
    enabled: Boolean!
    globalExpires: String!
    stageOverrides: [StageFilestackSecurityOptions!]!
}

type FloatFieldValidations {
    listItemCount: FieldValidationRange
    range: FieldValidationFloatRange
}

input FloatFieldValidationsInput {
    listItemCount: FieldValidationIntRangeInput
    range: FieldValidationFloatRangeInput
}

type FormSidebarAppElement implements IAppElement {
    apiId: String!
    app: App!
    config: JSON
    createdAt: DateTime!
    description: String
    id: ID!
    name: String!
    src: String!
    type: AppElementType!
    updatedAt: DateTime!
}

type GatsbyCloudIntegration implements IIntegration {
    """
    URL to trigger a Deploy Build. This webhook will be triggered when publishing and unpublishing entries.
    """
    buildWebhookURL: String!
    createdAt: DateTime!
    """
    Integration description on GCMS
    """
    description: String
    """
    Integration display name on GCMS
    """
    displayName: String
    """
    Integration ID
    """
    id: ID!
    """
    URL to the preview of your site
    """
    previewURL: String!
    """
    URL to trigger a CMS Preview build
    """
    previewWebhookURL: String!
    """
    URL to the production deployment of your site
    """
    productionURL: String!
    """
    Prefix of your site
    """
    sitePrefix: String!
    """
    URL to your site
    """
    siteURL: String!
    updatedAt: DateTime!
}

type GraphQLRemoteFieldConfig implements IRemoteFieldConfig {
    cacheTTLSeconds: Int
    forwardClientHeaders: Boolean!
    headers: JSON
    method: RemoteFieldApiMethod!
    operationName: String
    """
    In case of apiType GraphQL graphqlQuery contains the GraphQL query that will be sent to the remote source
    """
    query: String
    remoteSource: GraphQLRemoteSource!
    returnType: RemoteTypeDefinition!
}

type GraphQLRemoteSource implements IRecentSchemaChange & IRemoteSource {
    createdAt: DateTime!
    debugEnabled: Boolean!
    description: String
    displayName: String!
    headers: JSON
    id: ID!
    """
    HTTP Headers that will be used when sending the introspection only
    """
    introspectionHeaders: JSON
    """
    HTTP method that will be used for introspection
    """
    introspectionMethod: GraphQLRemoteSourceIntrospectionMethod!
    """
    Specific URL that will be used for introspection if the introspection is available on another url than the regular url.
    Can be ignored if the introspection url is the same as the url of the remote source.
    """
    introspectionUrl: String
    kind: RemoteSourceKind
    oAuth: JSON
    prefix: String!
    remoteTypeDefinitionsConnection(
        first: Int! = 25
        isUserDefined: Boolean
        remoteGraphQLTypes: [REMOTE_GRAPHQL_TYPE!]
        skip: Int! = 0
    ): RemoteTypeDefinitionsConnection!
    schema: String!
    type: RemoteSourceType!
    updatedAt: DateTime!
    url: String!
}

enum GraphQLRemoteSourceIntrospectionMethod {
    GET
    POST
}

interface IApp {
    apiId: String!
    author: ID!
    avatarUrl: String!
    configurationUrl: String
    createdAt: DateTime!
    description: String!
    elements: [IAppElement!]
    id: ID!
    name: String!
    permissions: AppPermissions!
    publicationStatus: AppPublicationStatus!
    setupUrl: String!
    updatedAt: DateTime!
    webhookUrl: String
}

interface IAppElement {
    apiId: String!
    app: App!
    config: JSON
    createdAt: DateTime!
    description: String
    id: ID!
    name: String!
    src: String!
    type: AppElementType!
    updatedAt: DateTime!
}

interface IAssetConfig {
    apiKey: String!
}

interface IContentPermission {
    createdAt: DateTime!
    enabled: Boolean!
    id: ID!
    model: IModel
    target: ContentPermissionTarget!
    updatedAt: DateTime!
}

interface IContentViewColumn {
    id: ID!
    isVisible: Boolean!
    position: Int!
    type: ContentViewColumnType!
    width: Int
}

interface IExtension {
    apiId: String!
    config: JSON!
    createdAt: DateTime!
    createdBy: Member
    description: String
    environment: Environment!
    id: ID!
    isActive: Boolean!
    meta: JSON
    name: String
    neededPermissions: [AvailableExtensionPermission!]!
    """
    Location for the source if the source type is an external one
    """
    src: String!
    """
    The type indicating where the source for the extension will be obtained from
    """
    srcType: ExtensionSrcType!
    updatedAt: DateTime!
    updatedBy: Member
}

interface IField {
    apiId: String!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfig!
    id: ID!
    isHidden: Boolean! @deprecated(reason: "Use visibility instead")
    isList: Boolean!
    isSystem: Boolean!
    meta: JSON
    """
    This will throw a runtime error for fields that are on a component instead of model!
    """
    model: IModel! @deprecated(reason: "Use parent instead")
    parent: IFieldParent!
    position: Int!
    tableConfig: FieldConfig!
    updatedAt: DateTime!
    visibility: VisibilityTypes!
}

interface IFieldCondition {
    """
    Field used to set the condition
    """
    baseField: IField!
    createdAt: DateTime!
    id: ID!
    updatedAt: DateTime!
}

interface IFieldParent {
    apiId: String!
    displayName: String!
    id: ID!
}

interface IIntegration {
    createdAt: DateTime!
    description: String
    displayName: String
    id: ID!
    updatedAt: DateTime!
}

interface ILocalizableField {
    isLocalized: Boolean!
}

interface IModel {
    apiId: String!
    apiIdPlural: String!
    contentViews(filter: ContentViewFilterInput, includeSystemContentViews: Boolean = false): [ContentView!]!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    environment: Environment!
    field(id: ID!): IField!
    fields(includeApiOnlyFields: Boolean = false, includeHiddenFields: Boolean = false): [IField!]!
    fieldsConnection(
        first: Int! = 25
        includeApiOnlyFields: Boolean = false
        includeHiddenFields: Boolean = false
        includeSystemFields: Boolean = true
        skip: Int! = 0
    ): FieldsConnection!
    """
    Model has at least one document
    """
    hasContent: Boolean!
    hasLocalizedComponents: Boolean!
    id: ID!
    isLocalized: Boolean!
    isSystem: Boolean!
    isVersioned: Boolean!
    sidebarElements: [ISidebarElement!]!
    titleFields: [IField!]!
    updatedAt: DateTime!
    viewerPermission: ModelViewerPermission!
}

enum INTEGRATION_PROVIDER {
    GATSBY_CLOUD
    NETLIFY
}

interface IPendingProject {
    description: String
    id: ID!
    name: String!
    picture: String
}

interface IRecentSchemaChange {
    createdAt: DateTime!
    description: String
    displayName: String!
    id: ID!
    updatedAt: DateTime!
}

interface IRemoteFieldConfig {
    cacheTTLSeconds: Int
    forwardClientHeaders: Boolean!
    """
    Headers that will be sent to the remote source. Those headers will override the headers defined on the remote source if setup
    """
    headers: JSON
    method: RemoteFieldApiMethod!
    remoteSource: IRemoteSource!
    returnType: RemoteTypeDefinition!
}

interface IRemoteSource implements IRecentSchemaChange {
    createdAt: DateTime!
    debugEnabled: Boolean!
    description: String
    displayName: String!
    """
    Optional headers that will be sent to the remote source on every remote field. In case the remote field is using the same
    Header Keys, the values will be overridden
    """
    headers: JSON
    id: ID!
    kind: RemoteSourceKind
    oAuth: JSON
    prefix: String!
    remoteTypeDefinitionsConnection(
        first: Int! = 25
        isUserDefined: Boolean
        remoteGraphQLTypes: [REMOTE_GRAPHQL_TYPE!]
        skip: Int! = 0
    ): RemoteTypeDefinitionsConnection!
    type: RemoteSourceType!
    updatedAt: DateTime!
    url: String!
}

interface IRequireableField {
    isRequired: Boolean!
}

interface ISchemaMigrationPayload {
    migration: Migration!
}

interface ISidebarElement {
    config: JSON
    createdAt: DateTime!
    description: String
    displayName: String!
    id: ID!
    isEnabled: Boolean!
    model: IModel!
    position: Int!
    updatedAt: DateTime!
}

interface ITemplate {
    coverPicture: String
    description: String
    details: String
    id: ID!
    name: String!
    picture: String
    resources: [TemplateResource!]!
}

interface ITitleableField {
    isTitle: Boolean!
}

interface IUnionField {
    """
    True if this field is the reverse side of the initally created union field
    """
    isMemberType: Boolean!
    union: Union!
}

interface IUniqueableField {
    isUnique: Boolean!
}

interface IUser {
    createdAt: DateTime!
    id: ID!
    preferences: JSON
    profile: Profile!
    updatedAt: DateTime!
}

interface IViewer {
    availableExtensionPermissions: [AvailableExtensionPermission!]!
    availableExtensionSrcTypes: [ExtensionSrcType!]!
    availableIntegrations: [INTEGRATION_PROVIDER!]!
    id: ID!
    plans: [Plan!]!
    project(id: ID): Project
    regions: [Region!]!
    templates: [ITemplate!]!
}

interface IVisibilityConditionalField {
    visibilityCondition: IFieldCondition
}

type IntFieldValidations {
    listItemCount: FieldValidationRange
    range: FieldValidationRange
}

input IntFieldValidationsInput {
    listItemCount: FieldValidationIntRangeInput
    range: FieldValidationIntRangeInput
}

type Invite {
    acceptedAt: DateTime
    code: String!
    createdAt: DateTime!
    email: String!
    expirationDate: DateTime!
    id: ID!
    issuer: Member
    origin: String
    project: Project!
    roles: [Role!]!
}

"""
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

input LeaveProjectInput {
    id: ID!
}

type LeaveProjectPayload {
    leftProjectId: ID!
}

input LeaveTrialInput {
    projectId: ID!
}

type LeaveTrialPayload {
    project: Project!
}

type LegacyProject {
    description: String
    id: ID!
    isMigrated: Boolean!
    isOwner: Boolean!
    name: String!
    picture: String
    url: String!
}

type Lifecycle {
    progress: Float!
    steps: [LifecycleStep!]
}

type LifecycleStep {
    description: String
    done: Boolean!
    name: String!
    type: LifecycleStepType!
}

enum LifecycleStepType {
    API_PERMISSIONS_SET
    CONTENT_ADDED
    EXPLORE_CONTENT_API
    EXTERNAL_TRAFFIC
    SCHEMA_SETUP
}

type Limit {
    addOnCode: String
    amount: Float
    createdAt: DateTime!
    id: ID!
    name: String!
    plan: Plan!
    type: LimitType!
    updatedAt: DateTime!
}

enum LimitType {
    API_OPERATIONS
    ASSET_TRAFFIC
    ASSET_UPLOAD_FILE_SIZE_LIMIT
    AUDIT_LOGS_RETENTION_PERIOD
    CONTENT_MODELS
    CONTENT_PERMISSIONS
    CONTENT_STAGES
    ENVIRONMENTS
    ENVIRONMENTS_AUTOMATIC_BACKUPS
    INTEGRATIONS
    LOCALES
    MODELS
    PERMANENT_AUTH_TOKENS
    RATE_LIMIT_PER_SECOND
    RECORDS
    REGIONS
    REMOTE_FIELDS
    REMOTE_FIELDS_HTTP_WORKERS
    REMOTE_FIELDS_MAX_EXECUTION_TIME
    REMOTE_FIELDS_MAX_RESPONSE_SIZE
    REMOTE_SOURCES
    ROLES
    SCHEDULING_OPERATIONS_IN_RELEASE
    SCHEDULING_PENDING_OPERATIONS
    SCHEDULING_PENDING_RELEASES
    SEATS
    VERSIONS
    VERSION_RETENTION_PERIOD
    WEBHOOKS
    WORKFLOW_STEPS
}

type Locale {
    """
    Determines how the locale is
    exposed in the Content API
    """
    apiId: String!
    createdAt: DateTime!
    description: String
    displayName: String!
    id: ID!
    """
    Specifies if the locale is used as the
    default locale which impacts the Content API
    """
    isDefault: Boolean!
    updatedAt: DateTime!
}

type ManagementPermission {
    action: PermissionAction!
    createdAt: DateTime!
    description: String
    id: ID!
    updatedAt: DateTime!
}

input MaxComplexityInput {
    gcms: String
}

type MaxComplexityPayload {
    gcms: String
}

type Member implements IUser {
    createdAt: DateTime!
    hasPermissions(actions: [PermissionAction!]!): MemberHasPermissionsPayload!
    id: ID!
    isOwner: Boolean!
    preferences: JSON
    profile: Profile!
    roles: [Role!]!
    updatedAt: DateTime!
    userSelection: UserSelection!
}

type MemberEdge {
    node: Member!
}

type MemberHasPermissionsPayload {
    notAllowedActions: [PermissionAction!]!
}

type MemberWithRoles {
    gcms: String
}

type MembersAggregate {
    count: Int!
}

type MembersConnection {
    aggregate: MembersAggregate!
    edges: [MemberEdge!]!
    pageInfo: PageInfo!
}

type MetaInfo {
    serverVersion: String!
}

type Metrics {
    apiOperations(end: DateTime!, resolution: Int!, start: DateTime!): [Stats!]!
    assetTraffic(end: DateTime!, start: DateTime!): [Stats!]!
    assetTransformations(end: DateTime!, start: DateTime!): [Stats!]!
}

type Migration {
    createdAt: DateTime!
    errors: String
    finishedAt: DateTime
    id: ID!
    """
    Name of the migration in case if was triggered via a named batch migration
    """
    name: String
    operationType: MigrationOperationType! @deprecated(reason: "No longer supported")
    resourceId: ID @deprecated(reason: "No longer supported")
    status: MigrationStatus!
    triggeredBy: Member @deprecated(reason: "This will be replaced by a union of Member | PermanentAuthToken")
}

enum MigrationOperationType {
    BATCH
    CREATE_ENUMERABLE_FIELD
    CREATE_ENUMERATION
    CREATE_ENVIRONMENT
    CREATE_LOCALE
    CREATE_MODEL
    CREATE_PROJECT_FROM_TEMPLATE
    CREATE_RELATIONAL_FIELD
    CREATE_REMOTE_FIELD
    CREATE_REMOTE_TYPE_DEFINITION
    CREATE_SIMPLE_FIELD
    CREATE_STAGE
    CREATE_UNION_FIELD
    DELETE_ENUMERATION
    DELETE_FIELD
    DELETE_LOCALE
    DELETE_MODEL
    DELETE_REMOTE_TYPE_DEFINITION
    DELETE_STAGE
    UPDATE_ENUMERABLE_FIELD
    UPDATE_ENUMERATION
    UPDATE_LOCALE
    UPDATE_MODEL
    UPDATE_RELATIONAL_FIELD
    UPDATE_REMOTE_TYPE_DEFINITION
    UPDATE_SIMPLE_FIELD
    UPDATE_STAGE
    UPDATE_UNION_FIELD
}

enum MigrationStatus {
    FAILED
    QUEUED
    RUNNING
    SUCCESS
    TIMEOUT
}

type Model implements IFieldParent & IModel & IRecentSchemaChange {
    apiId: String!
    apiIdPlural: String!
    contentViews(filter: ContentViewFilterInput, includeSystemContentViews: Boolean = false): [ContentView!]!
    createdAt: DateTime!
    createdBy: CreatedBy
    defaultContentView: ContentView!
    description: String
    displayName: String!
    environment: Environment!
    field(id: ID!): IField!
    fields(includeApiOnlyFields: Boolean = false, includeHiddenFields: Boolean = false): [IField!]!
    fieldsConnection(
        first: Int! = 25
        includeApiOnlyFields: Boolean = false
        includeHiddenFields: Boolean = false
        includeSystemFields: Boolean = true
        skip: Int! = 0
    ): FieldsConnection!
    """
    Model has at least one document
    """
    hasContent: Boolean!
    hasLocalizedComponents: Boolean!
    id: ID!
    """
    Is true when at least one field is marked as localized
    """
    isLocalized: Boolean!
    isSystem: Boolean!
    isVersioned: Boolean!
    sidebarElements: [ISidebarElement!]!
    titleFields: [IField!]!
    updatedAt: DateTime!
    viewerPermission: ModelViewerPermission!
    workflow: Workflow
}

type ModelViewerContentPermission {
    """
    Lists all stages and the corresponding read permissions the user has on those stages.
    """
    readByStages: [ModelViewerReadContentPermissionByStage!]!
    readVersion: Boolean!
}

"""
Simplified computed version of the permissions the current viewer has on this model
"""
type ModelViewerPermission {
    content: ModelViewerContentPermission!
}

"""
This types holds a superset of the allowed read operations on a model.
This means even if this states access is allowed, it could still potentially be denied.
"""
type ModelViewerReadContentPermission {
    allowedLocales: [Locale!]!
    allowedWithCondition: Boolean!
}

type ModelViewerReadContentPermissionByStage {
    """
    If the current viewer is allowed to read this models content for the provided stage,
    this field will return the potential limitations that must be met.
    `null` means not allowed!
    """
    allowed: ModelViewerReadContentPermission
    stage: Stage!
}

input MoveContentViewInput {
    id: ID!
    position: Int!
    viewGroupId: ID!
}

type MoveContentViewPayload {
    movedContentView: ContentView!
    updatedViewGroups: [ViewGroup!]!
}

input MoveFieldInput {
    id: ID!
    position: Int!
}

type MoveFieldPayload {
    movedFields: [IField!]!
}

input MoveSidebarElementInput {
    id: ID!
    position: Int!
}

type MoveSidebarElementPayload {
    movedSidebarElements: [ISidebarElement!]!
}

input MoveViewGroupInput {
    id: ID!
    position: Int!
}

type MoveViewGroupPayload {
    movedViewGroups: [ViewGroup!]!
}

type Mutation {
    cloneProject(data: CloneProjectInput!): Project!
    createAppExchangeToken(data: CreateAppExchangeTokenInput!): CreateAppExchangeTokenPayload!
    createAppInstallation(data: CreateAppInstallationInput!): CreateAppInstallationPayload!
    createComponent(data: CreateComponentInput!): AsyncOperationPayload!
    createComponentField(data: CreateComponentFieldInput!): AsyncOperationPayload!
    createComponentUnionField(data: CreateComponentUnionFieldInput!): AsyncOperationPayload!
    createContentView(data: CreateContentViewInput!): CreateContentViewPayload!
    createCreateContentPermission(data: CreateCreateContentPermissionInput!): CreateCreateContentPermissionPayload!
    createCustomSidebarElement(data: CreateCustomSidebarElementInput!): CreateSidebarElementPayload!
    createDeleteContentPermission(data: CreateDeleteContentPermissionInput!): CreateDeleteContentPermissionPayload!
    createEnumerableField(data: CreateEnumerableFieldInput!): AsyncOperationPayload!
    createEnumeration(data: CreateEnumerationInput!): AsyncOperationPayload!
    createEnvironment(data: CreateEnvironmentInput!): CreateEnvironmentPayload!
    createFieldExtension(data: CreateFieldExtensionInput!): CreateFieldExtensionPayload!
    createGatsbyCloudIntegration(data: CreateGatsbyCloudIntegrationInput!): CreateGatsbyCloudIntegrationPayload
    createGraphQLRemoteSource(data: CreateGraphQLRemoteSourceInput!): AsyncOperationPayload!
    createLocale(data: CreateLocaleInput!): AsyncOperationPayload!
    createModel(data: CreateModelInput!): AsyncOperationPayload!
    createNetlifyIntegration(data: CreateNetlifyIntegrationInput!): CreateNetlifyIntegrationPayload
    createPermanentAuthToken(data: CreatePermanentAuthTokenInput!): CreatePermanentAuthTokenPayload!
    createPublishContentPermission(data: CreatePublishContentPermissionInput!): CreatePublishContentPermissionPayload!
    createRESTRemoteSource(data: CreateRESTRemoteSourceInput!): AsyncOperationPayload!
    createReadContentPermission(data: CreateReadContentPermissionInput!): CreateReadContentPermissionPayload!
    createReadVersionContentPermission(data: CreateReadVersionContentPermissionInput!): CreateReadVersionContentPermissionPayload!
    createRelationalField(data: CreateRelationalFieldInput!): AsyncOperationPayload!
    createRemoteField(data: CreateRemoteFieldInput!): AsyncOperationPayload!
    createRole(data: CreateRoleInput!): Role!
    createSidebarExtension(data: CreateSidebarExtensionInput!): CreateSidebarExtensionPayload!
    createSimpleField(data: CreateSimpleFieldInput!): AsyncOperationPayload!
    createStage(data: CreateStageInput!): AsyncOperationPayload!
    createSystemSidebarElement(data: CreateSystemSidebarElementInput!): CreateSidebarElementPayload!
    createUnionField(data: CreateUnionFieldInput!): AsyncOperationPayload!
    createUnpublishContentPermission(data: CreateUnpublishContentPermissionInput!): CreateUnpublishContentPermissionPayload!
    createUpdateContentPermission(data: CreateUpdateContentPermissionInput!): CreateUpdateContentPermissionPayload!
    createViewGroup(data: CreateViewGroupInput!): CreateViewGroupPayload!
    createWebhook(data: CreateWebhookInput!): CreateWebhookPayload!
    createWorkflow(data: CreateWorkflowInput!): CreateWorkflowPayload!
    createWorkflowStep(data: CreateWorkflowStepInput!): CreateWorkflowStepPayload!
    deleteAppInstallation(data: DeleteAppInstallationInput!): DeleteAppInstallationPayload!
    deleteComponent(data: DeleteComponentInput!): AsyncOperationPayload!
    deleteContentPermission(data: DeleteContentPermissionInput!): DeleteContentPermissionPayload!
    deleteContentView(data: DeleteContentViewInput!): DeleteContentViewPayload!
    deleteEnumeration(data: DeleteEnumerationInput!): AsyncOperationPayload!
    deleteEnvironment(data: DeleteEnvironmentInput!): DeleteEnvironmentPayload!
    deleteExtension(data: DeleteExtensionInput!): DeleteExtensionPayload!
    deleteField(data: DeleteFieldInput!): AsyncOperationPayload!
    deleteGatsbyCloudIntegration(data: DeleteGatsbyCloudIntegrationInput!): DeleteGatsbyCloudIntegrationPayload
    deleteLocale(data: DeleteLocaleInput!): AsyncOperationPayload!
    deleteModel(data: DeleteModelInput!): AsyncOperationPayload!
    deleteNetlifyIntegration(data: DeleteNetlifyIntegrationInput!): DeleteNetlifyIntegrationPayload
    deletePermanentAuthToken(data: DeletePermanentAuthTokenInput!): DeletePermanentAuthTokenPayload!
    deleteProject(data: DeleteProjectInput!): DeleteProjectPayload!
    deleteRemoteSource(data: DeleteRemoteSourceInput!): AsyncOperationPayload!
    deleteRole(data: DeleteRoleInput!): DeleteRolePayload!
    deleteSidebarElement(data: DeleteSidebarElementInput!): DeleteSidebarElementPayload!
    deleteStage(data: DeleteStageInput!): AsyncOperationPayload!
    deleteViewGroup(data: DeleteViewGroupInput!): DeleteViewGroupPayload!
    deleteWebhook(data: DeleteWebhookInput!): DeleteWebhookPayload!
    deleteWorkflow(data: DeleteWorkflowInput!): DeleteWorkflowPayload!
    deleteWorkflowStep(data: DeleteWorkflowStepInput!): DeleteWorkflowStepPayload!
    duplicateComponent(data: DuplicateComponentInput!): AsyncOperationPayload!
    duplicateModel(data: DuplicateModelInput!): AsyncOperationPayload!
    leaveProject(data: LeaveProjectInput!): LeaveProjectPayload!
    leaveTrial(data: LeaveTrialInput!): LeaveTrialPayload!
    markAssetMigrationAsViewed(data: UpgradeEnvironmentAssetInput!): UpgradeEnvironmentAssetPayload!
    moveContentView(data: MoveContentViewInput!): MoveContentViewPayload!
    moveField(data: MoveFieldInput!): MoveFieldPayload!
    moveSidebarElement(data: MoveSidebarElementInput!): MoveSidebarElementPayload!
    moveViewGroup(data: MoveViewGroupInput!): MoveViewGroupPayload!
    promoteEnvironment(data: PromoteEnvironmentInput!): PromoteEnvironmentPayload!
    refreshGraphQLRemoteSourceSchema(id: ID!): AsyncOperationPayload!
    removeMember(data: RemoveMemberInput!): RemoveMemberPayload!
    resetSidebarElements(data: ResetSidebarElementsInput!): ResetSidebarElementsPayload!
    restoreEnvironmentBackup(data: RestoreEnvironmentBackupInput!): RestoreEnvironmentBackupPayload!
    retriggerWebhook(data: RetriggerWebhookInput!): RetriggerWebhookPayload!
    revertPartialUpgradedEnvironmentAssets(data: UpgradeEnvironmentAssetInput!): UpgradeEnvironmentAssetPayload!
    revokeInvite(data: RevokeInviteInput!): RevokeInvitePayload!
    sendFeedback(data: SendFeedbackInput!): Feedback!
    sendInvite(data: SendInviteInput!): SendInvitePayload!
    setUserAnalytics(data: SetUserAnalyticsInput!): UserAnalytics!
    setUserPreferences(data: SetUserPreferencesInput!): UserPreferences!
    setUserSelection(data: SetUserSelectionInput!): UserSelection!
    startTrial(data: StartTrialInput!): StartTrialPayload!
    submitBatchChanges(data: BatchMigrationInput!): AsyncOperationPayload!
    switchPaymentSubscription(data: SwitchPaymentSubscriptionInput!): SwitchPaymentSubscriptionPayload!
    track(data: TrackInput!): TrackPayload!
    triggerNetlifyIntegrationBuild(data: TriggerNetlifyIntegrationBuildInput!): TriggerNetlifyIntegrationBuildPayload
    updateAppInstallation(data: UpdateAppInstallationInput!): UpdateAppInstallationPayload!
    updateComponent(data: UpdateComponentInput!): AsyncOperationPayload!
    updateComponentField(data: UpdateComponentFieldInput!): AsyncOperationPayload!
    updateComponentUnionField(data: UpdateComponentUnionFieldInput!): AsyncOperationPayload!
    updateContentPermissionEnabled(data: UpdateContentPermissionEnabledInput!): UpdateContentPermissionEnabledPayload!
    updateContentView(data: UpdateContentViewInput!): UpdateContentViewPayload!
    updateCreateContentPermission(data: UpdateCreateContentPermissionInput!): UpdateCreateContentPermissionPayload!
    updateDeleteContentPermission(data: UpdateDeleteContentPermissionInput!): UpdateDeleteContentPermissionPayload!
    updateEnumerableField(data: UpdateEnumerableFieldInput!): AsyncOperationPayload!
    updateEnumeration(data: UpdateEnumerationInput!): AsyncOperationPayload!
    updateEnvironment(data: UpdateEnvironmentInput!): UpdateEnvironmentPayload!
    updateFieldExtension(data: UpdateFieldExtensionInput!): UpdateFieldExtensionPayload!
    updateFilestackSecurityOptions(data: UpdateFilestackSecurityOptionsInput!): UpdateFilestackSecurityOptionsPayload!
    updateGatsbyCloudIntegration(data: UpdateGatsbyCloudIntegrationInput!): UpdateGatsbyCloudIntegrationPayload
    updateGraphQLRemoteSource(data: UpdateGraphQLRemoteSourceInput!): AsyncOperationPayload!
    updateLocale(data: UpdateLocaleInput!): AsyncOperationPayload!
    updateMemberRoles(data: UpdateMemberRolesInput!): Member!
    updateModel(data: UpdateModelInput!): AsyncOperationPayload!
    updateNetlifyIntegration(data: UpdateNetlifyIntegrationInput!): UpdateNetlifyIntegrationPayload
    updatePermanentAuthToken(data: UpdatePermanentAuthTokenInput!): UpdatePermanentAuthTokenPayload!
    updateProject(data: UpdateProjectInput!): Project!
    updatePublicEndpoint(data: UpdatePublicEndpointInput!): UpdatePublicPermissionsPayload
    updatePublishContentPermission(data: UpdatePublishContentPermissionInput!): UpdatePublishContentPermissionPayload!
    updateRESTRemoteSource(data: UpdateRESTRemoteSourceInput!): AsyncOperationPayload!
    updateReadContentPermission(data: UpdateReadContentPermissionInput!): UpdateReadContentPermissionPayload!
    updateReadVersionContentPermission(data: UpdateReadVersionContentPermissionInput!): UpdateReadVersionContentPermissionPayload!
    updateRelationalField(data: UpdateRelationalFieldInput!): AsyncOperationPayload!
    updateRemoteField(data: UpdateRemoteFieldInput!): AsyncOperationPayload!
    updateRole(data: UpdateRoleInput!): Role!
    updateSidebarElement(data: UpdateSidebarElementInput!): UpdateSidebarElementPayload!
    updateSidebarExtension(data: UpdateSidebarExtensionInput!): UpdateSidebarExtensionPayload!
    updateSimpleField(data: UpdateSimpleFieldInput!): AsyncOperationPayload!
    updateStage(data: UpdateStageInput!): AsyncOperationPayload!
    updateUnionField(data: UpdateUnionFieldInput!): AsyncOperationPayload!
    updateUnpublishContentPermission(data: UpdateUnpublishContentPermissionInput!): UpdateUnpublishContentPermissionPayload!
    updateUpdateContentPermission(data: UpdateUpdateContentPermissionInput!): UpdateUpdateContentPermissionPayload!
    updateViewGroup(data: UpdateViewGroupInput!): UpdateViewGroupPayload!
    updateWebhook(data: UpdateWebhookInput!): UpdateWebhookPayload!
    updateWorkflow(data: UpdateWorkflowInput!): UpdateWorkflowPayload!
    updateWorkflowStep(data: UpdateWorkflowStepInput!): UpdateWorkflowStepPayload!
    upgradeEnvironmentAssets(data: UpgradeEnvironmentAssetInput!): UpgradeEnvironmentAssetPayload!
}

enum NetlifyBuildState {
    BUILDING
    FAILED
    PREPARING
    READY
}

type NetlifyIntegration implements IIntegration {
    createdAt: DateTime!
    """
    Integration description on GCMS
    """
    description: String
    """
    Integration display name on GCMS
    """
    displayName: String
    """
    Integration ID
    """
    id: ID!
    models: [IModel!]!
    """
    Configured sites for netlify integration
    """
    sites: [NetlifySite!]!
    updatedAt: DateTime!
}

type NetlifyIntegrationCallbackPayload {
    error: String
    integration: NetlifyIntegration!
    integrationId: ID! @deprecated(reason: "use integration instead")
    site: NetlifySite!
}

type NetlifySite {
    displayName: String!
    id: String!
    """
    Contains information of the last time the build state was changing.
    """
    lastState: NetlifyState
    url: String!
}

input NetlifySiteInput {
    displayName: String!
    id: String!
}

type NetlifyState {
    """
    Time when the build of the site was finished
    """
    buildFinishedAt: DateTime
    """
    Time when the build of the site was prepared
    """
    buildPreparedAt: DateTime
    """
    Time when the build of the site was started
    """
    buildStartedAt: DateTime
    """
    Current state the site is in
    """
    buildState: NetlifyBuildState!
    """
    Member in the project who triggered a build. If the build was triggered externally this will be null.
    """
    triggeredBy: NetlifyStateTriggeredBy
}

union NetlifyStateTriggeredBy = Member | PermanentAuthToken

enum OAuthGrantType {
    client_credentials
}

type OrderBy {
    orderByField: IField!
    orderDir: ColumnOrderByDir!
}

input OrderByInput {
    orderByField: ID!
    orderDir: ColumnOrderByDir!
}

type PageAppElement implements IAppElement {
    apiId: String!
    app: App!
    config: JSON
    createdAt: DateTime!
    description: String
    id: ID!
    name: String!
    src: String!
    type: AppElementType!
    updatedAt: DateTime!
}

type PageInfo {
    hasNextPage: Boolean!
    hasPreviousPage: Boolean!
    pageSize: Int!
}

type PaymentAccount {
    accountManagementUrl: String
    accountName: String
    createdAt: DateTime!
    description: String
    hostedBillingUrl: String
    hostedPageUrl(planName: String!, projectId: ID!): String
    id: ID!
    isClosed: Boolean!
    isMain: Boolean!
    paymentSubscriptions: [PaymentSubscription!]!
    updatedAt: DateTime!
    user: IUser!
}

type PaymentSubscription {
    billingPeriod: BillingPeriod!
    createdAt: DateTime!
    id: ID!
    identifier: String
    isCanceled: Boolean!
    paymentAccount: PaymentAccount!
    plan: Plan!
    projects: [Project!]!
    renewsAt: DateTime
    updatedAt: DateTime!
}

type PermanentAuthToken {
    contentPermissions: [IContentPermission!]!
    createdAt: DateTime!
    defaults: PermanentAuthTokenDefaults!
    description: String
    id: ID!
    managementPermissions: [ManagementPermission!]!
    name: String!
    token: String!
    updatedAt: DateTime!
}

enum PermanentAuthTokenAudience {
    CONTENT_API
    MANAGEMENT_API
}

type PermanentAuthTokenDefaults {
    stage: Stage!
}

input PermanentAuthTokenDefaultsInput {
    stage: ID!
}

enum PermissionAction {
    APP_CREATE
    APP_DELETE
    APP_INSTALLATION_CREATE
    APP_INSTALLATION_DELETE
    APP_INSTALLATION_UPDATE
    APP_UPDATE
    AUDIT_LOGS_READ
    COMPONENT_CREATE
    COMPONENT_DELETE
    COMPONENT_READ
    COMPONENT_UPDATE
    CONTENTVIEW_CREATE
    CONTENTVIEW_DELETE
    CONTENTVIEW_READ
    CONTENTVIEW_SYSTEM_UPDATE
    CONTENTVIEW_UPDATE
    CONTENT_CREATE
    CONTENT_DELETE
    CONTENT_PERMISSION_CREATE
    CONTENT_PERMISSION_DELETE
    CONTENT_PERMISSION_READ
    CONTENT_PERMISSION_UPDATE
    CONTENT_PUBLISH
    CONTENT_READ
    CONTENT_UPDATE
    CONTENT_UPDATE_PUBLISHED
    ENUMERATION_CREATE
    ENUMERATION_DELETE
    ENUMERATION_READ
    ENUMERATION_UPDATE
    ENVIRONMENT_BACKUP_CREATE
    ENVIRONMENT_BACKUP_DELETE
    ENVIRONMENT_BACKUP_READ
    ENVIRONMENT_BACKUP_RESTORE
    ENVIRONMENT_BACKUP_UPDATE
    ENVIRONMENT_CREATE
    ENVIRONMENT_DELETE
    ENVIRONMENT_PROMOTE
    ENVIRONMENT_READ
    ENVIRONMENT_UPDATE
    EXTENSION_CREATE
    EXTENSION_DELETE
    EXTENSION_READ
    EXTENSION_UPDATE
    FIELD_CREATE
    FIELD_DELETE
    FIELD_READ
    FIELD_UPDATE
    INTEGRATION_CREATE
    INTEGRATION_DELETE
    INTEGRATION_READ
    INTEGRATION_UPDATE
    LOCALE_CREATE
    LOCALE_DELETE
    LOCALE_READ
    LOCALE_UPDATE
    MANAGE_PAYMENT
    MODEL_CREATE
    MODEL_DELETE
    MODEL_READ
    MODEL_UPDATE
    NETLIFY_TRIGGER_BUILD
    PAT_CREATE
    PAT_DELETE
    PAT_READ
    PAT_UPDATE
    PLAYGROUND_USE
    PROJECT_CLONE
    PROJECT_DELETE
    PROJECT_UPDATE
    REMOTE_SOURCE_CREATE
    REMOTE_SOURCE_DELETE
    REMOTE_SOURCE_READ
    REMOTE_SOURCE_UPDATE
    ROLE_CREATE
    ROLE_DELETE
    ROLE_UPDATE
    STAGE_CREATE
    STAGE_DELETE
    STAGE_READ
    STAGE_UPDATE
    STORAGE_BUCKET_CREATE
    STORAGE_BUCKET_DELETE
    STORAGE_BUCKET_READ
    STORAGE_BUCKET_UPDATE
    USER_ASSIGNROLE
    USER_INVITE
    USER_REMOVE
    VIEW_GROUP_CREATE
    VIEW_GROUP_DELETE
    VIEW_GROUP_READ
    VIEW_GROUP_UPDATE
    VIEW_ROLE_PERMISSION_SETTINGS
    VIEW_SCHEMA
    VIEW_TEAM_MEMBER_SETTINGS
    WEBHOOK_CREATE
    WEBHOOK_DELETE
    WEBHOOK_READ
    WEBHOOK_UPDATE
    WORKFLOW_CREATE
    WORKFLOW_DELETE
    WORKFLOW_READ
    WORKFLOW_STEP_CREATE
    WORKFLOW_STEP_DELETE
    WORKFLOW_STEP_UPDATE
    WORKFLOW_UPDATE
}

type Plan {
    billingPeriodMonths: Int!
    canBeSwitchedTo(projectId: ID!): PlanSwitchCheckResponse!
    createdAt: DateTime!
    description: String
    displayName: String!
    id: ID!
    isEnterprise: Boolean!
    isFree: Boolean!
    isLegacy: Boolean
    isSwitchable(projectId: ID!): Boolean @deprecated(reason: "This has been replaced by canBeSwitchedTo(projectId: ID!)")
    isTrial: Boolean!
    limits: [Limit!]!
    name: String!
    price: Float!
    switchType(projectId: ID!): PlanSwitchType
    updatedAt: DateTime!
}

type PlanSwitchCheckResponse {
    reasons: [String]!
    switchable: Boolean!
}

enum PlanSwitchType {
    CHANGE
    DOWNGRADE
    UPGRADE
}

type Profile {
    companyName: String
    companySize: String
    email: String!
    id: ID!
    name: String!
    picture: String
    purpose: String
    role: String
}

type Progress {
    current: Float!
    estimate: Float
    max: Float
    percent: Float
}

type Project {
    auditLog(id: String!): AuditLog!
    auditLogs(limit: Int, orderBy: AuditLogOrderByInput = timestamp_ASC, skip: Int, where: AuditLogWhereInput): AuditLogsPayload!
    availableManagementPermissions: [ManagementPermission!]!
    cloningProjects: [CloningProject!]!
    createdAt: DateTime!
    defaultPaginationSize: Int
    description: String
    environment(id: ID, name: String): Environment!
    environmentBackupConfig(id: ID, name: String): EnvironmentBackupConfig
    environments: [Environment!]!
    environmentsBackups: [EnvironmentBackup!]!
    existingRole(id: ID!): Role!
    existingRoles: [Role!]!
    id: ID!
    inTrial: Boolean
    invites: [Invite!]!
    isCloning: Boolean
    lifecycle: Lifecycle!
    maxPaginationSize: Int
    members: [Member!]!
    membersConnection(first: Int! = 25, skip: Int! = 0): MembersConnection!
    meta: JSON!
    name: String!
    opensInClassic: Boolean
    owner: Member!
    picture: String
    """
    if this is `null` it means the project is not publicly clone-able
    """
    publicCloneAccess: PublicCloneAccess
    quotas: Quota!
    region: Region!
    subscription: PaymentSubscription!
    trialExpiresIn: DateTime
    updatedAt: DateTime!
    viewerAsMember: Member
}

type ProjectChangeCompletedCloning {
    clonedProject: Project!
}

union ProjectChangedPayload = ProjectChangeCompletedCloning

type ProjectCreatedPayload {
    id: ID!
}

input PromoteEnvironmentInput {
    environmentId: ID!
    renameCurrentMasterApiIdTo: String!
    renameCurrentMasterDisplayNameTo: String!
    setCurrentMasterColorTo: ColorPalette
}

type PromoteEnvironmentPayload {
    previousMasterEnvironment: Environment!
    promotedEnvironment: Environment!
}

type PublicCloneAccess {
    enabled: Boolean!
    id: ID!
    includeContent: Boolean!
    includeWebhooks: Boolean!
}

type PublicContentAPI {
    contentPermissions: [IContentPermission!]!
    defaults: PublicContentAPIDefauts!
}

type PublicContentAPIDefauts {
    stage: Stage!
}

type PublishContentPermission implements IContentPermission {
    condition: String
    createdAt: DateTime!
    enabled: Boolean!
    fromStages: [Stage!]
    id: ID!
    locales: [Locale!]
    model: IModel
    target: ContentPermissionTarget!
    toStages: [Stage!]
    updatedAt: DateTime!
}

type Query {
    _viewer: IViewer! @deprecated(reason: "Use viewer instead")
    metaInfo: MetaInfo!
    viewer: IViewer!
    __schema: __Schema!
    __type(name: String!): __Type
}

type QueryModel implements IFieldParent & IModel {
    apiId: String!
    apiIdPlural: String!
    contentViews(filter: ContentViewFilterInput, includeSystemContentViews: Boolean = false): [ContentView!]!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    environment: Environment!
    field(id: ID!): IField!
    fields(includeApiOnlyFields: Boolean = false, includeHiddenFields: Boolean = false): [IField!]!
    fieldsConnection(
        first: Int! = 25
        includeApiOnlyFields: Boolean = false
        includeHiddenFields: Boolean = false
        includeSystemFields: Boolean = true
        skip: Int! = 0
    ): FieldsConnection!
    """
    Model has at least one document
    """
    hasContent: Boolean!
    hasLocalizedComponents: Boolean!
    id: ID!
    isLocalized: Boolean!
    isSystem: Boolean!
    isVersioned: Boolean!
    sidebarElements: [ISidebarElement!]!
    titleFields: [IField!]!
    updatedAt: DateTime!
    viewerPermission: ModelViewerPermission!
}

type Quota {
    apiOperations: Progress!
    assetTraffic: Progress!
    environments: Progress!
    records: Progress!
    roles: Progress!
    seats: Progress!
}

enum REMOTE_GRAPHQL_TYPE {
    ENUM
    INPUT_OBJECT
    INTERFACE
    OBJECT
    SCALAR
    UNION
}

type RESTRemoteSource implements IRecentSchemaChange & IRemoteSource {
    createdAt: DateTime!
    debugEnabled: Boolean!
    description: String
    displayName: String!
    headers: JSON
    id: ID!
    kind: RemoteSourceKind
    oAuth: JSON
    prefix: String!
    remoteTypeDefinitionsConnection(
        first: Int! = 25
        isUserDefined: Boolean
        remoteGraphQLTypes: [REMOTE_GRAPHQL_TYPE!]
        skip: Int! = 0
    ): RemoteTypeDefinitionsConnection!
    type: RemoteSourceType!
    updatedAt: DateTime!
    url: String!
}

type ReadContentPermission implements IContentPermission {
    condition: String
    createdAt: DateTime!
    enabled: Boolean!
    id: ID!
    locales: [Locale!]
    model: IModel
    stages: [Stage!]
    target: ContentPermissionTarget!
    updatedAt: DateTime!
}

type ReadVersionContentPermission implements IContentPermission {
    createdAt: DateTime!
    enabled: Boolean!
    id: ID!
    model: IModel
    target: ContentPermissionTarget!
    updatedAt: DateTime!
}

type Region {
    awsRegion: String
    enabled: Boolean!
    id: String!
    isBeta: Boolean!
    isReadOnly: Boolean!
    name: String!
    pingUrl: String
}

type RelationalField implements IField & IRequireableField & IVisibilityConditionalField {
    apiId: String!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfig!
    id: ID!
    isHidden: Boolean! @deprecated(reason: "Use visibility instead")
    isList: Boolean!
    isRequired: Boolean!
    isSystem: Boolean!
    meta: JSON
    """
    This will throw a runtime error for fields that are on a component instead of model!
    """
    model: IModel! @deprecated(reason: "Use parent instead")
    parent: IFieldParent!
    position: Int!
    relatedField: RelationalField!
    relatedModel: IModel!
    tableConfig: FieldConfig!
    type: RelationalFieldType!
    updatedAt: DateTime!
    visibility: VisibilityTypes!
    visibilityCondition: IFieldCondition
}

enum RelationalFieldType {
    ASSET
    RELATION
}

type RemoteField implements IField {
    apiId: String!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfig!
    id: ID!
    inputArgs: [FieldInputArg!]
    isHidden: Boolean! @deprecated(reason: "Use visibility instead")
    isList: Boolean!
    isRequired: Boolean!
    isSystem: Boolean!
    meta: JSON
    """
    This will throw a runtime error for fields that are on a component instead of model!
    """
    model: IModel! @deprecated(reason: "Use parent instead")
    parent: IFieldParent!
    position: Int!
    remoteConfig: IRemoteFieldConfig!
    tableConfig: FieldConfig!
    type: RemoteFieldType!
    updatedAt: DateTime!
    visibility: VisibilityTypes!
}

enum RemoteFieldApiMethod {
    GET
    POST
}

input RemoteFieldConfigInput {
    cacheTTLSeconds: Int
    """
    If true, headers that are sent by the client will be forwarded to the remote source
    """
    forwardClientHeaders: Boolean
    """
    In case of apiType GraphQL graphqlQuery contains the GraphQL query that will be sent to the remote source
    """
    graphQLQuery: String
    headers: JSON
    method: RemoteFieldApiMethod!
    remoteSourceId: ID!
    """
    In case of apiType REST restPath contains the path that will be appended to the API base url
    """
    restPath: String
    """
    Remote Type definitions apiId of the type the remote field should return.
    """
    returnTypeApiId: String!
}

enum RemoteFieldType {
    GRAPHQL
    REST
}

enum RemoteSourceKind {
    CommerceLayer
    CommerceTools
    Custom
}

input RemoteSourceOAuthInput {
    authorizationGrantType: OAuthGrantType!
    authorizationUrl: String!
    clientId: String!
    clientSecret: String
    scopes: [String!]
}

enum RemoteSourceType {
    GRAPHQL
    REST
}

type RemoteTypeDefinition {
    apiId: String!
    createdAt: DateTime!
    graphqlType: REMOTE_GRAPHQL_TYPE!
    id: ID!
    isSystem: Boolean!
    sdl: String!
    updatedAt: DateTime!
}

type RemoteTypeDefinitionEdge {
    node: RemoteTypeDefinition!
}

type RemoteTypeDefinitionsAggregate {
    count: Int!
}

type RemoteTypeDefinitionsConnection {
    aggregate: RemoteTypeDefinitionsAggregate!
    edges: [RemoteTypeDefinitionEdge!]!
    pageInfo: PageInfo!
}

input RemoveMemberInput {
    memberId: ID!
}

type RemoveMemberPayload {
    removedMemberId: ID!
}

input ResetSidebarElementsInput {
    modelId: ID!
}

type ResetSidebarElementsPayload {
    model: IModel
}

type RestRemoteFieldConfig implements IRemoteFieldConfig {
    cacheTTLSeconds: Int
    forwardClientHeaders: Boolean!
    headers: JSON
    method: RemoteFieldApiMethod!
    path: String
    remoteSource: RESTRemoteSource!
    returnType: RemoteTypeDefinition!
}

input RestoreEnvironmentBackupInput {
    environmentBackupId: ID!
}

type RestoreEnvironmentBackupPayload {
    environmentBackup: EnvironmentBackup!
}

input RetriggerWebhookInput {
    logId: String!
    webhookId: ID!
}

type RetriggerWebhookPayload {
    logId: String!
}

input RevokeInviteInput {
    id: ID!
}

type RevokeInvitePayload {
    revokedInviteId: ID!
}

type Role {
    """
    Returns contentPermissions for a role.
    Optionally filtered by environment.
    """
    contentPermissions(environmentId: ID): [IContentPermission!]!
    createdAt: DateTime!
    description: String
    id: ID!
    isDefault: Boolean!
    managementPermissions: [ManagementPermission!]!
    members: [Member!]!
    membersConnection(first: Int! = 25, skip: Int! = 0): MembersConnection!
    name: String!
    updatedAt: DateTime!
}

type SchedulingModel implements IFieldParent & IModel {
    apiId: String!
    apiIdPlural: String!
    contentViews(filter: ContentViewFilterInput, includeSystemContentViews: Boolean = false): [ContentView!]!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    environment: Environment!
    field(id: ID!): IField!
    fields(includeApiOnlyFields: Boolean = false, includeHiddenFields: Boolean = false): [IField!]!
    fieldsConnection(
        first: Int! = 25
        includeApiOnlyFields: Boolean = false
        includeHiddenFields: Boolean = false
        includeSystemFields: Boolean = true
        skip: Int! = 0
    ): FieldsConnection!
    """
    Model has at least one document
    """
    hasContent: Boolean!
    hasLocalizedComponents: Boolean!
    id: ID!
    isLocalized: Boolean!
    isSystem: Boolean!
    isVersioned: Boolean!
    sidebarElements: [ISidebarElement!]!
    titleFields: [IField!]!
    updatedAt: DateTime!
    viewerPermission: ModelViewerPermission!
}

type SchemaMigrationFailedSubscriptionPayload implements ISchemaMigrationPayload {
    environment: Environment
    migration: Migration!
    project: Project
}

type SchemaMigrationSubscriptionPayload implements ISchemaMigrationPayload {
    migration: Migration!
}

type SchemaMigrationSucceededSubscriptionPayload implements ISchemaMigrationPayload {
    affectedResourceId: ID! @deprecated(reason: "No longer supported")
    affectedResourceType: MigrationOperationType! @deprecated(reason: "No longer supported")
    environment: Environment!
    migration: Migration!
    project: Project!
}

input SendFeedbackInput {
    allowContact: Boolean
    featureName: String
    message: String
    projectId: ID
    rating: Int
    reasons: [String!]
    type: FeedbackType!
}

input SendInviteInput {
    email: String!
    origin: String
    projectId: ID!
    roleIds: [ID!]!
}

type SendInvitePayload {
    invite: Invite!
}

input SetUserAnalyticsInput {
    conversionPage: String
    gclid: String
    hubspotutk: String
    landingPage: String
    referrer: String
    utmCampaign: String
    utmContent: String
    utmMedium: String
    utmSource: String
    utmTerm: String
}

input SetUserPreferencesInput {
    """
    If preferences are null, then all the user preferences will be deleted.
    You don't need to pass the whole preferences object, just the keys you want to update or add.
    """
    preferences: JSON
}

input SetUserSelectionInput {
    """
    The id of the project you want associate the selection to.
    """
    projectId: ID!
    """
    The value of the selection you want to update or add.

    You don't need to pass the whole object, just the keys you want to update or add.

    If selection value is null, then value will be deleted.
    """
    selection: JSON
}

union SidebarElements = AppSidebarElement | CustomSidebarElement | ExtensionSidebarElement | SystemSidebarElement

type SidebarExtension implements IExtension {
    apiId: String!
    config: JSON!
    createdAt: DateTime!
    createdBy: Member
    description: String
    environment: Environment!
    id: ID!
    isActive: Boolean!
    meta: JSON
    name: String
    neededPermissions: [AvailableExtensionPermission!]!
    sidebarElements: [ISidebarElement!]!
    """
    Location for the source if the source type is an external one
    """
    src: String!
    """
    The type indicating where the source for the extension will be obtained from
    """
    srcType: ExtensionSrcType!
    updatedAt: DateTime!
    updatedBy: Member
}

type SimpleField implements IField & ILocalizableField & IRequireableField & ITitleableField & IUniqueableField & IVisibilityConditionalField {
    apiId: String!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    embeddableModels: [IModel!]
    embedsEnabled: Boolean
    extensions: JSON
    formConfig: FieldConfig!
    id: ID!
    initialValue: String
    isHidden: Boolean! @deprecated(reason: "Use visibility instead")
    isList: Boolean!
    isLocalized: Boolean!
    isRequired: Boolean!
    isSystem: Boolean!
    isTitle: Boolean!
    isUnique: Boolean!
    meta: JSON
    """
    This will throw a runtime error for fields that are on a component instead of model!
    """
    model: IModel! @deprecated(reason: "Use parent instead")
    parent: IFieldParent!
    position: Int!
    tableConfig: FieldConfig!
    type: SimpleFieldType!
    updatedAt: DateTime!
    validations: SimpleFieldValidations
    visibility: VisibilityTypes!
    visibilityCondition: IFieldCondition
}

"""
Field types
"""
enum SimpleFieldType {
    BOOLEAN
    COLOR
    DATE
    DATETIME
    FLOAT
    ID
    INT
    JSON
    LOCATION
    RICHTEXT
    STRING
}

union SimpleFieldValidations = FloatFieldValidations | IntFieldValidations | StringFieldValidations

input SimpleFieldValidationsInput {
    Float: FloatFieldValidationsInput
    Int: IntFieldValidationsInput
    String: StringFieldValidationsInput
}

type Stage {
    apiId: String!
    backgroundColor: String!
    color: String!
    colorPaletteId: ColorPalette!
    createdAt: DateTime!
    description: String
    displayName: String!
    id: ID!
    isSystem: Boolean!
    position: Int!
    updatedAt: DateTime!
}

type StageFilestackSecurityOptions {
    expires: String!
    stage: Stage!
}

input StartTrialInput {
    planId: ID!
    projectId: ID!
}

type StartTrialPayload {
    project: Project!
}

type StarterTemplate implements ITemplate {
    coverPicture: String
    description: String
    details: String
    id: ID!
    name: String!
    picture: String
    resources: [TemplateResource!]!
    stack: [TechnologyStack!]!
}

type Stats {
    time: DateTime!
    value: Float!
}

type StringFieldValidations {
    characters: FieldValidationRange
    listItemCount: FieldValidationRange
    matches: FieldValidationRegEx
    notMatches: FieldValidationRegEx
}

input StringFieldValidationsInput {
    characters: FieldValidationIntRangeInput
    listItemCount: FieldValidationIntRangeInput
    matches: FieldValidationRegExInput
    notMatches: FieldValidationRegExInput
}

type Subscription {
    assetMigrationProgress(projectId: ID!): AssetMigrationProgressPayload!
    environmentCreated(projectId: ID!): EnvironmentCreatedPayload!
    environmentPromoted(projectId: ID!): EnvironmentPromotedPayload!
    netlifyBuildNotification(integrationId: ID!): NetlifyIntegrationCallbackPayload!
    projectChanged: ProjectChangedPayload!
    projectCreated: ProjectCreatedPayload!
    schemaMigration(environmentId: ID!): ISchemaMigrationPayload!
}

input SwitchPaymentSubscriptionInput {
    planName: String!
    subscriptionId: ID!
}

type SwitchPaymentSubscriptionPayload {
    project: Project!
    subscription: PaymentSubscription!
}

type SystemSidebarElement implements ISidebarElement {
    config: JSON
    createdAt: DateTime!
    description: String
    displayName: String!
    id: ID!
    isEnabled: Boolean!
    model: IModel!
    position: Int!
    type: SystemSidebarElementType!
    updatedAt: DateTime!
}

enum SystemSidebarElementType {
    INFORMATION
    LOCALIZATIONS
    PREVIEW_URLS
    RELEASES
    STAGES
    VERSIONS
}

type TechnologyStack {
    image: String!
    title: String!
    url: String
}

input TechnologyStackInput {
    image: String!
    title: String!
    url: String
}

type Template implements ITemplate {
    coverPicture: String
    description: String
    details: String
    id: ID!
    name: String!
    picture: String
    resources: [TemplateResource!]!
}

type TemplateResource {
    title: String!
    url: String!
}

input TemplateResourceInput {
    title: String!
    url: String!
}

type TokenViewer implements IViewer {
    availableExtensionPermissions: [AvailableExtensionPermission!]!
    availableExtensionSrcTypes: [ExtensionSrcType!]!
    availableIntegrations: [INTEGRATION_PROVIDER!]!
    id: ID!
    plans: [Plan!]!
    project(id: ID): Project
    regions: [Region!]!
    templates: [ITemplate!]!
}

enum TrackEvent {
    CHECKED_QUICKSTART
    CREATED_CONTENT
    USED_PLAYGROUND
}

input TrackInput {
    event: TrackEvent!
    meta: String
    projectId: ID!
}

type TrackPayload {
    success: Boolean!
}

input TriggerNetlifyIntegrationBuildInput {
    integrationId: ID!
    siteId: String!
}

type TriggerNetlifyIntegrationBuildPayload {
    integration: NetlifyIntegration!
}

type UniDirectionalRelationalField implements IField & IRequireableField & IVisibilityConditionalField {
    apiId: String!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfig!
    id: ID!
    isHidden: Boolean! @deprecated(reason: "Use visibility instead")
    isList: Boolean!
    isRequired: Boolean!
    isSystem: Boolean!
    meta: JSON
    """
    This will throw a runtime error for fields that are on a component instead of model!
    """
    model: IModel! @deprecated(reason: "Use parent instead")
    parent: IFieldParent!
    position: Int!
    relatedModel: IModel!
    tableConfig: FieldConfig!
    type: RelationalFieldType!
    updatedAt: DateTime!
    visibility: VisibilityTypes!
    visibilityCondition: IFieldCondition
}

type Union {
    apiId: String!
    description: String
    displayName: String!
    field: UnionField!
    id: ID!
    memberTypes: [UnionField!]!
}

type UnionField implements IField & IUnionField & IVisibilityConditionalField {
    apiId: String!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    extensions: JSON
    formConfig: FieldConfig!
    id: ID!
    isHidden: Boolean! @deprecated(reason: "Use visibility instead")
    isList: Boolean!
    """
    True if this field is the reverse side of the initally created union field
    """
    isMemberType: Boolean!
    isSystem: Boolean!
    meta: JSON
    """
    This will throw a runtime error for fields that are on a component instead of model!
    """
    model: IModel! @deprecated(reason: "Use parent instead")
    parent: IFieldParent!
    position: Int!
    tableConfig: FieldConfig!
    type: UnionFieldType!
    union: Union!
    updatedAt: DateTime!
    visibility: VisibilityTypes!
    visibilityCondition: IFieldCondition
}

enum UnionFieldType {
    UNION
}

type UnpublishContentPermission implements IContentPermission {
    condition: String
    createdAt: DateTime!
    enabled: Boolean!
    id: ID!
    locales: [Locale!]
    model: IModel
    stages: [Stage!]
    target: ContentPermissionTarget!
    updatedAt: DateTime!
}

input UpdateAppInstallationInput {
    appInstallationId: ID!
    config: JSON!
    status: AppInstallationStatus
}

type UpdateAppInstallationPayload {
    updatedAppInstallation: AppInstallation!
}

input UpdateComponentFieldInput {
    apiId: String
    description: String
    displayName: String
    extensions: JSON
    formConfig: FieldConfigInput
    id: ID!
    isList: Boolean
    isRequired: Boolean
    meta: JSON
    tableConfig: FieldConfigInput
    visibility: VisibilityTypes
    visibilityCondition: FieldConditionInput
}

input UpdateComponentInput {
    """
    Rename singular API ID to
    specified value
    """
    apiId: String
    """
    Rename plural API ID to
    specified value
    """
    apiIdPlural: String
    description: String
    displayName: String
    id: ID!
    isSystem: Boolean
}

input UpdateComponentUnionFieldInput {
    apiId: String
    components: [ID!]
    description: String
    displayName: String
    extensions: JSON
    formConfig: FieldConfigInput
    id: ID!
    meta: JSON
    tableConfig: FieldConfigInput
    visibility: VisibilityTypes
    visibilityCondition: FieldConditionInput
}

type UpdateContentPermission implements IContentPermission {
    condition: String
    createdAt: DateTime!
    enabled: Boolean!
    id: ID!
    locales: [Locale!]
    model: IModel
    target: ContentPermissionTarget!
    updatedAt: DateTime!
}

input UpdateContentPermissionEnabledInput {
    enabled: Boolean!
    permissionId: ID!
}

type UpdateContentPermissionEnabledPayload {
    permission: IContentPermission!
}

input UpdateContentViewInput {
    columns: [ContentViewColumnInput!]!
    description: String
    filters: JSON
    id: ID!
    name: String
    orderBy: OrderByInput
    viewGroupId: ID
}

type UpdateContentViewPayload {
    updatedContentView: ContentView!
}

input UpdateCreateContentPermissionInput {
    locales: [ID!]
    model: CreateCreateContentPermissionModelInput
    permissionId: ID!
}

type UpdateCreateContentPermissionPayload {
    permission: CreateContentPermission!
}

input UpdateDeleteContentPermissionInput {
    locales: [ID!]
    model: CreateUpdateContentPermissionModelInput
    permissionId: ID!
}

type UpdateDeleteContentPermissionPayload {
    permission: DeleteContentPermission!
}

input UpdateEnumerableFieldInput {
    apiId: String
    description: String
    displayName: String
    extensions: JSON
    formConfig: FieldConfigInput
    id: ID!
    initialValue: String
    isHidden: Boolean
    isList: Boolean
    isLocalized: Boolean
    isRequired: Boolean
    isSystem: Boolean
    isTitle: Boolean
    isUnique: Boolean
    meta: JSON
    migrationValue: String
    tableConfig: FieldConfigInput
    visibility: VisibilityTypes
    visibilityCondition: FieldConditionInput
}

input UpdateEnumerationInput {
    """
    New Api identifier to use,
    will impact Content API
    """
    apiId: String
    description: String
    displayName: String
    id: ID!
    isSystem: Boolean
    """
    List of values to create
    """
    valuesToCreate: [EnumerationValueCreateInput!]
    """
    List of value IDs to delete
    """
    valuesToDelete: [ID!]
    """
    List of existing values to update
    """
    valuesToUpdate: [EnumerationValueUpdateInput!]
}

input UpdateEnvironmentInput {
    """
    Update assigned color to the environment
    """
    color: ColorPalette
    """
    Update the environment description
    """
    description: String
    """
    Update the environment display name
    """
    displayName: String
    """
    ID of environment to update
    """
    id: ID!
}

type UpdateEnvironmentPayload {
    updatedEnvironment: Environment!
}

input UpdateFieldExtensionInput {
    apiId: String!
    config: JSON
    description: String
    extensionId: ID!
    fieldType: ExtensionFieldType
    hasFormRenderer: Boolean
    hasListRenderer: Boolean
    hasTableRenderer: Boolean
    isActive: Boolean
    meta: JSON
    name: String
    neededPermissions: [AvailableExtensionPermissionAction!]
    src: String
    srcTypeId: ID
}

type UpdateFieldExtensionPayload {
    updatedExtension: FieldExtension!
}

input UpdateFilestackSecurityOptionsInput {
    enabled: Boolean
    environmentId: ID!
    globalExpires: String
    stageOverrides: [UpdateStageFilestackSecurityOptionsInput!]
}

type UpdateFilestackSecurityOptionsPayload {
    updatedEnvironment: Environment!
    updatedFilestack: Filestack!
}

input UpdateGatsbyCloudIntegrationInput {
    """
    URL to trigger a Deploy Build. This webhook will be triggered when publishing and unpublishing entries.
    """
    buildWebhookURL: String
    description: String
    displayName: String
    integrationId: ID!
    previewWebhookURL: String
    """
    Prefix of your site
    Only lower case alphabetical characters, numbers and underscores are allowed.
    """
    sitePrefix: String
}

type UpdateGatsbyCloudIntegrationPayload {
    updatedGatsbyCloudIntegration: GatsbyCloudIntegration!
}

input UpdateGraphQLRemoteSourceInput {
    debugEnabled: Boolean
    description: String
    displayName: String
    headers: JSON
    id: ID!
    introspectionHeaders: JSON
    introspectionMethod: GraphQLRemoteSourceIntrospectionMethod
    introspectionUrl: String
    kind: RemoteSourceKind
    """
    Oauth input that can be used to get access token for the remote source
    """
    oAuth: RemoteSourceOAuthInput
    remoteTypeDefinitionsToUpsert: UpsertRemoteTypeDefinitionsInput
    url: String
}

input UpdateLocaleInput {
    """
    Rename Locale apiId,
    will impact the Content API
    """
    apiId: String
    """
    Update locale description
    """
    description: String
    """
    Update the Locale's
    display name
    """
    displayName: String
    """
    ID of locale to update
    """
    id: ID!
    """
    Mark locale as default,
    will impact the Content API
    """
    isDefault: Boolean
}

input UpdateMemberRolesInput {
    memberId: ID!
    roleIds: [ID!]!
}

input UpdateModelInput {
    """
    Rename singular API ID to
    specified value
    """
    apiId: String
    """
    Rename plural API ID to
    specified value
    """
    apiIdPlural: String
    description: String
    displayName: String
    id: ID!
    isSystem: Boolean
}

input UpdateNetlifyIntegrationInput {
    """
    This token is used to create the needed BuildHook and BuildNotifications in Netlify.
    This token is only used once and won't be stored anywhere
    """
    accessToken: String!
    description: String
    displayName: String
    integrationId: ID!
    models: [ID!]
    """
    Overrides the currently setup netlify sites. Omit if you don't want to update the existing sites.
    """
    sites: [NetlifySiteInput!]
}

type UpdateNetlifyIntegrationPayload {
    updatedNetlifyIntegration: NetlifyIntegration!
}

input UpdatePermanentAuthTokenInput {
    defaults: PermanentAuthTokenDefaultsInput
    description: String
    id: ID!
    managementPermissionIds: [ID!]
    name: String
}

type UpdatePermanentAuthTokenPayload {
    updatedPermanentAuthToken: PermanentAuthToken!
}

input UpdateProjectInput {
    description: String
    id: ID!
    name: String
    opensInClassic: Boolean
    picture: String
    publicCloneAccess: UpdatePublicCloneAccessInput
}

input UpdatePublicCloneAccessInput {
    enabled: Boolean!
    includeContent: Boolean!
    includeWebhooks: Boolean!
}

input UpdatePublicEndpointDefaultsInput {
    stage: ID!
}

input UpdatePublicEndpointInput {
    defaults: UpdatePublicEndpointDefaultsInput
    environmentId: ID!
}

input UpdatePublicPermissionInput {
    allowMutations: Boolean!
    allowQueriesOnStages: [ID!]!
}

type UpdatePublicPermissionsPayload {
    environment: Environment!
}

input UpdatePublishContentPermissionInput {
    fromStages: [ID!]
    locales: [ID!]
    model: CreatePublishContentPermissionModelInput
    permissionId: ID!
    toStages: [ID!]
}

input UpdatePublishContentPermissionModelInput {
    condition: String
    id: ID!
}

type UpdatePublishContentPermissionPayload {
    permission: PublishContentPermission!
}

input UpdateRESTRemoteSourceInput {
    debugEnabled: Boolean
    description: String
    displayName: String
    headers: JSON
    id: ID!
    kind: RemoteSourceKind
    """
    Oauth input that can be used to get access token for the remote source
    """
    oAuth: RemoteSourceOAuthInput
    remoteTypeDefinitionsToUpsert: UpsertRemoteTypeDefinitionsInput
    url: String
}

input UpdateReadContentPermissionInput {
    locales: [ID!]
    model: CreateReadContentPermissionModelInput
    permissionId: ID!
    stages: [ID!]
}

type UpdateReadContentPermissionPayload {
    permission: ReadContentPermission!
}

input UpdateReadVersionContentPermissionInput {
    modelId: ID
    permissionId: ID!
}

type UpdateReadVersionContentPermissionPayload {
    permission: ReadVersionContentPermission!
}

input UpdateRelationalFieldInput {
    apiId: String
    description: String
    displayName: String
    extensions: JSON
    formConfig: FieldConfigInput
    id: ID!
    isHidden: Boolean
    isList: Boolean
    """
    Marks the field as required.
    Note: This is only supported for RelationFieldType ASSET!
    """
    isRequired: Boolean
    isSystem: Boolean
    isUnidirectional: Boolean
    meta: JSON
    tableConfig: FieldConfigInput
    visibility: VisibilityTypes
    visibilityCondition: FieldConditionInput
}

input UpdateRemoteFieldConfigInput {
    cacheTTLSeconds: Int
    forwardClientHeaders: Boolean
    """
    In case of apiType GraphQL graphqlQuery contains the GraphQL query that will be sent to the remote source
    """
    graphQLQuery: String
    headers: JSON
    method: RemoteFieldApiMethod
    remoteSourceId: ID
    """
    In case of apiType REST restPath contains the path that will be appended to the base url of the api
    """
    restPath: String
    """
    Remote Type definitions apiId of the type the remote field should return.
    """
    returnTypeApiId: String
}

input UpdateRemoteFieldInput {
    apiId: String
    description: String
    displayName: String
    extensions: JSON
    formConfig: FieldConfigInput
    id: ID!
    inputArgs: UpsertFieldInputArgInput
    isList: Boolean
    isRequired: Boolean
    meta: JSON
    remoteConfig: UpdateRemoteFieldConfigInput
    tableConfig: FieldConfigInput
    visibility: VisibilityTypes
}

input UpdateRoleInput {
    description: String
    id: ID!
    managementPermissionIds: [ID!]
    name: String
}

input UpdateSidebarElementInput {
    config: JSON
    description: String
    displayName: String
    id: ID!
}

type UpdateSidebarElementPayload {
    updatedSidebarElement: ISidebarElement!
}

input UpdateSidebarExtensionInput {
    apiId: String!
    config: JSON
    description: String
    extensionId: ID!
    isActive: Boolean
    meta: JSON
    name: String
    neededPermissions: [AvailableExtensionPermissionAction!]
    src: String
    srcTypeId: ID
}

type UpdateSidebarExtensionPayload {
    updatedExtension: SidebarExtension!
}

input UpdateSimpleFieldInput {
    apiId: String
    description: String
    displayName: String
    embeddableModels: EmbeddableModelsInput
    embedsEnabled: Boolean
    extensions: JSON
    formConfig: FieldConfigInput
    id: ID!
    initialValue: String
    isHidden: Boolean
    isList: Boolean
    isLocalized: Boolean
    isRequired: Boolean
    isSystem: Boolean
    isTitle: Boolean
    isUnique: Boolean
    meta: JSON
    migrationValue: String
    tableConfig: FieldConfigInput
    validations: SimpleFieldValidationsInput
    visibility: VisibilityTypes
    visibilityCondition: FieldConditionInput
}

input UpdateStageFilestackSecurityOptionsInput {
    expires: String!
    stageId: ID!
}

input UpdateStageInput {
    """
    Rename Stage apiId,
    will impact the Content API
    """
    apiId: String
    """
    Color that will be used in the webapp
    """
    colorPaletteId: ColorPalette
    """
    Update stage description
    """
    description: String
    """
    Update the Stage
    display name
    """
    displayName: String
    """
    ID of stage to update
    """
    id: ID!
    position: Int
}

input UpdateUnionFieldInput {
    apiId: String
    description: String
    displayName: String
    extensions: JSON
    formConfig: FieldConfigInput
    id: ID!
    isHidden: Boolean
    isSystem: Boolean
    meta: JSON
    tableConfig: FieldConfigInput
    union: UpdateUnionInput
    visibility: VisibilityTypes
    visibilityCondition: FieldConditionInput
}

input UpdateUnionInput {
    apiId: String
    description: String
    displayName: String
    """
    Models and member fields to add
    """
    membersToAdd: [CreateMemberFieldInput!]
    """
    Models to remove from union (accepts Model ID)
    """
    membersToRemove: [ID!]
}

input UpdateUnpublishContentPermissionInput {
    locales: [ID!]
    model: UpdateUnpublishContentPermissionModelInput
    permissionId: ID!
    stages: [ID!]
}

input UpdateUnpublishContentPermissionModelInput {
    condition: String
    id: ID!
}

type UpdateUnpublishContentPermissionPayload {
    permission: UnpublishContentPermission!
}

input UpdateUpdateContentPermissionInput {
    locales: [ID!]
    model: CreateUpdateContentPermissionModelInput
    permissionId: ID!
}

type UpdateUpdateContentPermissionPayload {
    permission: UpdateContentPermission!
}

input UpdateViewGroupInput {
    description: String
    id: ID!
    name: String
}

type UpdateViewGroupPayload {
    updatedViewGroup: ViewGroup!
}

input UpdateWebhookInput {
    description: String
    headers: JSON
    includePayload: Boolean
    isActive: Boolean
    isSystem: Boolean
    method: WebhookMethod
    models: [ID!]
    name: String
    secretKey: String
    stages: [ID!]
    triggerActions: [WebhookTriggerAction!]
    triggerSources: [WebhookTriggerSource!]
    triggerType: WebhookTriggerType
    url: String
    webhookId: ID!
}

type UpdateWebhookPayload {
    updatedWebhook: Webhook!
}

input UpdateWorkflowInput {
    description: String
    enabled: Boolean
    id: ID!
    models: [ID!]
    name: String
    """
    List of role IDs that can override the workflow
    """
    roleOverrides: [ID!]
}

type UpdateWorkflowPayload {
    updatedWorkflow: Workflow!
}

input UpdateWorkflowStepInput {
    allowEdit: Boolean
    allowedRoles: [ID!]
    color: ColorPalette
    description: String
    id: ID!
    publishStage: ID
    returnToStep: ID
}

type UpdateWorkflowStepPayload {
    updatedWorkflowStep: WorkflowStep!
}

input UpgradeEnvironmentAssetInput {
    environmentId: ID!
}

type UpgradeEnvironmentAssetPayload {
    environmentId: ID!
    lastStep: Int!
    status: String!
}

input UpsertFieldInputArgInput {
    fieldInputArgsToCreate: [UpsertFieldInputArgInputToCreateInput!]
    fieldInputArgsToDelete: [UpsertFieldInputArgInputToDeleteInput!]
    fieldInputArgsToUpdate: [UpsertFieldInputArgInputToUpdateInput!]
}

input UpsertFieldInputArgInputToCreateInput {
    apiId: String!
    isList: Boolean!
    isRequired: Boolean!
    remoteTypeId: ID!
}

input UpsertFieldInputArgInputToDeleteInput {
    inputArgId: ID!
}

input UpsertFieldInputArgInputToUpdateInput {
    apiId: String
    inputArgId: ID!
    isList: Boolean
    isRequired: Boolean
    remoteTypeId: ID
}

input UpsertRemoteTypeDefinitionToCreateInput {
    sdl: String!
}

input UpsertRemoteTypeDefinitionToDeleteInput {
    id: ID!
}

input UpsertRemoteTypeDefinitionToUpdateInput {
    id: ID!
    sdl: String
}

input UpsertRemoteTypeDefinitionsInput {
    remoteTypeDefinitionsToCreate: [UpsertRemoteTypeDefinitionToCreateInput!]
    remoteTypeDefinitionsToDelete: [UpsertRemoteTypeDefinitionToDeleteInput!]
    remoteTypeDefinitionsToUpdate: [UpsertRemoteTypeDefinitionToUpdateInput!]
}

input UpsertTemplateInput {
    gcms: String
}

type UpsertTemplatePayload {
    gcms: String
}

type User implements IUser {
    createdAt: DateTime!
    id: ID!
    preferences: JSON
    profile: Profile!
    updatedAt: DateTime!
}

type UserAnalytics {
    conversionPage: String
    createdAt: DateTime!
    gclid: String
    hubspotutk: String
    id: ID!
    landingPage: String
    referrer: String
    updatedAt: DateTime!
    utmCampaign: String
    utmContent: String
    utmMedium: String
    utmSource: String
    utmTerm: String
}

type UserForApp {
    id: ID!
    permissions: [String!]!
    roles: [UserForAppRole]!
}

type UserForAppRole {
    isDefault: Boolean!
    name: String!
}

type UserModel implements IFieldParent & IModel {
    apiId: String!
    apiIdPlural: String!
    contentViews(filter: ContentViewFilterInput, includeSystemContentViews: Boolean = false): [ContentView!]!
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    displayName: String!
    environment: Environment!
    field(id: ID!): IField!
    fields(includeApiOnlyFields: Boolean = false, includeHiddenFields: Boolean = false): [IField!]!
    fieldsConnection(
        first: Int! = 25
        includeApiOnlyFields: Boolean = false
        includeHiddenFields: Boolean = false
        includeSystemFields: Boolean = true
        skip: Int! = 0
    ): FieldsConnection!
    """
    Model has at least one document
    """
    hasContent: Boolean!
    hasLocalizedComponents: Boolean!
    id: ID!
    isLocalized: Boolean!
    isSystem: Boolean!
    isVersioned: Boolean!
    sidebarElements: [ISidebarElement!]!
    titleFields: [IField!]!
    updatedAt: DateTime!
    viewerPermission: ModelViewerPermission!
}

type UserPreferences {
    preferences: JSON
}

type UserSelection {
    createdAt: DateTime!
    id: ID!
    selection: JSON!
    updatedAt: DateTime!
}

type UserViewer implements IViewer {
    app(apiId: String!): App!
    availableExtensionPermissions: [AvailableExtensionPermission!]!
    availableExtensionSrcTypes: [ExtensionSrcType!]!
    availableIntegrations: [INTEGRATION_PROVIDER!]!
    commonAssetConfig: CommonFilestack!
    id: ID!
    paymentAccount(id: ID!): PaymentAccount!
    paymentAccounts: [PaymentAccount!]!
    pendingInvite(code: String!): Invite
    pendingInvites: [Invite!]!
    pendingProject(id: ID!): IPendingProject
    pendingProjects: [IPendingProject!]!
    plans(projectId: ID): [Plan!]!
    project(id: ID): Project
    projects: [Project!]!
    regions: [Region!]!
    templates: [ITemplate!]!
    user: User!
}

type ViewGroup {
    contentType: ViewGroupContentType!
    contentViews(filter: ContentViewFilterInput): [ContentView!]!
    createdAt: DateTime!
    createdBy: Member
    description: String
    environment: Environment!
    id: ID!
    name: String!
    position: Int!
    type: ViewGroupType!
    updatedAt: DateTime!
}

enum ViewGroupContentType {
    ASSET
    DEFAULT
}

enum ViewGroupType {
    CUSTOM
    SYSTEM
    USER_CREATED
}

type Viewer implements IUser {
    availableExtensionPermissions: [AvailableExtensionPermission!]!
    availableExtensionSrcTypes: [ExtensionSrcType!]!
    availableIntegrations: [INTEGRATION_PROVIDER!]!
    createdAt: DateTime!
    id: ID!
    paymentAccount(id: ID!): PaymentAccount!
    paymentAccounts: [PaymentAccount!]!
    pendingInvite(code: String!): Invite
    pendingInvites: [Invite!]!
    plans: [Plan!]!
    preferences: JSON
    profile: Profile!
    project(id: ID!): Project
    projects: [Project!]!
    regions: [Region!]!
    templates: [ITemplate!]!
    updatedAt: DateTime!
}

enum VisibilityTypes {
    """
    Field is not shown, and can only be read or edited through the API
    """
    API_ONLY
    """
    Field is not shown, but can be used by other fields such as slugs or UI Extensions
    """
    HIDDEN
    """
    Field is shown but can't be edited in the UI, only through the API
    """
    READ_ONLY
    """
    Field can be read and edited
    """
    READ_WRITE
}

type Webhook {
    createdAt: DateTime!
    createdBy: CreatedBy
    description: String
    environment: Environment!
    hasSecretKey: Boolean
    headers: JSON!
    id: ID!
    """
    Defines wether the data of the changed data will be sent
    in the webhook payload or not
    """
    includePayload: Boolean!
    isActive: Boolean!
    isSystem: Boolean!
    log(id: String!): WebhookLog
    logs(after: String, limit: Int, orderBy: WebhookLogOrderByInput = calledAt_ASC, skip: Int, where: WebhookLogsWhereInput): WebhookLogsPayload!
    method: WebhookMethod!
    """
    List of models on which the webhook will be triggered.
    In case of any model, this array will be empty.
    """
    models: [IModel!]!
    name: String!
    """
    List of stages on which the webhook will be triggered.
    In case of any stage, this array will be empty.
    """
    stages: [Stage!]!
    """
    When one of the actions happen, the webhook will be triggered
    """
    triggerActions: [WebhookTriggerAction!]!
    triggerSources: [WebhookTriggerSource!]
    """
    The type of trigger the webhook is registered
    """
    triggerType: WebhookTriggerType!
    updatedAt: DateTime!
    url: String!
}

type WebhookLog {
    attempts: Int!
    calledAt: DateTime!
    duration: Float!
    id: String!
    model: IModel
    requestPayload: JSON
    responsePayload: String
    responsePayloadSize: Int
    statusCode: Int!
    triggerAction: WebhookTriggerAction!
}

enum WebhookLogOrderByInput {
    calledAt_ASC
    calledAt_DESC
}

type WebhookLogsPayload {
    entries: [WebhookLog!]!
    total: Int!
}

input WebhookLogsWhereInput {
    action_eq: WebhookTriggerAction
    modelId_eq: ID
    status_eq: Int
    status_gt: Int
    status_gte: Int
    status_in: [Int]
    status_lt: Int
    status_lte: Int
}

enum WebhookMethod {
    DELETE
    GET
    POST
    PUT
}

"""
Defines which operation will trigger the webhook.
Some operations rely on the type of stage. E.g. on a
publishing stage, the webhook will only be triggered for
PUBLISH and UNPUBLISH events. On other stages, only
CREATE, UPDATE and DELETE are triggering the webhook.
"""
enum WebhookTriggerAction {
    CREATE
    DELETE
    PUBLISH
    UNPUBLISH
    UPDATE
}

enum WebhookTriggerSource {
    MEMBER
    PAT
    PUBLIC
}

"""
Defines the type of the trigger
"""
enum WebhookTriggerType {
    CONTENT_MODEL
}

type Workflow {
    createdAt: DateTime!
    description: String
    enabled: Boolean!
    id: ID!
    models: [IModel!]!
    name: String!
    """
    List of roles that can override the workflow
    """
    roleOverrides: [Role!]!
    step(id: ID!): WorkflowStep
    steps: [WorkflowStep!]!
    updatedAt: DateTime!
}

type WorkflowStep {
    allowEdit: Boolean!
    allowedRoles: [Role!]!
    color: ColorPalette!
    createdAt: DateTime!
    description: String
    id: ID!
    name: String!
    position: Int!
    publishStage: Stage
    returnToStep: WorkflowStep
    updatedAt: DateTime!
}

input _AddMemberInput {
    gcms: String
}

type _AddMemberPayload {
    member: Member!
}

input _AddStageToContentViewsInput {
    gcms: String
}

type _AddStageToContentViewsPayload {
    gcms: String
}

input _AssignEnvironmentColorsInput {
    gcms: String
}

type _AssignEnvironmentColorsPayload {
    gcms: String
}

type _BookOverLimitAddonUsage {
    gcms: String
}

input _BookOverLimitInput {
    gcms: String
}

type _BookOverLimitPayload {
    gcms: String
}

input _CloneProjectOptionsInput {
    gcms: String
}

enum _CloneProjectOptionsInputEstimatedDuration {
    LONG
    SHORT
}

input _DeleteProjectInput {
    gcms: String
}

type _DeleteProjectPayload {
    gcms: String
}

input _EnableEnvironmentBackupInput {
    gcms: String
}

type _EnableEnvironmentBackupPayload {
    gcms: String
}

type _FixEnvironmentsWithInvalidFilestackConfigPayload {
    gcms: String
}

type _GetUserPayload {
    gcms: String
}

input _HideNonRequiredFieldsInDefaultContentViewInput {
    gcms: String
}

type _HideNonRequiredFieldsInDefaultContentViewPayload {
    gcms: String
}

type _OverLimitProject {
    gcms: String
}

type _OverLimitProjectAddons {
    gcms: String
}

type _OverLimitProjectAddonsValues {
    gcms: String
}

type _OverLimitProjectUsage {
    gcms: String
}

input _ResetContentConfigInput {
    gcms: String
}

type _ResetContentConfigPayload {
    gcms: String
}

input _SanitizeContentViewStagesInput {
    gcms: String
}

type _SanitizeContentViewStagesPayload {
    gcms: String
}

input _UpdateMemberRolesInput {
    gcms: String
}

input _UpdatePlanTrialInput {
    gcms: String
}

type _UpdatePlanTrialPayload {
    gcms: String
}
