type Query {
    paymentMethods(options: PaymentMethodListOptions): PaymentMethodList!
    paymentMethod(id: ID!): PaymentMethod
    paymentMethodEligibilityCheckers: [ConfigurableOperationDefinition!]!
    paymentMethodHandlers: [ConfigurableOperationDefinition!]!
}

type Mutation {
    "Create existing PaymentMethod"
    createPaymentMethod(input: CreatePaymentMethodInput!): PaymentMethod!
    "Update an existing PaymentMethod"
    updatePaymentMethod(input: UpdatePaymentMethodInput!): PaymentMethod!
    "Delete a PaymentMethod"
    deletePaymentMethod(id: ID!, force: Boolean): DeletionResponse!
    "Delete multiple PaymentMethods"
    deletePaymentMethods(ids: [ID!]!, force: Boolean): [DeletionResponse!]!

    "Assigns PaymentMethods to the specified Channel"
    assignPaymentMethodsToChannel(input: AssignPaymentMethodsToChannelInput!): [PaymentMethod!]!

    "Removes PaymentMethods from the specified Channel"
    removePaymentMethodsFromChannel(input: RemovePaymentMethodsFromChannelInput!): [PaymentMethod!]!
}

type PaymentMethodList implements PaginatedList {
    items: [PaymentMethod!]!
    totalItems: Int!
}

# generated by generateListOptions function
input PaymentMethodListOptions

input PaymentMethodTranslationInput {
    id: ID
    languageCode: LanguageCode!
    name: String
    description: String
}

input CreatePaymentMethodInput {
    code: String!
    enabled: Boolean!
    checker: ConfigurableOperationInput
    handler: ConfigurableOperationInput!
    translations: [PaymentMethodTranslationInput!]!
}

input UpdatePaymentMethodInput {
    id: ID!
    code: String
    enabled: Boolean
    checker: ConfigurableOperationInput
    handler: ConfigurableOperationInput
    translations: [PaymentMethodTranslationInput!]
}

input AssignPaymentMethodsToChannelInput {
    paymentMethodIds: [ID!]!
    channelId: ID!
}

input RemovePaymentMethodsFromChannelInput {
    paymentMethodIds: [ID!]!
    channelId: ID!
}
